Here is my code so far. Everything works, except the output is not correctly formatted.
In the console, I am getting everything on one line. Each Time is x should be on it's own line.
In the file, it is writing the whole input buffer (message + n null chars = 71), File should look like this:
Time is 1
Time is 2
.
.
.
Time is n
I am getting:
Time is 1
Time is 2
Time is 3
.
.
.
Time is N
Here are the important code pieces
INCLUDE Irvine32.inc
.data
;-----DATA FOR FILE HANDLING-----
fileName byte 41 dup (?)
fileHandle HANDLE ?
;-----END OF FILE HANDLING DATA-----
;-----MISC BUFFERS-----
BUFFSIZE equ 71
inputBuffer byte 41 dup (?) ;input buffer
outBuffer byte BUFFSIZE dup (?)
outBufferPos dword 0
numChars dword ?
;-----END-----
;-----PROGRAM VARIABLES-----
useEcho byte ? ;if echo is being used. 1 for true, 0 for false
time word 1 ;start time at 1
;-----END PROG VARIABLES-----
;-----MESSAGE PARTS-----
timeis byte "Time is "
;-----END MESSAGE PARTS
;macros
writeLine MACRO text
LOCAL string ;local label
.data
string BYTE text,0
.code
push edx
mov edx,OFFSET string
CALL WriteString
pop edx
ENDM
.code
main PROC
call getFileName
call makeFile
cmp error, 1
je ext
mov ecx, 22
lp2:
call addTime
dec ecx
jne lp2
ext:
exit
main ENDP
;-------------------------------------------------------
; getFileName procedure
; Desc: this will ask the user to enter the file-
; name for storing output
;-------------------------------------------------------
getFileName PROC
pushad ;push all registers
begin: ;beginning of loop
writeLine "Please enter the filename (up to 40 characters): " ;print message
mov edx, OFFSET fileName ;get the address of inputbuffer
mov ecx, SIZEOF fileName ;get the size of the input buffer
CALL ReadString ;read in user input
cmp eax, 0 ;did they input something?
je begin ;if not, reprompt
call Crlf
call WriteString
popad
ret
getFileName ENDP
;-------------------------------------------------------
;-------------------------------------------------------
; makeFile procedure
; Desc: this will ask the user to enter the file-
; name for storing output
;-------------------------------------------------------
makeFile PROC
mov edx, OFFSET fileName
CALL CreateOutputFile
cmp eax, INVALID_HANDLE_VALUE
je err
mov fileHandle, eax
jmp ext
err:
writeLine "Error opening file. Program quitting"
mov error, 1
ext:
ret
makeFile ENDP
;-------------------------------------------------------
;-------------------------------------------------------
; addTime
; Desc: this procedure will write current time
; to the command line and to the output file
; It will then inc time.
;-------------------------------------------------------
addTime PROC
pushad ;push the registers
CALL clearOutputBuffer ;clear the output buffer
mov ecx, LENGTHOF timeis ;get length of message in ecx
mov outBufferPos, ecx ;update the buffer pos
mov esi, OFFSET timeis ;point to the message part
mov edi, OFFSET outBuffer ;point to the buffer
cld ;clear direction
rep movsb ;copy the string
mov outBuffer[8], 20h ;add a space
mov eax, 0
mov ax, time
mov ecx, 0
mov bx, 10
mov edi, OFFSET outBuffer
add edi, outBufferPos
lp1:
mov edx, 0
div bx
or dl, 30h
push edx
inc ecx
cmp ax, 0
jne lp1
mov edx, ecx
lp2:
mov eax, 0
pop eax
mov byte ptr[edi], al
inc edi
dec ecx
jne lp2
mov byte ptr[edi], 0
inc edi
inc outBufferPos
mov byte ptr[edi], 0dh
inc edi
inc outBufferPos
mov byte ptr[edi], 0ah
inc outBufferPos
mov edx, OFFSET outBuffer ;prepare to print
CALL WriteString ;print message
mov eax, fileHandle
mov ecx, BUFFSIZE
CALL WriteToFile
inc time
popad
ret
addTime ENDP
;-------------------------------------------------------
;-------------------------------------------------------
; clearOutputBuffer
; Desc: this procedure will clear the output
; buffer by placing all null chars in all slots
; and reseting the buffer position back to 0
;-------------------------------------------------------
clearOutputBuffer proc
pushad
mov ecx, 0
lp1:
cmp ecx, BUFFSIZE
je ext
mov outBuffer[ecx], 0
inc ecx
jmp lp1
ext:
mov outBufferPos, 0
popad
ret
clearOutputBuffer endp
;-------------------------------------------------------
END main