Compare commits

..

5 Commits

  1. 1
      .gitignore
  2. 3
      callbacks/parameters.tcl
  3. BIN
      scriptlib/cmd2.exe
  4. BIN
      scriptlib/j3.zip
  5. 1
      scriptlib/packages.tcl
  6. 1
      scriptlib/showargsplus.tcl
  7. 1
      src/modules/punk/mix/commandset/repo-999999.0a1.0.tm
  8. 12
      src/modules/punk/repl-0.1.tm
  9. 72
      src/modules/punk/repo-999999.0a1.0.tm
  10. 8
      src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/console-0.1.1.tm
  11. 8
      src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/console-0.1.1.tm
  12. 1
      src/scriptapps/xxx.txt
  13. 47
      src/testansi/ANSIDEMO.BAT
  14. 52
      src/testansi/AN_APPLE.ANS
  15. BIN
      src/testansi/AN_APPLE.GIF
  16. 18
      src/testansi/Mario_wide.ans
  17. 9
      src/testansi/MiniColorsWheel.ans
  18. 22
      src/testansi/MorseCode.ans
  19. 24
      src/testansi/SonicGreenHillZone.ans
  20. 24
      src/testansi/SonicGreenHillZone256.ans
  21. 12
      src/testansi/Win10PowerToys.ans
  22. 7
      src/testansi/WindowsTerminal.ans
  23. 4
      src/testansi/Windows_Terminal_octants.txt
  24. 28
      src/testansi/error_overtype.txt

1
.gitignore vendored

@ -49,6 +49,7 @@ _FOSSIL_
#miscellaneous editor files etc
*.swp
.vscode
/src/modules/punk/mix/templates/utility/multishell.ps1

3
callbacks/parameters.tcl

@ -29,7 +29,8 @@ namespace eval shellspy::parameters {
proc commonset {logtag paramdict} {
#timeout for launched process
dict set paramdict -timeout 60000
#dict set paramdict -timeout 60000
dict set paramdict -timeout 5000
#prefix for each stdout line - for debugging if this output being mixed with some other
dict set paramdict -outprefix ""
#prefix for each stderr line - also usually best left blank

BIN
scriptlib/cmd2.exe

Binary file not shown.

BIN
scriptlib/j3.zip

Binary file not shown.

1
scriptlib/packages.tcl

@ -1,3 +1,4 @@
set ::tclsh(evalinput) 1
set sep [string repeat - 30]
puts stdout $sep
puts stdout "tcl::tm::list"

1
scriptlib/showargsplus.tcl

@ -1,3 +1,4 @@
set ::tclsh(evalinput) 1
puts stdout "argc: $::argc"
puts stdout "argv one arg per line, each line followed by dotted line."
foreach a $::argv {

1
src/modules/punk/mix/commandset/repo-999999.0a1.0.tm

@ -25,6 +25,7 @@
namespace eval punk::mix::commandset::repo {
namespace export *
proc tickets {{project ""}} {
#todo
set result ""
if {[string length $project]} {
puts stderr "project status unimplemented"

12
src/modules/punk/repl-0.1.tm

@ -609,9 +609,19 @@ proc repl::newout2 {} {
proc repl::doprompt {prompt {col {green bold}}} {
#prompt to stderr.
#We can pipe commands into repl's stdin without the prompt interfering with the output.
#Although all command output for each line goes to stdout - not just what is emmited with puts
#Although all command output for each line goes to stdout - not just what is emitted with puts
if {$::tcl_interactive} {
flush stdout; #we are writing this prompt on stderr, but stdout could still be writing to screen
#our first char on stderr is based on the 'lastchar' of stdout which we have recorded but may not have arrived on screen.
#The issue we're trying to avoid is the (stderr)prompt arriving midway through a large stdout chunk
#REVIEW - this basic attempt to get stderr/stdout to cooperate is experimental and unlikely to achieve the desired effect
#note that our 'flush stdout' tcl call does not wait if stdout is non-blocking
#todo - investigate if the overhead is reasonable for a special channel that accepts stdout and stderr records with a reader to send to console in chunk-sizes we know will be emitted correctly
# - reader of such channel could be ok to be blocking (on read? on write to real channels?)... except everything still needs to be interruptable by things like signals?
#? - we want ordinary puts to stderr to be prioritized? to arrive on-screen - just not at arbitrary locations within stdout, and still must be correctly ordered wrt all other stderr
# - in our repl and code threads we don't want to put stderr/stdout writes in blocking mode and have code waiting on it
set last_char_info [screen_last_char_getinfo]
if {![llength $last_char_info]} {
set needs_clearance 1

72
src/modules/punk/repo-999999.0a1.0.tm

@ -346,6 +346,11 @@ namespace eval punk::repo {
#does a dual git/fossil repo make sense if both are committing??
# see: https://fossil-scm.org/home/doc/trunk/www/inout.wiki for bidirectional sync info
proc workingdir_state {{abspath {}} args} {
#we should try to minimize executable calls
#an extra git/fossil executable call required for tags
#git seems to require more executable calls
set defaults [list\
-repotypes [list fossil git]\
-repopaths ""\
@ -408,6 +413,8 @@ namespace eval punk::repo {
set revision ""
set revision_iso8601 ""
set pathdict [dict create]
set branch ""
set tags ""
if {![llength $repotypes_to_query]} {
error "No tracking information available for project at $repodir with the chosen repotypes '$opt_repotypes'. Ensure project workingdir is a fossil (or git) checkout"
@ -437,6 +444,38 @@ namespace eval punk::repo {
}
set revision_iso8601 "${revision_ymd}T${revision_hms}${revision_tz}"
#REVIEW! what are the semantic difference between tags in fossil v git?
#fossil has tagtypes such as propagated and singleton(onetime)
#if we get all tag info for the revision - we can get the current branch (branch=somename tag) at the same time
#by retrieving with --raw - we have to process some prefixes such as sym- but probably best not done here
#we will return all tags that apply to the current revision and let the caller decide the meanings
if {![catch {punk::mix::util::do_in_path $repodir [list exec {*}$fossil_cmd tag ls --raw $revision]} cmdresult]} {
set branchinfo [lindex [grep {branch=*} $cmdresult] 0] ;#first line match - should only be one
set branch [lindex [split $branchinfo =] 1]
set tags [list]
foreach ln [split $cmdresult \n] {
if {[string trim $ln] eq ""} {
continue
}
lappend tags [string trim $ln]
}
}
#set tags_info [lindex [grep {tags:*} $fossilstate 0] ;#first line match - should only be one
#we get lines like:
#tags: trunk, main
#tags: trunk
#set rawtags [lrange $tags_info 1 end] ;#REVIEW
#set tags [list]
#foreach t $rawtags {
# lappend tags [string trimright $t ,]
#}
#if {![catch {punk::mix::util::do_in_path $repodir [list exec {*}$fossil_cmd branch current]} cmdresult]} {
# set branch $cmdresult ;#command result doesn't include newline etc
#}
dict set resultdict ahead ""
dict set resultdict behind ""
@ -490,6 +529,7 @@ namespace eval punk::repo {
set git_cmd [auto_execok git]
# -uno = suppress ? lines.
# -b = show ranch and tracking info
#our basic parsing/grepping assumes --porcelain=2
if {[catch {punk::mix::util::do_in_path $repodir [list exec {*}$git_cmd status --porcelain=2 -b -- $abspath]} gitstate]} {
error "workingdir_state error: Unable to retrieve workingdir state using git. Errormsg: $gitstate"
}
@ -499,6 +539,13 @@ namespace eval punk::repo {
puts stderr "workingdir_state: git revision is (initial) - no file state to gather"
break
}
# line: # branch.head somebranchname
set branch [lindex [grep {# branch.head *} $gitstate] 0 2]
if {![catch {punk::mix::util::do_in_path $repodir [list exec {*}$git_cmd describe --exact-match --tags]} cmdresult]} {
set tags $cmdresult ;#review - we have short tags vs longer.. e.g v0.1a vs v0.1a-184-g856fab4 - which is returned? Also how are multiple separated?
}
#often there will be no tag - so the common case is actually an error "fatal: not ag exactly matchs 'xxxx...'"
# -- --- --- --- ---
#could use %ci for ISO8601 data - see git-show manpage, but this will be in timezone of developer's machine - we need it in UTC for comparison to fossil outputs and other devs
@ -600,9 +647,11 @@ namespace eval punk::repo {
puts stderr "workingdir_state - repotype $rt not supported"
}
}
dict set resultdict revision $revision
dict set resultdict revision_iso8601 $revision_iso8601
dict set resultdict paths $pathdict
dict set resultdict branch $branch
dict set resultdict tags $tags
dict set resultdict revision $revision
dict set resultdict revision_iso8601 $revision_iso8601
dict set resultdict paths $pathdict
return $resultdict
}
proc workingdir_state_summary {repostate args} {
@ -610,8 +659,13 @@ namespace eval punk::repo {
error "workingdir_state_summary error repostate doesn't appear to be a repostate dict. (use workingdir_state <path> to create)"
}
package require overtype
#the revision branch and tags are highly relevant to the file state - and workingdir_state currently retrieves them anyway
# - so we'll include them in the defaults
# - when we are including working dir state as part of other output - we could be duplicating branch/tag retrievals
# - todo - flags to stop duplicating effort ??
set defaults [dict create\
-fields {ahead behind unchanged changed new missing extra}\
-fields {revision branch tags ahead behind unchanged changed new missing extra}\
]
set opts [dict merge $defaults $args]
# -- --- --- --- --- --- --- --- --- ---
@ -625,6 +679,8 @@ namespace eval punk::repo {
subpath subpath\
revision revision\
revision_iso8601 revision_iso8601\
branch branch\
tags tags\
ahead ahead\
behind behind\
repotype repotype\
@ -662,13 +718,15 @@ namespace eval punk::repo {
set result [string trimright $result \n]
return $result
}
#todo - describe purpose and possibly rename
proc workingdir_state_summary_dict {repostate} {
if {![dict exists $repostate repotype] || ![dict exists $repostate paths]} {
error "workingdir_state_summary_dict error repostate doesn't appear to be a repostate dict. (use workingdir_state <path> to create)"
}
set filestates [dict values [dict get $repostate paths]]
set path_count_fields [list unchanged changed new missing extra]
set state_fields [list ahead behind repodir subpath repotype revision revision_iso8601]
set state_fields [list ahead behind repodir subpath repotype revision revision_iso8601 branch tags]
set dresult [dict create]
if {[dict exists $repostate error]} {
foreach f $state_fields {
@ -1182,7 +1240,7 @@ namespace eval punk::repo {
#------------------------------------
#limit to exec so full punk shell not required in scripts
proc git_revision {{path {}}} {
proc git_revision {{path ""}} {
if {$path eq {}} { set path [pwd] }
# ::kettle::path::revision.git
do_in_path $path {
@ -1196,7 +1254,7 @@ namespace eval punk::repo {
}
return [string trim $v]
}
proc git_remote {{path {{}}}} {
proc git_remote {{path ""}} {
if {$path eq {}} { set path [pwd] }
do_in_path $path {
try {

8
src/project_layouts/custom/_project/punk.project-0.1/src/bootsupport/modules/punk/console-0.1.1.tm

@ -177,9 +177,13 @@ namespace eval punk::console {
}
#todo - something better - the 'channel' concept may not really apply on unix, as raw mode is for input and output modes
#todo - something better - the 'channel' concept may not really apply on unix, as raw mode is set for input and output modes currently - only valid to set on a readable channel?
#on windows they can be set independently (but not with stty) - REVIEW
#NOTE - the is_raw is only being set in current interp - but the channel is shared.
#this is problematic with the repl thread being separate. - must be a tsv? REVIEW
proc enableRaw {{channel stdin}} {
variable is_raw
variable is_raw
variable previous_stty_state_$channel
set sttycmd [auto_execok stty]
if {[set previous_stty_state_$channel] eq ""} {

8
src/project_layouts/custom/_project/punk.shell-0.1/src/bootsupport/modules/punk/console-0.1.1.tm

@ -177,9 +177,13 @@ namespace eval punk::console {
}
#todo - something better - the 'channel' concept may not really apply on unix, as raw mode is for input and output modes
#todo - something better - the 'channel' concept may not really apply on unix, as raw mode is set for input and output modes currently - only valid to set on a readable channel?
#on windows they can be set independently (but not with stty) - REVIEW
#NOTE - the is_raw is only being set in current interp - but the channel is shared.
#this is problematic with the repl thread being separate. - must be a tsv? REVIEW
proc enableRaw {{channel stdin}} {
variable is_raw
variable is_raw
variable previous_stty_state_$channel
set sttycmd [auto_execok stty]
if {[set previous_stty_state_$channel] eq ""} {

1
src/scriptapps/xxx.txt

@ -1 +0,0 @@
julz

47
src/testansi/ANSIDEMO.BAT

@ -0,0 +1,47 @@
@ECHO OFF
REM ANSIDEMO.BAT, Version 2.00
REM Demonstrates the use of ANSI to control
REM text attributes and cursor positioning.
REM Written by Rob van der Woude
REM http://www.robvanderwoude.com
REM "" is the Escape character, "[" is the Escape character followed by "["
REM How they will be displayed completely depends on the editor/viewer or
REM browser you use and the selected codepage.
REM See http://www.robvanderwoude.com/ansi.html for a detailed description
REM of ANSI sequences.
ECHO Demo of ANSI sequences in batch filesCursor positioning...
FOR %%A IN (6 8 10 12 14 16 18 20) DO ECHO [%%A;%%AH%%A
PAUSE
ECHO Text attributes...
FOR %%A IN (8 10 12 14 16 18 20) DO ECHO [%%A;%%AH%%A
ECHO 
PAUSE
ECHO 
FOR %%A IN (0 1 2 3 4 5 6) DO ECHO [1%%A;1%%AH[0;3%%A;47mForeground color 3%%A
ECHO Foreground color 37
PAUSE
ECHO N O R M A L F O R E G R O U N D
FOR %%A IN (0 1 2 3 4 5 6 7) DO %COMSPEC% /C FOR %%B IN (0 1 2 3 4 5 6 7) DO ECHO [1%%A;%%B1H[3%%A;4%%Bm 3%%A on 4%%B 
ECHO 
PAUSE
ECHO B R I G H T F O R E G R O U N D
FOR %%A IN (0 1 2 3 4 5 6 7) DO %COMSPEC% /C FOR %%B IN (0 1 2 3 4 5 6 7) DO ECHO [1%%A;%%B1H[3%%A;4%%Bm 3%%A on 4%%B 
ECHO 
PAUSE
ECHO 0 = Normal text1 = Bright text
ECHO 2 = Bright attribute off? probably not, this hardly ever works
ECHO 4 = Underlined or blue5 = Blinking text or bright background
ECHO 7 = Reversed text8 = Invisible text (invisible, except on b/w screen prints)
ECHO 
PAUSE
ECHO 
ECHO.
ECHO As you probably noticed, all kind of "nonsense" is displayed on your screen.
ECHO You obviously need to load ANSI.SYS first and then run this demo again.
ECHO.
ECHO See http://www.robvanderwoude.com/ansi.html for more details
ECHO.
ECHO See http://www.robvanderwoude.com/ansi.html for more details

52
src/testansi/AN_APPLE.ANS

@ -0,0 +1,52 @@
Date: 06 Oct 92 15:57:00 From: Chris Blanton
To: All Subj: Good entry
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßßßßßßÛÛÛÛÛÛÛÛÛÛÛÛß ÜÛÛ
Û ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛß ÜÜÜÜ ÛÜÜ ßÛÛ
ÛÛÛÛÛß ÜÛßß ÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßß ÛÛ
ÛÛÛÛÛÜÜÜÜÜÜÜÜÜßßßÜÜÜÜÜÜÜßß Ü
ÜÜÛÛ ßÛ Û Ü ßßßßß 
ÜÛßßßßßÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜßßßßßßßßßÛÜÜÜ ßß 
ÜÜ ÛÜ ßß Ü Ü ßßßßßßÜÞÛ
Ûßßßßßßßßßßßßßßßßßßßß
ÛÛÛÛÛÛÛÛÛÜ ßßÛ ßß ß Ü
 Û Û Ûßß ÜÜÜÜ ß Û
ÝÝÞÜßß ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ
 ßßßÛ Û Û Û ß
ßßß ÜÛÛÛÛÛÛÛ ÞÛÛÞÛÛÛÜÜÜÜ
ÛÛÝ ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÛÛÛÛÛÛÛÛÛÛÛÝ ÛÝÝÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜßß ÜÜÜÜÜ 
ÞÛÛ ÜÜÜÜÜÜ ßßßßßßßÜÜ
ßßßßßÜÜÜÜÜÜÜÜÜÜßßßßßßßßßßßßßßßßßßßßßßßßß
ßßßßß ÜÛÛÛÛÛÛÛÛÜÛ ÜÛÛÛÛÛÛÛÛÛÛÜ
ßßßßßßßßßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
Ûß ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛßÜ
ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÝ Û
ÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÝÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛ ÞÝÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÝ ÛÞÜÜÜÜßßßßßßßßßßßßßßßßßß
ßßßßßßßÝÞÛ ÛÛÛÛÛÛÛÛÛÛÛÛÜ ßÛÛÛÛÛ
Ý ÞÝßßßßÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÝÞÝ ÛÛÛ
ÛÛÛÛÛÛÛÛÛÛ ÛÛÛÝ ÛÝÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Û ÞÛÛÛÛÛÛÛÛÛÛÛÛÝ ÞÛÝ 
ÛÞÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÝÞÝ ßßßÛÛÛÛÛÛÛÛß 
 ß ÛÝÛÛÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ ßßßßß Û
ßÜÜÜÜÜÜßßßßßßßßßßßßßßßßßßßßßßßßßßßÜ ß
Ü ÛÝÜßßßßßßß
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÜ ßÜ ÜÜÛß
ÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÜ ß
ßÜÜÜÜÜ ÜÜÛÛßßÜÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÛÛÜÜÜ ßßßßßßßßßßß ÜÜÜÛÜÜÜÜÜÜÜÜÜÜÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

BIN
src/testansi/AN_APPLE.GIF

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

18
src/testansi/Mario_wide.ans

@ -0,0 +1,18 @@
 MARIOúú000 TOPú1200 LUIGIúú000 ]8;;http://www.phm.lu/PHM.lu]8;;
  _ _ 
 ÜßßÞ ÝßßÜ
 ÿÿÿÿÿÿÿÜÜÜÿÿÿÿÿÿ () () ÿÿÿÿÿÿÜÜÜÿÿÿÿÿÿÿ
 ÿÿÿÿÜÛÛÛÛÛÜÜÿÿÿÿ Üß êý §ê ßÜ ÿÿÿÿÜÜÛÛÛÛÛÜÿÿÿÿ
 ÿÿÿÜßßÛßÛßÜÜÜÿÿÿ ßßßßßßßßßßßßßß ßßßßßßßßßßßßßß ÿÿÿÜÜÜÜÿÜÿÜÜÜÿÿÿ
 ÿÿÜÛÜÿÿßÿÜÛÜÜßÿÿ  CAN YOU KICK OFF  ÿÿßßßÿßÛÜÛÛßÿÜÿÿ
 ÿÿÿßßÛÛÛÛÛÛßÿÿÿÿ  ALL THE PESTS ?  ÿÿÿÿßÛÛÛÛÛÛßßÿÿÿ
 ÿÿÜÜÛÛÛÜÿÿßÜÿÿÿÿ ÜÜÜÜ ßßßßßßßßßßßßßßßßßß ÜÜÜÜ ÿÿÿÿÜßÿÿÜÛÿÿÜÜÿÿ
 ÜÛÛÛÛÛÛÛÜÿÿÛÜÿÜÿ  PHASE 1  ÿÜÛßÿÛÛßÿÛÛÛÛÛÛÜ
 ÛÛÜÿÛÜÛÛÜÛÛÜÛÜÛÛ   ÛÛÜÛÜÛÛÜÛÛÜÛÿÜÛÛ
 ÿßÿÜÛÛÛÛÛÛÛÛÛÜßÿ ßßßßßßßßßßß [] ßßßßßßßßßßß ÿßÜÛÛÛÛÛÛÛÛÛÜÿßÿ
 ÿÿÛÛÛÛßßßßÛÛÛÛÿÿ  _ _  ÿÿÛÛÛÛßßßßÛÛÛÛÿÿ
 ÿÜÛÛÛÿÿÿÿÿÿÛÛÛÜÿ ßÞ Ýß ÿÜÛÛÛÿÿÿÿÿÿÛÛÛÜÿ
ÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁÂÁ 
Mario Bros. (arcade, wide composition)
by Philippe Majerus (www.phm.lu)

9
src/testansi/MiniColorsWheel.ans

@ -0,0 +1,9 @@
 . -- .
/ \ / \
. _ _\/_ _ .
' /\ '
\ / \ /
' -- '
Mini RGB Colors Wheel
by Philippe Majerus (www.phm.lu)

22
src/testansi/MorseCode.ans

@ -0,0 +1,22 @@

International Morse Code
________ dot ú | - dash _______
/ \
_______ E _______ ______ T ______
/ \ / (or 0) \
__ I __ __ A __ _ N _ __ M __
/ \ / \ / \ / \
S U _ R _ W D K G O
/ \ / \ / \ / \ / \ / \ / \ / \
H V F š L Ž P J B X C Y Z Q ™ CH
/ \ \ / / \ \ / \ \ / \ / \ / / \ / / \
5 4 3 <EFBFBD> o 2 o + o 1 6 = / o ( 7 o 8 9 0
/ \ / \ / / \ / \ \ \ /
? _ " . @ ' - ; ! ) , :
]8;;http://www.phm.lu/PHM.lu]8;;
International Morse Code binary tree
by Philippe Majerus (www.phm.lu)
Nodes in dark gray (š Ž ™ CH _ ; !) are not part of ITU M.1677 standard.

24
src/testansi/SonicGreenHillZone.ans

@ -0,0 +1,24 @@
 
 °°±±±±°° °°±±±±°° () () () ]8;;http://www.phm.lu/PHM.lu]8;; 
 °°±±°°°±±±±°° °°±±°°°±±±±°° 
 °°±±±° 
 °°±±±° 
 
 °±±°° °°±±° ßßßßßßßßßßßßßßßßßßßßßßßßßßßß 
 ßÜßÜßÜßÜßÜßÜßßßßßÜßÜßÜßÜßÜßÜ 
 Þ ÝÝ ßÜßÜßÜßÜßß ßßÜßÜßÜßÜ 
ÞÝÜÞÞÞÝÜÞ.ÞÝÜÞ ÝÝÜÞ'Þ ÜÞ.ÞÝÜÞÞÞÝÜÞÝÞÝÜÞ.ÞÝÜÞÞÞÝßÜßÜßÜßÞÝÜÞÞÞÝÜÞÝÞÝÜÞ.ßÜßÜßÜÞÝÜÞÝ
Ü_ß Ü _ß Ü 'ß_ Ü  "_ ßÜ _' '" ß ß ß ßÜßß ß "_Ü ß ßßÜßÜ ß 
(_)(#)Ü(ê)(#)Ü(_)(#)Ü(ê)(#)Ü(_)Üß±±±±±±±±±±±±±±±±ßÜß±±ßÜÛÞÜÞÞÝÛß(ê)(#)ÜßÜßÜÞÝÜÞÝ
ÛÞÛÞÞÛÝÛÞÛÞÞÛÝÛÞÛÞÞÝÛÞ*ÞÞÜÝùÞÛÞÛ±±±±±±±±±±±±±±±±±ßÜß±±±ÛÝÛÞ ÜÞÞÝÛÞ*ÞÜÞÞßÜßÜÛÞÛÞÞ
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ßÜß°°°°°°°°°°°°°°°°°°°ßÜßÜ°°°°°
ÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÜÜ-_-_-_-_-_-_-_-_-_-_-_-_-_-_ßÜßÜ-_-_-_-_-_-_-_-_-ÜßÜßß_-_-_
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÞÞÜÜ - _ - _ - _ - _ - _ ßßÜßÜ- _ - _ - _ -ÜßÜßß_ - _ -
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÜÜ - ÄÄ - ÄÄ - ÜßÜßÜÜÜ ÄÄ -ÜÜÜßÜßß- ÄÄ - ÄÄ
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²ßÜÞÞÞÞÞÞÞ
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
Sonic the hedgehog - Green Hill Zone (16 colors version)
by Philippe Majerus (www.phm.lu)

24
src/testansi/SonicGreenHillZone256.ans

@ -0,0 +1,24 @@
 
 °°±±±±°° °°±±±±°° () () () ]8;;http://www.phm.lu/PHM.lu]8;; 
 °°±±°°°±±±±°° °°±±°°°±±±±°° 
 °°±±±° 
 °°±±±° 
 
 °±±°° °°±±° ßßßßßßßßßßßßßßßßßßßßßßßßßßßß 
 ßÜßÜßÜßÜßÜßÜßßßßßÜßÜßÜßÜßÜßÜ 
 Þ ÝÝ ßÜßÜßÜßÜßß ßßÜßÜßÜßÜ 
ÞÝÜÞÞÞÝÜÞ.ÞÝÜÞ ÝÝÜÞ'Þ ÜÞ.ÞÝÜÞÞÞÝÜÞÝÞÝÜÞ.ÞÝÜÞÞÞÝßÜßÜßÜßÞÝÜÞÞÞÝÜÞÝÞÝÜÞ.ßÜßÜßÜÞÝÜÞÝ
Ü_ß Ü _ß Ü 'ß_ Ü  "_ ßÜ _'Ü '" ß ß ß ßÜßß ß "_Ü ß ßßÜßÜ ß 
(_)(#)Ü(ê)(#)Ü(_)(#)Ü(ê)(#)Ü(_)Üß±±±±±±±±±±±±±±±±ßÜß±±ßÜÛÞÜÞÞÝÛß(ê)(#)ÜßÜßÜÞÝÜÞÝ
ÛÞÛÞÞÛÝÛÞÛÞÞÛÝÛÞÛÞÞÝÛÞ*ÞÞÜÝùÞÛÞÛ±±±±±±±±±±±±±±±±±ßÜß±±±ÛÝÛÞ ÜÞÞÝÛÞ*ÞÜÞÞßÜßÜÛÞÛÞÞ
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ßÜß°°°°°°°°°°°°°°°°°°°ßÜßÜ°°°°°
ÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÜÜ-_-_-_-_-_-_-_-_-_-_-_-_-_-_ßÜßÜ-_-_-_-_-_-_-_-_-ÜßÜßß_-_-_
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÞÞÜÜÜ- _ - _ - _ - _ - _ ßßÜßÜ- _ - _ - _ -ÜßÜßß_ - _ -
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÜÜÜ- ÄÄ - ÄÄ - ÜßÜßÜÜÜ ÄÄ -ÜÜÜßÜßß- ÄÄ - ÄÄ
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÞÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß±ßÜÞÞÞÞÞÞÞ
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
ÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜßÜß²±ÜßÜßÜßÜß
Sonic the hedgehog - Green Hill Zone (256 colors version)
by Philippe Majerus (www.phm.lu)

12
src/testansi/Win10PowerToys.ans

@ -0,0 +1,12 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>槹烝烝烝烝烝烝炮<EFBFBD><EFBFBD>樛樛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>栩栩栩栩栩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>桀樛<EFBFBD><EFBFBD>槹炮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>槹炳<EFBFBD>棍燼<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>栩栩栩栩栩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>栩栩栩栩栩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>烝烝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樛樛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>槹炮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>槹烝<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>炮樂<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>炮樛樛樛樛樛樛槹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樛槹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

7
src/testansi/WindowsTerminal.ans

@ -0,0 +1,7 @@
ÜÜÜÜÜÜ      
 \  \\ / ú    ³     ³       ú     ³
 / ÄÄ  VV ³ ³ ) ( ³ ( ) \\/ 'Ä, ³ (Ä` ³ ³ ³ ) ³ ³ ) .ij ³

Microsoft Windows Terminal 1.0 logo
ANSI-art version by Philippe Majerus, May 2020.

4
src/testansi/Windows_Terminal_octants.txt

@ -0,0 +1,4 @@
 ▄▄▄▄▄▄▄▄▄                                              
 █𜷠𜵀𜶫█████  ▝▖  ▞𜵲𜺠𜺠𜺣 ▂𜷕 ▂𜺣𜺠 𜺣𜺠   𜺫𜶘🮂𜺠▂ ▂𜺠▂𜺠𜺣𜵲𜺠𜺠𜺣 ▂𜺣▐ 
 █𜷊𜷌𜷥𜷊𜶺𜶺██   𜴠𜵙𜴠𜵙𜺨▐▐𜺨▐▐ ▐▐ ▐𜴡𜵙𜴠𜵛𜵲𜴜𜴶   𜵏𜴆𜴺▌▐ ▌▐▐▐𜺨▐▗𜴆𜶛▐ 
 ▀▀▀▀▀▀▀▀▀    𜺨 𜺨 𜺫𜺫 𜺫 🮂🮂 🮂𜺨 𜺨 𜺨 🮂   𜺫 𜺫🮂 𜺨𜺫 𜺨𜺫𜺫𜺫 𜺫 🮂🮂𜺫 

28
src/testansi/error_overtype.txt

@ -1,28 +0,0 @@
----DEBUG-----
looplimit 9932 reached
test_mode:1
data_mode:0
prev_row :62
prev_col :1421359
result ␛[m[38;5;69;48;5;16m⢸⢿⣧␛[38;5;146;48;5;16m⡤⠤â ⦇P2⦈␛[38;5;69;48;5;16m⣙␛[0m
visualwidth 77
instruction 
stringlen 85
overflow_right_column 79
overflow_right ⣭⣾⣿⣿⣿⣿⣿⣿␛[39;48;5;16mâ ⦇PD⦈â ⦇PD⦈␛[38;5;69;48;5;16mâ¢⦇PD⦈⣴⣿⣿⣿⣿⣦⣯␛[38;5;146;48;5;16mâ ¹â ⦇SC⦈␛[38;5;69;48;5;16m⣿â
unapplied 
unapplied_list 
insert_mode 0
autowrap_mode 1
insert_lines_above 0
insert_lines_below 0
cursor_saved_position 
cursor_saved_attributes 
cursor_column 1421503
cursor_row 62
opt_overflow 0
replay_codes ␛[m
replay_codes_underlay ␛[m
replay_codes_overlay 
--------------
Loading…
Cancel
Save