# tak starts to work on this at 23:02 # tak finishes at 23:32 # a total of 30 minutes to write the entire program from scratch maxwidth = 65 .data word: .fill 20,1,0 wordlen: .byte 0 outcol: .byte 0 chread: .byte 0 numnl: .byte 0 space: .byte 32 linefeed: .byte 10 .text .global _start _start: movb $0, outcol movb $0, wordlen movb $0, numnl read_another_char: movl $3,%eax movl $0,%ebx movl $chread,%ecx movl $1,%edx int $0x80 cmpl $0,%eax jz done_reading cmpb $'\n',chread jnz not_linefeed cmpb $1, numnl jnz not_second_nl movl $4,%eax movl $1,%ebx movl $linefeed,%ecx movl $1,%edx int $0x80 not_second_nl: addb $1,numnl cmpb $1,numnl jna no_paragraph_spacing movl $4,%eax movl $1,%ebx movl $linefeed,%ecx movl $1,%edx int $0x80 no_paragraph_spacing: jmp process_word not_linefeed: cmpb $1,numnl jnz no_linefeed_as_space movl $4,%eax movl $1,%ebx movl $space,%ecx movl $1,%edx int $0x80 movb $0,outcol no_linefeed_as_space: movb $0,numnl process_word: cmpb $32,chread jz is_space_or_linefeed cmpb $1,numnl jnz not_space_nor_linefeed is_space_or_linefeed: movl $4,%eax movl $1,%ebx movl $word,%ecx movl $0,%edx movb wordlen,%dl int $0x80 cmpb $32,chread jnz not_space movl $4,%eax movl $1,%ebx movl $space,%ecx movl $1,%edx int $0x80 addb $1,outcol movb wordlen,%al addb %al,outcol jmp space_or_linefeed not_space: movb wordlen,%al addb %al,outcol space_or_linefeed: movb $0, wordlen jmp read_another_char not_space_nor_linefeed: cmpb $10,chread jz read_another_char movl $0,%eax movb wordlen,%al movb chread,%bl movb %bl,word(,%eax,1) addb $1,wordlen movb wordlen,%bl addb outcol,%bl cmpb $maxwidth,%bl jb read_another_char movl $4,%eax movl $1,%ebx movl $linefeed,%ecx movl $1,%edx int $0x80 movb $0,outcol jmp read_another_char done_reading: cmpb $1,numnl ja all_done movl $4,%eax movl $1,%ebx movl $linefeed,%ecx movl $1,%edx int $0x80 all_done: movl $1,%eax int $0x80