I'm tempted to buy one of these damn cables just to get to know just what the hell it does. Only problem is that it's more expensive than what I paid for all of the devices together (thx 7bit

It is a mess-up of the Symbolics-, Sun-, and IBM-cultures.Minskleip wrote:So cool! A lisp keyboard! The parens are misplaced though
Code: Select all
8x4
? | |? |
? | |? |
F1 |F2 |Stop |Eject
F3 |F4 |Cut |Paste
F5 |F6 |Mark |Undo
F7 |F8 |Select|Redo
F9 |F10|Begin |End
F11 |F12|Prior |Next
122
F13 | |F14 | |F15 | |F16 | |F17 | |F18 | |F19 | |F20 |
ESC | |? | |? | |? | |F21 | |F22 | |F23 | |F24 |
? |! |@ |pound|euro|yen |`` |` |_ |' |'' |< |> |vert|{ |}
: |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |\ |( |)
TAB |Q |W |E |R |T |Y |U |I |O |P |[ |] |BS |BEGIN
Comp|Symb |A |S |D |F |G |H |J |K |L |; |' |CR |LF |END
SHL |ShWrd|Z |X |C |V |B |N |M |, |. |/ |SHR |UP |Page
ALTL|HYPL |SUPL|CTRL |SPACE |CTRR|SUPR|HYPR|META|LEFT|DOWN|RIGHT
8x4
? | |? |
NUM | |CAPS|
^ |% |# |$
~ |n/ |n* |n-
n7 |n8 |n9 |n+
n4 |n5 |n6 |&
n1 |n2 |n3 |n=
n0 |DEL |n. |?
No, it is the source to generate the mtx files for ChangeMe.exe :Minskleip wrote:Is that the source for your keyboard picture?
Code: Select all
#!/usr/bin/perl -w
# (C) 2011 by 7bit (deskthority.net)
# Licence: GPL 2 or 3 at your choice (http://www.gnu.org/licenses/gpl.html)
my @codetable;
sub readcodetable
{
my $mycodefile=shift;
@codetable=();
open($read, "<", $mycodefile) or die "error reading from $mycodefile . $!";
while(<$read>)
{
my $line = $_;
$line =~ s/\n$//;
if($line =~ /^([^[:space:]]+)([[:space:]]+)([^[:space:]]+)([[:space:]]*)([[:ascii:]]*)$/)
{
$line =~ s/^([^[:space:]]+)([[:space:]]+)([^[:space:]]+)([[:space:]]*)([[:ascii:]]*)$/$1\|$3/;
push(@codetable,$line);
}
}
}
sub lookupscancode
{
my $key = shift;
foreach $line (@codetable)
{
@codes = split(/\|/,$line);
if($codes[0] eq $key)
{
if($codes[1] =~ /^E0/)
{
$codes[1] =~ s/^([[:alnum:]]{2})([[:alnum:]]{2})$/\$$1,\$$2,\$$1,\$F0,\$$2/;
}
else
{
$codes[1] =~ s/^([[:alnum:]]{2})$/\$$1,\$F0,\$$1/;
}
return "$codes[1]";
}
}
}
sub outline
{
my $countv = shift;
my $counth = shift;
my $key = shift;
my $output="error";
if($countv==1) { $output = "A"; }
if($countv==2) { $output = "B"; }
if($countv==3) { $output = "C"; }
if($countv==4) { $output = "D"; }
if($countv==5) { $output = "E"; }
if($countv==6) { $output = "F"; }
if($countv==7) { $output = "G"; }
if($countv==8) { $output = "H"; }
my $scancode="";
if(!($key eq ""))
{
$scancode = lookupscancode($key);
}
return "$output$counth/S/CT/A++++/C----/Dcccc/~$scancode~~~~~~~~";
}
sub main
{
my $myinput="";
my $myoutput="";
my $mycodetable="";
my $flag=0;
foreach $arg (@ARGV)
{
if($flag)
{
$mycodetable = $arg;
}
else
{
$myinput=$arg;
$myoutput=$arg;
$myoutput =~ s/[.]([^.]+)$//;
}
$flag++;
}
if($flag!=2)
{
print "./tipro.pl layout codetable\n\n";
print "tipro.pl takes 2 arguments. The first argument is the layout file and\n";
print "the 2nd argument is the code table\n";
print "Output is written to layout_n_type.mtx, where n is the number of thr module in\n";
print "layout starting from 1, and type is either 8x4, 8x8, 8x16, 122, or 122up.\n\n";
}
readcodetable($mycodetable);
open($read, "<", $myinput) or die "error reading from $myinput . $!";
my $countv=0;
my $maxv=0;
my $maxh=0;
my $qwerty=0;
my $modulecount=0;
my $write;
while(<$read>)
{
my $line = $_;
$line =~ s/\n$//;
$line =~ s/[[:space:]]//g;
if($line eq "") { next; }
if(!($line =~ /[|]/))
{
my @keys = split(/x/,$line);
if(@keys==2)
{
$maxv=$keys[0];
$maxh=$keys[1];
$qwerty=0;
}
elsif($keys[0] eq "122")
{
$maxv=8;
$maxh=16;
$qwerty=1;
}
elsif($keys[0] eq "122up")
{
$maxv=8;
$maxh=16;
$qwerty=2;
}
if($modulecount>0)
{
close($write);
}
$modulecount++;
my $myoutfile = $myoutput;
if(!$qwerty)
{
$myoutfile = $myoutput . "_" . $modulecount . "_" . $maxv . "x" . $maxh . ".mtx";
}
else
{
$myoutfile = $myoutput . "_" . $modulecount . "_" . $keys[0] . ".mtx";
}
open($write, ">", $myoutfile) or die "error writing to $myoutfile . $!";
print "writing output to $myoutfile\n";
$countv=0;
next;
}
my $counth=0;
$countv++;
if($countv>$maxv) { last;}
my @keys = split(/\|/,$line);
foreach $key (@keys)
{
$counth++;
if($counth>$maxh) { last; }
my $resline = outline($countv,$counth,$key);
print $write "$resline\n";
}
while($counth<$maxh)
{
$counth++;
my $resline = outline($countv,$counth,"");
print $write "$resline\n";
}
}
}
main();
# eof
Code: Select all
ESC 76
: 17
1 16
2 1E
3 26
4 25
5 2E
6 36
7 3D
8 3E
9 46
0 45
- 4E
= 55
BS 66
TAB 0D
Q 15
W 1D
E 24
R 2D
T 2C
Y 35
U 3C
I 43
O 44
P 4D
...
SUPR E027
HYPL 61
HYPR 13
META E02F
Stop E03B
Eject E01A
Cut 19
Paste 5F
Mark 39
Undo E03D
Select 53
Redo 50
Begin E06C
End E069
Prior E07D
Next E07A
...
Currently, it is only suitable for 1 layer.Minskleip wrote:PerlCan you make layers, or do you have to tweak the output afterwards?
Code: Select all
5x4:1
N|/|*|-
7|8|9|+
4|5|6|&
1|2|3|=
0| |.|e
5x4:2
N|/|*|-
B|U|P|+
L|F|R|&
E|D|N|=
i| |d|e
...
No.Minskleip wrote:That's still not for the 32 key modules right?
Whenever you program a keyboard, you overwrite everything that was previously programmed in it, no matter if it's used as a standalone keyboard or as part of a multiple board consisting of more than one module. The keyboard does not contain several layouts, one for standalone use and one for another configuration, but always only one at a time.Minskleip wrote:(...)
One more thing: if I first connect one module to the computer and program it, then chain together the programmed module with a few others using the bus connector and program all of them, will the first I programmed still have the first programming in its controller so that I can use it standalone (or with a regular keyboard) later without reprogramming it? (in my case the difference in the two programmings would be esc is grave and vice versa)
... except I've got to get my keyboard to the office to do that ...kbdfr wrote:...
So you have to reprogram a keyboard every time you want to change its layout. But of course that should not be a problem as you can save as many configuration files as you like and just have to upload the one to be used next.
I should have tested this today: Is it possible to program it without anything connected except the controller? Would avoid to bring the whole keyboard again.kbdfr wrote: By the way, when you program units connected via bus connector, the software recognises their physical configuration and if you try to upload a layout which is different from what you actually have on your desk, you get a warning and the software asks you if you want to upload anyway. Answering "yes" leads to quite interesting results
If by "program" you mean "upload", it would be logical to assume that it is not the case and that the program is stored in the keyboard itself and not in the controller, because you can program several keyboards (when connected via bus connector) with only one controller.7bit wrote:(...)
I should have tested this today: Is it possible to program it without anything connected except the controller? Would avoid to bring the whole keyboard again.
Programming the keyboard means for me to upload the file.kbdfr wrote:If by "program" you mean "upload", it would be logical to assume that it is not the case and that the program is stored in the keyboard itself and not in the controller, because you can program several keyboards (when connected via bus connector) with only one controller.7bit wrote:(...)
I should have tested this today: Is it possible to program it without anything connected except the controller? Would avoid to bring the whole keyboard again.
If by "program" you mean "configuring a ChangeMe file" using a normal keyboard plugged into the PS/2 socket of the Tipro controller, I see no reason why this should not work. But of course that would be silly, because you don't even need a Tipro keyboard to use the Tipro ChangeMe software.
I'm not sure, but... can't you just "virtually" configure a keyboard, save the file on a USB stick which you take to whatever place your keyboard is and then upload it to the keyboard?
I thought I had posted this in this thread before...Minskleip wrote:kbdfr: do you have an older version of Changeme?
Hi Minskleip,Minskleip wrote:I got the keyboards from 7bit! However Changeme doesn't recognise the keyboard properly. It's a TMC-KMCV-C15-112 USB with 122 keys, but is recognised as a TM-KMQ-128A (120 keys). Two keys are missing, and I can't get to them! The two switches under the 'caps lock' to the left of 'A', and the two switches under 'enter' are each recognised as one custom key.
Is this a fault with the usb controller?
Yes:Minskleip wrote:Coolio, thank you! With my symmetric stagger layout it doesn't really matter. I put some less used macros there.
At least it's symmetric - the second most switch to the side is dead.
And man it's awkward to type on a regular board now after symmetry all day! Looks like I have to clean one more for use at home
Edit: do you know of a way to use menu as hyper and scrolllock as compose on linux, without using xmodmap?
Code: Select all
key <NMLK> { [ Num_Lock, Pointer_EnableKeys ] };
key <FK16> { [ Caps_Lock ] };
key <LFSH> { [ Shift_L ] };
key <RTSH> { [ Shift_R ] }; // must be Shift_R
// Shift_R can't be re-mapped to C-s in emacs. (2010-08-14)
key <LSGT> { [ XF86WWW ] }; // SHIFT WORD
key <LALT> { [ Control_L ] };
key <RALT> { [ Control_R ] };
key <PAUS> { [ Multi_key ] };
// key <FK11> { [ Meta_L ] }; // mapped to H-M in emacs
key <LWIN> { [ Super_L ] };
key <RWIN> { [ Super_R ] }; // mapped to H-s in emacs
key <CAPS> { [ Hyper_L ] }; // Symbol key
key <HKTG> { [ Hyper_L ] };
key <HENK> { [ Hyper_R ] }; // mapped to A-s in emacs
key <LCTL> { [ Alt_L ] };
// key <RCTL> { [ Alt_R ] }; // mapped to A-H in emacs
key <RCTL> { [ Meta_R ] };
// begin modifier mappings
modifier_map Shift { Shift_L, Shift_R };
modifier_map Lock { Caps_Lock, ISO_Lock };
modifier_map Control{ Control_L, Control_R };
// Fake keys for virtual<->real modifiers mapping
key <LVL3> { [ ISO_Level3_Shift ] };
key <MDSW> { [ Mode_switch ] };
// modifier_map Mod5 { <LVL3>, <MDSW> };
modifier_map Mod2 { Num_Lock };
// no Scroll_Lock, Mod3 is needed for Hyper (7bit)
key <ALT> { [ NoSymbol, Alt_L ] };
modifier_map Mod1 { <ALT> };
key <HYPR> { [ NoSymbol, Hyper_L ] };
modifier_map Mod3 { <HYPR> };
key <SUPR> { [ NoSymbol, Super_L ] };
modifier_map Mod4 { <SUPR> };
key <META> { [ NoSymbol, Meta_L ] };
modifier_map Mod5 { <META> };
kbdfr wrote:(stolen picture)
Make your own Tipro cable using a male/male PS/2 cable: carefully and completely remove the small plastic tongue between the pins on one end of the cable. The plug will now fit into the 8-pin socket of the keyboard (right side of the above picture, left side of course when sitting in front of the keyboard), connect the other end of the cable with the PS/2 socket of your computer, that's it.
The other socket of the Tipro keyboard is where you plug your "normal" keyboard into.
Have you found any remedies for this?kbdfr wrote:I think there is a workaround, but the software says it won't work with a controller version prior to 4.00.00 (check version with Keyboard -> Info).CeeSA wrote: [UMLAUTE]
if i put 'ö' in the second Layer i don't be able to get an upper case 'Ö'
shift + L2 + o - did not produce 'Ö' only 'ö'
any suggestions
Use S2 (shift to layer 2 = temporary switching to layer 2) instead of L2 (lock to layer 2 = permanent switching to layer 2).Icarium wrote:Have you found any remedies for this?kbdfr wrote:I think there is a workaround, but the software says it won't work with a controller version prior to 4.00.00 (check version with Keyboard -> Info).CeeSA wrote: [UMLAUTE]
if i put 'ö' in the second Layer i don't be able to get an upper case 'Ö'
shift + L2 + o - did not produce 'Ö' only 'ö'
any suggestions