exec_print proc pascal near
           uses ax,bx,cx,dx
           local
           
           xor cx,cx
@@do:           
           call get_token
           cmp tok,_EOL
           jne @@check_finish
           jmp @@break
@@check_finish:           
           cmp tok,_FINISHED
           jne @@check_quote
           jmp @@break
@@check_quote:           
           cmp al,QUOTE
           jne @@expr
           push offset token
           call strout
           push offset token
           call strlen
           add cx,ax
           call get_token
           jmp @@save_last_delim
@@expr:
           call putback
           call eval_expr
           push ax
           call get_token           
           push offset str_buf+002h
           call itoa
           push offset str_buf+002h
           call strout
           push offset str_buf+002h
           call strlen
           add cx,ax 
@@save_last_delim:
           mov dl,token
           cmp dl,COMMA
           jne @@check_semi
           push dx
           mov ax,cx
           mov dl,008h
           div dl
           sub dl,ah
.386           
           movzx bx,dl
.186           
           pop dx
           add cx,bx
@@out_spaces:           
           or bx,bx
           jz @@while
           push word ptr SPACE
           call charout
           dec bx
           jmp @@out_spaces                       
@@check_semi:   
           cmp dl,SEMIC
           jne @@check_eol
           push word ptr SPACE
           call charout
           inc cx
           jmp @@while
@@check_eol:    
           cmp tok,_EOL
           je @@while
           cmp tok,_FINISHED
           je @@while
           push SYNTAX
           call serror
@@while:
           cmp token,SEMIC
           jne @@check_comma
           jmp @@do
@@check_comma:           
           cmp token,COMMA
           jne @@break
           jmp @@do
@@break:
           cmp tok,_EOL
           je @@check_last_delim
           cmp tok,_FINISHED
           je @@check_last_delim
           push SYNTAX
           call serror
@@check_last_delim:
           cmp dl,SEMIC
           je @@exit
           cmp dl,COMMA
           je @@exit
           call newline
@@exit:           
           ret
exec_print endp