いつの間にかDOS窓(コマンドプロンプト)でANSIのESCシーケンスが使えなくなっていたのですね。16ビット互換のDOS窓でしか機能しないようです。
BASIC時代のLOCATE命令のようなものが欲しかったので、Win32API呼び出しでやることにしました。
ソースコード
MODULE m_locate USE ifwinty USE kernel32 IMPLICIT NONE CONTAINS ! SUBROUTINE locate(ix, iy) INTEGER, INTENT(IN) :: ix, iy INTEGER (HANDLE) :: hout INTEGER (BOOL) :: bret TYPE (T_COORD) :: tpos hout = GetStdHandle(STD_OUTPUT_HANDLE) tpos = t_coord( INT(ix, SHORT), INT(iy, SHORT) ) bret = SetConsoleCursorPosition( hout, tpos ) RETURN END SUBROUTINE locate ! SUBROUTINE pr(ix, iy, text) INTEGER, INTENT(IN) :: ix, iy CHARACTER(*), INTENT(IN) :: text CALL locate(ix, iy) WRITE(*, '(a)') text RETURN END SUBROUTINE pr ! END MODULE m_locate !================================= PROGRAM test USE m_locate REAL :: pi = 4.0 * ATAN(1.0) INTEGER :: ix, iy CALL pr(35, 0, 'SIN CURVE') DO ix = 1, 79 CALL pr(ix, 12, '-') iy = 12 - INT(10.0 * SIN( REAL(ix) * pi / 40.0)) CALL pr(ix, iy, '*') END DO CALL pr(0, 23, '') STOP END PROGRAM test