Skip to content

Instantly share code, notes, and snippets.

View yyamasak's full-sized avatar

Yusuke Yamasaki yyamasak

View GitHub Profile
@yyamasak
yyamasak / NLog.Windows.Forms.Workaround.cs
Created April 14, 2016 07:52
Attempt to help NLog to find an obfuscated RichTextBox control name (but failed.)
nlogviewer = new NLogViewer(this);
nlogviewer.Show();
log = LogManager.GetLogger("Main");
#region Workaround for ConfuserEx
var richLogTarget = LogManager.Configuration.FindTargetByName<NLog.Windows.Forms.RichTextBoxTarget>("rich");
richLogTarget.FormName = nlogviewer.Name;
richLogTarget.ControlName = nlogviewer.rtbNLog.Name;
#endregion
@yyamasak
yyamasak / set_local_time.tcl
Created March 22, 2016 17:40
An example to call SetLocalTime Windows API from Tcl via Ffidl
package require Ffidl
ffidl::typedef SYSTEMTIME uint16 uint16 uint16 uint16 uint16 uint16 uint16 uint16
ffidl::callout SetLocalTime {pointer-var} int [::ffidl::symbol kernel32.dll SetLocalTime]
proc set_local_time {unixtime} {
set tcl_clock_fmts {%Y %m 0 %d %H %M %S 0}
set values [list]
foreach fmt $tcl_clock_fmts {
set v [clock format $unixtime -format $fmt]
lappend values [scan $v %d]
}
@yyamasak
yyamasak / coroutine_xotcl_ng.160307.tcl
Last active July 11, 2016 04:09
Tcl 8.6's coroutine doesn't work with XOTcl
package require XOTcl
namespace import xotcl::*
proc log {msg} {
set ts [clock format [clock seconds] -format %T]
puts "\[$ts\] $msg"
}
Class Test
@yyamasak
yyamasak / coroutine_example.160307.tcl
Last active July 11, 2016 04:16
An example to replace vwait with coroutine
proc log {msg} {
set ts [clock format [clock seconds] -format %T]
puts "\[$ts\] $msg"
}
proc backtrace {} {
set frames [list]
for {set i 1} {$i < [info level]} {incr i} {
set frameinfo [info frame $i]
if {[dict exists $frameinfo cmd]} {
@yyamasak
yyamasak / sqlite3_column_utils.tcl
Last active January 13, 2016 13:31
Do several things SQLite3 cannot do for table columns
package require sqlite3
proc cleanup {db} {
$db eval {VACUUM}
$db eval {REINDEX}
}
proc format_sql {sql} {
set sql [regsub -all -line -- {--.+$} $sql ""]
set sql [string map [list "\n" ""] $sql]
@yyamasak
yyamasak / sqlite3_insert_columns.tcl
Created January 13, 2016 12:47
Insert multiple new columns after the specified column in SQLite3
package require sqlite3
proc format_sql {sql} {
set sql [regsub -all -line -- {--.+$} $sql ""]
set sql [string map [list "\n" ""] $sql]
set sql [string map [list "," ",\n"] $sql]
set sql [string map [list "(" "(\n"] $sql]
set sql [string map [list ")" "\n)"] $sql]
return $sql
}
@yyamasak
yyamasak / sqlite3_insert_column.tcl
Created January 13, 2016 12:10
Insert a new column after the specified column in SQLite3
package require sqlite3
proc format_sql {sql} {
set sql [regsub -all -line -- {--.+$} $sql ""]
set sql [string map [list "\n" ""] $sql]
set sql [string map [list "," ",\n"] $sql]
set sql [string map [list "(" "(\n"] $sql]
set sql [string map [list ")" "\n)"] $sql]
return $sql
}
@yyamasak
yyamasak / sqlite3_rename_column.tcl
Last active January 13, 2016 12:18
Do the same operation as ALTER TABLE table RENAME COLUMN column TO column
package require sqlite3
proc format_sql {sql} {
set sql [regsub -all -line -- {--.+$} $sql ""]
set sql [string map [list "\n" ""] $sql]
set sql [string map [list "," ",\n"] $sql]
set sql [string map [list "(" "(\n"] $sql]
set sql [string map [list ")" "\n)"] $sql]
return $sql
}
@yyamasak
yyamasak / sqlite3_drop_columns.tcl
Last active January 13, 2016 13:32
Do the same operation as ALTER TABLE table DROP columns in SQLite3
package require sqlite3
proc format_sql {sql} {
set sql [regsub -all -line -- {--.+$} $sql ""]
set sql [string map [list "\n" ""] $sql]
set sql [string map [list "," ",\n"] $sql]
set sql [string map [list "(" "(\n"] $sql]
set sql [string map [list ")" "\n)"] $sql]
return $sql
}
@yyamasak
yyamasak / backtrace.tcl
Last active December 15, 2015 09:06
Returns the backtrace of the call stack as a list
proc backtrace {} {
set frames [list]
for {set i 1} {$i < [info level]} {incr i} {
lappend frames [dict get [info frame $i] cmd]
}
return $frames
}