Reputation: 87
when i'm reading and getting file's data and than trying to read and get another text file's data, it's writing the new data on the used string for example, string contains "oh yeah!", after getting another file's data "heyyeah!". (obviously the second file i was reading contained the word hey in it). i want to clear the string from the data it got from the 1st file when reading the second file/after displaying the data of the 1st file.
Full code:
IDEAL
MODEL small
STACK 100h
DATASEG
szMsg1 db "Hi! What do you want to do?",10,13,10,13,"/h-help(see all the commands)",10,13,"/e-Exit",10,13,10,13,"$"
szHelloWorld db 10,13,"Hello World!",10,13,"$"
ErrorMsg db 10,13,"Illegal Command,Try again!",10,13,"$"
filenameStr db 13,0,13 dup("$")
help db 10,13,"HELP LIST:",10,13,"-----------",10,13,"Commands are:",10,13," /e-Exit",10,13," /h-help",10,13," /1-Says: 'Hello World!'",10,13,"$"
filename db ?,0
filehandle dw 0
ErrorOpenMsg db 'Error',10,13,'$'
FileNameLength db "file name consists of 8 letters max! (dont forget to add '.txt' at the end of the name: 'example.txt')",10,13,"/r/ ","$"
fileString db 255 dup (0)
space db " ","$"
CommandMsg db 10,13,"Enter your command:",10,13,"Command: ","$",10,13
filereaderline db "file's text:","$"
CODESEG
proc OpenFile
;Open file
mov ah,3Dh
xor al,al
lea dx,[filenameStr+2]
int 21h
jc openerror
mov [filehandle],ax
ret
openerror:
mov dx,offset ErrorOpenMsg
mov ah,9h
int 21h
ret
endp OpenFile
proc ReadFile
mov ah,3fh
mov bx,[filehandle]
mov cx,255
lea dx,[fileString]
int 21h
ret
endp ReadFile
proc DeleteFile
mov ah,41h
lea dx,[filenameStr+2]
int 21h
endp DeleteFile
proc DisplayFileString
mov ah,09h
lea dx,[fileString]
int 21h
endp DisplayFileString
proc KeyStroke
xor ax,ax
int 16h
endp KeyStroke
proc WriteToFile
mov ah,40h
mov bx,[filehandle]
mov cx,255
lea dx,[fileString]
int 21h
ret
endp WriteToFile
proc CloseFile
mov ah,3Eh
mov bx,[filehandle]
int 21h
ret
endp CloseFile
start:
mov ax, @data
mov ds, ax
mov dx,offset szMsg1
mov ah,9h
int 21h
jmp GetCommandLetter
_Error:
mov dx,offset ErrorMsg
mov ah,9h
int 21h
GetCommandLetter:
mov dx,offset CommandMsg
mov ah,9h
int 21h
mov ah, 1h
int 21h
mov bl,al
mov ah, 1h
int 21h
mov bh,al
compare:
cmp bl,'/'
jne _Error
cmp bh,'h'
je _help
cmp bl,'/'
jne _Error
cmp bh,'H'
je _help
cmp bl,'/'
jne _Error
cmp bh,'1'
je PrintLine
cmp bl,'/'
jne _Error
cmp bh,'e'
je _exit
cmp bl,'/'
jne _Error
cmp bh,'E'
je exit
mov dx,offset space
mov ah,9h
int 21h
mov dx,offset FileNameLength
mov ah,9h
int 21h
cmp bl,'/'
jne _Error
cmp bh,'r'
je GetFileName
cmp bl,'/'
jne _Error
cmp bh,'R'
je GetFileName
jmp _Error
_exit:
jmp exit
_help:
mov dx,offset help
mov ah,9h
int 21h
jmp GetCommandLetter
GetFileName:
mov dx,offset space
mov ah,9h
int 21h
mov dx,offset filenameStr
mov bx,dx
mov [byte ptr bx],13 ;8+1+3+1
mov ah,0Ah
int 21h
mov dx,offset filenameStr + 2
mov ah,9h
int 21h
mov [byte ptr filenameStr+2+8],0
call OpenFile
call ReadFile
mov dx,offset filereaderline
mov ah,9h
int 21h
call DisplayFileString
call CloseFile
jmp GetCommandLetter
PrintLine:
mov dx, offset szHelloWorld
mov ah, 9h
int 21h
jmp GetCommandLetter
exit:
mov ax, 4c00h
int 21h
END start
Upvotes: 2
Views: 1743
Reputation: 9899
If your program runs fine for the "bova.txt" then you'll get a similar result for the second file "help.txt" if you just clean the buffer at the label fileString.
call OpenFile
xor bx,bx
WipeClean:
mov [byte ptr fileString + bx], 0
inc bx
cmp bx, 255
jb WipeClean
call ReadFile
mov dx, offset filereaderline
mov ah, 09h
int 21h
call DisplayFileString
call CloseFile
jmp GetCommandLetter
Upvotes: 1