16bit DOS窓の時代は、ANSI.SYS を config.sys で読み込むことで、ANSI ESCAPE SEQUENCE が利用できたわけですが、32bit 対応になったあたりから ANSI.SYS が使えなくなっていました。
しかしながら UNIX系のターミナルではまだ ANSI ESCAPE SEQUENCE が使われていることもあって、ANSI ESCAPE SEQUENCE のエミュレーションを 64bit/32bit Windows のコマンドプロンプトで実現するソフトが作られているようです。それが ANSICON です。https://github.com/adoxa/ansicon
昔懐かしい ANSI ESCAPE SEQENCE を用いて、これまた昔懐かしいキャラクターグラフィックをやってみました。
ソースプログラム
program ansi2 implicit none real, parameter :: pi = 4.0 * atan(1.0) character, parameter :: esc = achar(27) enum, bind(c) enumerator :: Reset_all_attributes = 0, Bright, Dim, Underscore, Blink, Reverse, Hidden enumerator :: fg_Black = 30, fg_Red, fg_Green, fg_Yellow, fg_Blue, fg_Magenta, fg_Cyan, fg_White enumerator :: bg_Black = 40, bg_Red, bg_Green, bg_Yellow, bg_Blue, bg_Magenta, bg_Cyan, bg_White end enum integer :: i, ix, iy, ix0 = 5, iy0 = 13 real :: a, x, y print "(a, '[2J')", esc ! CLS !GRAPH TITLE ix = 40 iy = 2 print "(a, '[', i2.2, ';', i2.2, 'm')", esc, fg_blue, bg_yellow print "(a, '[', i2.2, ';', i2.2, 'H', a)", esc, iy, ix, 'exp(-ax) * sin(x)' print "(a, '[', i2.2, 'm')", esc, Reset_all_attributes !plot axes ! x-axis, y-axis ix = ix0 + 83 iy = iy0 + 1 print "(a, '[', i4.4, ';', i4.4, 'H', a)", esc, iy, ix, 'X' ix = ix0 - 2 iy = iy0 + 1 print "(a, '[', i4.4, ';', i4.4, 'H', a)", esc, iy, ix, '0' do i = 1, 90 ix = i iy = iy0 print "(a, '[', i2.2, ';', i2.2, 'H', a)", esc, iy, ix, '-' end do do i = 1, 25 ix = ix0 iy = i print "(a, '[', i2.2, ';', i2.2, 'H', a)", esc, iy, ix, '|' end do !plot curve a = 0.12 print "(a, '[', i2.2, ';', i2.2, 'm')", esc, fg_red, bright do i = 1, 80 x = 4 * (i - 1) * pi / 80 y = sin(x) * exp(- a * x) ix = ix0 + i iy = iy0 - 10 * y print "(a, '[', i3.3, ';', i2.2, 'H', a)", esc, iy, ix, '*' end do print "(a, '[', i2.2, 'm')", esc, Reset_all_attributes print "(a, '[26;1H')", esc end program ansi2