#emc-devel | Logs for 2005-12-12

Back
[02:59:18] <SWPadnos_> christ - what's that weirdness?
[03:03:40] <jmk_hiding> what weirdness?
[03:03:48] <jmk_hiding> you mean the ppmc stuff?
[03:05:57] <SWPadnos_> yeah - I just read the change - odd bootstrap
[03:06:15] <jmk_hiding> the drivers he uses need an edge to turn them on
[03:06:27] <SWPadnos_> ok - still stilly, IMO
[03:06:32] <SWPadnos_> silly
[03:06:33] <jmk_hiding> normally, he leaves the bottom FET on one side of the bridge on and PWMs the other side
[03:06:52] <jmk_hiding> but if you start in forward, the low driver on the other side never turns on
[03:07:11] <jmk_hiding> agreed, lame, but at least it wasn't too ugly
[03:07:15] <SWPadnos_> well - at least its 'fixable' in software
[03:07:17] <SWPadnos_> yeah
[03:24:21] <jmk_hiding> jmk_hiding is now known as jmkasunich
[03:41:33] <SWPadnos_> so - I'm trying to get halcmd to only try "setp" when there's a third parameter
[03:41:38] <SWPadnos_> but it doesn't work
[03:42:54] <jmkasunich> why not?
[03:43:08] <SWPadnos_> neither checking for tokens[2][0] == '\0' nor strlen(tokens[2]) nor strcmp (tokens[2],"") correctly determined that the third string was null
[03:43:11] <SWPadnos_> dunno
[03:43:28] <SWPadnos_> but the setp would work, and set the param to 0
[03:44:29] <SWPadnos_> here's the if:
[03:44:40] <jmkasunich> change the #if 0 a the beginnning of parse_cmd, and see what the tokens look like
[03:44:51] <SWPadnos_> if ((strcmp(tokens[1], "=") == 0) && (tokens[2][0] != '\0')) { run the setp }
[03:44:55] <SWPadnos_> ah yes
[03:45:12] <SWPadnos_> though I am using interactive mode to test right now, and that could make a difference
[03:46:10] <SWPadnos_> well - at least it's the same on the command line
[03:49:13] <SWPadnos_> it looks empty (there's nothing between the curly braces)
[03:49:19] <SWPadnos_> token 2, that is
[03:49:41] <jmkasunich> nothing, not <nil>?
[03:49:54] <jmkasunich> that means a zero length string, '\0' in the first char
[03:50:01] <SWPadnos_> right - it's the "" string.
[03:50:41] <SWPadnos_> ok - that's something I was going to point out - both "" and *cp='\0' are used to denote an empty string, not NULLs
[03:51:07] <jmkasunich> right
[03:51:20] <jmkasunich> that tokenizer is not one of my finer moments...
[03:51:33] <SWPadnos_> well - you won't get a <nil> heh - so I can fix what needs fixing, and you'll be happy about it ;)
[03:51:47] <SWPadnos_> oops - mixed comments there
[03:51:55] <jmkasunich> I've a much nicer one for halvcp
[03:52:25] <SWPadnos_> ok
[03:52:47] <SWPadnos_> presumably it takes some delimiters into account
[03:52:56] <jmkasunich> {}=
[03:53:06] <jmkasunich> also understands quoted strings
[03:53:24] <SWPadnos_> actually, the halcmd parser should be able to ignore " rather than handle them as it does now
[03:53:29] <jmkasunich> (actually the tokenizer has configurable delimiters
[03:53:33] <SWPadnos_> quites and double quotes
[03:53:47] <SWPadnos_> cool - that's better (strspn, I believe)
[03:54:01] <SWPadnos_> or strcspn
[03:54:22] <jmkasunich> I think the quoting comes from the need to handle things like ' loadrt cfg="0 0 1" '
[03:54:30] <SWPadnos_> ah - right
[03:55:16] <jmkasunich> the new tokenizer gets configured with a comment char, escape char, quote char, and delimiter(s) string when you open the file
[03:55:25] <SWPadnos_> cool
[03:55:50] <jmkasunich> for vcp, delims are "{}=", comment is '#', escape is '\' and quote is '"'
[03:55:59] <jmkasunich> comments are from comment char to end of line
[03:56:31] <SWPadnos_> cool. can you specify multiple quote delims?
[03:56:41] <SWPadnos_> (ie, so you can use one in a label, for instance)
[03:56:42] <jmkasunich> not at present
[03:56:44] <SWPadnos_> ok
[03:56:47] <jmkasunich> you can escape them
[03:56:51] <SWPadnos_> true
[03:57:04] <jmkasunich> "he said \"that sucks\""
[03:57:25] <cradek> whew
[03:57:31] <SWPadnos_> \Y\e\s\,\ \h\e\ \d\i\d\.
[03:57:35] <cradek> I think I fixed 1374766
[03:57:42] <jmkasunich> yes\ he\ did
[03:57:43] <SWPadnos_> \c\o\o\l
[03:58:05] <SWPadnos_> which one was that, cradek
[03:58:07] <SWPadnos_> ?
[03:58:14] <cradek> http://sourceforge.net/tracker/index.php?func=detail&aid=1374766&group_id=6744&atid=106744
[03:58:20] <cradek> the nasty offsets units problem
[03:58:32] <SWPadnos_> oh, cool
[03:58:38] <cradek> offsets would move around by a factor of 25.4 in several cases
[03:58:48] <SWPadnos_> howdjadoit?
[03:58:51] <jmkasunich> nice
[03:59:03] <cradek> the interp array and var file are always kept in USER units
[03:59:15] <SWPadnos_> ah - OK. you made the "right" change - that's great
[03:59:16] <cradek> so if you g20/g21 they don't change
[03:59:29] <cradek> yeah I think it's right, but it's very hairy
[03:59:47] <SWPadnos_> tough to know that you got all possible acceses, I guess
[03:59:52] <cradek> I'm surprised by how broken it was
[04:00:38] <cradek> and I was surprised to find that the interp output (canon) is in program units, not internal units (mm)
[04:01:14] <SWPadnos_> that is odd - I hope it does scaling properly
[04:01:27] <SWPadnos_> accel and the like
[04:01:40] <cradek> I didn't touch any of that
[04:01:56] <SWPadnos_> nevermind -that's the tp anyway, but I hope *that* does the proper scaling
[04:05:46] <petev> cradek : are u really that surprised? ;-)
[04:05:57] <cradek> about what?
[04:06:19] <petev> the state of the emc interp code
[04:06:24] <cradek> oh that
[04:06:27] <cradek> actually yes
[04:06:42] <cradek> I think this shows that nobody uses G20/G21 to use their non-native measurements
[04:06:58] <cradek> because it was completely broken.
[04:07:15] <jmkasunich> I think most people avoid their non-native units entirely
[04:07:28] <cradek> but that's silly
[04:07:35] <jmkasunich> I know
[04:07:38] <cradek> if you're making a part that measures in mm, it's totally natural to write g-code in mm
[04:08:02] <petev> I tried using mm on my stock BP control, and it didn't even work right
[04:08:10] <cradek> just like I have both kinds of dial calipers, because I make both kinds of parts
[04:08:19] <cradek> it's a total pain if you have to convert all the time
[04:08:25] <petev> get a digital caliper
[04:08:31] <cradek> petev: maybe you should use emc then (today's version!)
[04:08:41] <cradek> petev: I like the dials better...
[04:08:46] <petev> my Z axis drive died, and I'm retrofitting
[04:08:50] <petev> EMC is the plan
[04:09:09] <cradek> petev: actually I have a dial caliper with two needles and scales, mm and inch; I have no idea how it works!
[04:09:23] <cradek> petev: I've never seen another like it
[04:09:42] <petev> that is unique
[04:10:06] <cradek> I got it when the local machinist supply shop closed out (sniff)
[04:11:47] <cradek> so do I dare cvs up now? is alex done?
[04:11:58] <jmkasunich> done for the night anyway ;-)
[04:12:25] <cradek> me too just about. I'd been putting off fixing that bug and now I know I was right to
[04:12:55] <jmkasunich> right to put it off?
[04:13:01] <cradek> yeah
[04:13:23] <jmkasunich> but now you did it... when did it become "not right" to put it off?
[04:13:35] <cradek> when I figured nobody else would fix it
[04:13:43] <cradek> I tried to talk petev into doing it!
[04:13:49] <jmkasunich> nobody else (that I know) knows that code
[04:13:52] <jmkasunich> I sure don't
[04:14:01] <cradek> but he said (predictably) that it wasn't possible without replacing the whole interpreter
[04:14:09] <cradek> :-)
[04:14:10] <petev> haha
[04:14:19] <cradek> jmkasunich: ha, as if I knew it when I started
[04:14:43] <jmkasunich> hmm. we
[04:14:58] <jmkasunich> we've been working the compile farm hard lately... 44 compiles since 11/22
[04:15:06] <cradek> wow
[04:15:22] <cradek> I know I've been much more active than usual
[04:15:28] <jmkasunich> 18 since 12/8 ;-)
[04:15:29] <petev> I have 44 compiles today
[04:15:36] <jmkasunich> I noticed, and really appreciate it
[04:16:03] <jmkasunich> pete: I have a bunch too, but the farm only compiles when somebody commits, and no more than once per hour
[04:16:29] <petev> ahh
[04:17:13] <cradek> so I wonder when will we freeze and test before the release?
[04:17:23] <jmkasunich> the actual total would have been even higher, but it was down from 12/4 to 12/8 thanks to a dead power supply
[04:17:49] <jmkasunich> gotta get the config stuff neatened up and tested
[04:17:53] <cradek> yes
[04:18:06] <jmkasunich> including at least a primitive wizard as we were discussing earlier
[04:18:09] <cradek> and I never heard back from chinamill/ok* about the rotary offset problem
[04:18:24] <cradek> is there a volunteer to write that?
[04:18:33] <jmkasunich> mixed rotary/linear has always been messy
[04:18:46] <jmkasunich> I kinda volunteered myself
[04:18:58] <jmkasunich> my version would be strictly stdin/stdout tho
[04:19:04] <cradek> yeah, but I think it does work now (but maybe per-axis accel is broken)
[04:19:16] <cradek> jmkasunich: easy enough to do with bash
[04:19:25] <jmkasunich> that was the plan
[04:19:28] <cradek> jmkasunich: or python or anything, I guess
[04:19:44] <cradek> jmkasunich: does BDI have dialog?
[04:19:46] <jmkasunich> but in the back of my mind I see a GUI think
[04:19:51] <jmkasunich> BDI?
[04:20:02] <cradek> yeah, you know, BDI
[04:20:05] <SWPadnos_> yes - it's the default debian config method
[04:20:12] <cradek> hey then
[04:20:15] <cradek> you could use dialog
[04:20:34] <jmkasunich> man dialog comes up empty on this box (BDI-4.27)
[04:20:35] <SWPadnos_> not that it's guaranteed to be on any live distribution that includes emc2 ;)
[04:20:40] <cradek> it would be pretty (prettier) and more foolproof than validating user input
[04:21:10] <SWPadnos_> hm - mine as well
[04:21:15] <jmkasunich> the problem is finding the least common denominator
[04:21:33] <SWPadnos_> though the debian upgrades always said "blah blah not found, falling back to dialog front end"
[04:21:35] <jmkasunich> I want bash with widgets ;-)
[04:21:40] <cradek> dialog --yesno asdf 6 20
[04:21:42] <SWPadnos_> wish
[04:21:47] <jmkasunich> yes
[04:22:05] <SWPadnos_> not that anyone present would choose tcl
[04:22:09] <jmkasunich> dialogL command not found
[04:22:24] <cradek> jmkasunich: drat
[04:22:26] <jmkasunich> it has one advantage, its present on all emc capable boxes
[04:22:33] <SWPadnos_> true
[04:22:46] <SWPadnos_> well - give Ray a call ;)
[04:22:48] <cradek> that's about all it has going for it though
[04:22:54] <SWPadnos_> plus widgets
[04:23:04] <jmkasunich> for this wizard, that it he most important factor
[04:24:04] <cradek> what do you want it to do exactly?
[04:24:11] <SWPadnos_> I was jus about to ask that
[04:24:22] <jmkasunich> it will be called from the run script in several cases:
[04:24:36] <jmkasunich> where the user says "emc foo" and there is no configs/foo directory
[04:24:55] <jmkasunich> where the user says "emc" and there is nothing in configs to say what default config the user wants
[04:25:12] <jmkasunich> it should list the available configs, and let the user select one
[04:25:29] <jmkasunich> or let them create a new one, by copying an existing one
[04:25:38] <jmkasunich> (to a new directory)
[04:26:03] <SWPadnos_> can it just set an env var to the selected config name (or the new name and template name) and bail?
[04:26:14] <SWPadnos_> then have the emc script do the heavy lifting
[04:26:30] <SWPadnos_> (or just print the two names)
[04:26:38] <jmkasunich> when the user is looking at the choices, I want to be able to display "configs/<one-of-the-choices>/description
[04:26:48] <jmkasunich> so they know what that config is for
[04:27:09] <SWPadnos_> a file in the dir, or the dirname.ini/[emc]description?
[04:27:22] <cradek> too bad we don't have dialog - it would be great for choosing from a menu of configs
[04:27:24] <jmkasunich> description is a file, in that dire
[04:27:27] <SWPadnos_> ok
[04:28:01] <jmkasunich> re the division of labor between main script and wizard... the main script should do only things needed to run emc
[04:28:17] <jmkasunich> creating new configs, picking configs, leave that to the wiz
[04:28:28] <SWPadnos_> ok - so wizard copies files, makes dirs, and creates emc-default in the configs/ dir
[04:28:48] <SWPadnos_> (not necessarily in that order)
[04:28:51] <jmkasunich> yeah, then returns to the main script that called it and the script continues to start up emc
[04:29:17] <jmkasunich> next time you start emc, the emc-default makes the main script happy, and it just runs emc
[04:29:22] <SWPadnos_> ok - so if `cat configs/emc-default` doesn't work, it'll use the output from `emc-setup`
[04:29:44] <jmkasunich> yes, if emc-setup is the wiz we are talking about
[04:29:47] <SWPadnos_> yep;
[04:30:06] <SWPadnos_> was there a name chosen for it? (or the config file name)
[04:30:11] <jmkasunich> not yet
[04:30:14] <SWPadnos_> emc-config, I guess
[04:30:27] <SWPadnos_> for both ;)
[04:30:28] <cradek> I hate to sound like petev, but how about a symlink?
[04:30:31] <jmkasunich> emc-config-mgr maybe
[04:30:31] <cradek> default -> stepper
[04:30:40] <SWPadnos_> symlink shmimlink
[04:30:54] <jmkasunich> actually for the default a symlink makes sense
[04:30:56] <cradek> putting the name of a directory in a file is a poor substitute
[04:30:59] <SWPadnos_> ./choose-config
[04:31:09] <jmkasunich> swp: I like that one
[04:31:25] <cradek> huh, my mbuff module got stuck again
[04:31:26] <SWPadnos_> (sorry - thinking like a user now ;) )
[04:31:45] <jmkasunich> and it should work when invoked stand-alone like that, not just when called from the main run script
[04:31:51] <cradek> I think I had the debugger attached to task, so maybe it didn't exit right
[04:31:53] <SWPadnos_> and how about calling the file (or link) chosen-config
[04:32:10] <jmkasunich> default-config
[04:32:17] <SWPadnos_> it's not really default, is it
[04:32:22] <SWPadnos_> (if the user chose it)
[04:32:26] <cradek> Starting emc...
[04:32:26] <cradek> sudo: /etc/init.d/realtime: command not found
[04:32:34] <cradek> the new run script is broken for me
[04:32:43] <SWPadnos_> did it install the script as executable?
[04:32:50] <jmkasunich> you can always start emc by explicitly specifying a config dir, and it will ignore the default/symlink and use what you told it to use
[04:32:56] <SWPadnos_> (should have, but you never know)
[04:33:07] <cradek> that script doesn't exist
[04:33:15] <cradek> I'm not installing, I'm running in place
[04:33:34] <jmkasunich> if you are running in place, it should be executing emc2/scripts/realtime
[04:33:53] <jmkasunich> did you do a ./configure and make after cvs up?
[04:33:57] <cradek> yes
[04:34:58] <SWPadnos_> ok - so this halcmd thing is just plain weird
[04:35:04] <cradek> + SCRIPTDIR=/usr/local/src/2/scripts/emc
[04:35:08] <cradek> this is wrong...
[04:35:17] <cradek> it's /usr/local/src/emc2/scripts/emc
[04:35:23] <jmkasunich> heh, looks that way
[04:35:36] <cradek> SCRIPTDIR=`echo $SCRIPT | sed s/$SCRIPTNAME//`
[04:35:38] <cradek> arrgh
[04:35:39] <SWPadnos_> maybe he selected emc, then typed 2 ;)
[04:35:55] <cradek> any path with emc in it is fried by this
[04:36:18] <jmkasunich> there is some crufty bash-fu in there
[04:36:32] <jmkasunich> not all alex's fault either, I'm guilty of some of that
[04:36:46] <cradek> what's wrong with dirname?
[04:36:47] <jmkasunich> the line you just entered looks sadly familiar, might have been me
[04:36:51] <cradek> haha
[04:36:55] <cradek> fixing it...
[04:37:26] <jmkasunich> didn't know about dirname, or wasn't sure about its availability on all systems
[04:37:32] <jmkasunich> probably the former
[04:37:42] <cradek> Can't find motion controller /usr/local/src/emc2/rtlib/.o
[04:37:57] <cradek> next problem...
[04:38:09] <jmkasunich> how did you invoke it?
[04:38:19] <cradek> sudo scripts/emc max
[04:38:23] <cradek> where max is my config directory
[04:38:29] <jmkasunich> try configs/max
[04:38:46] <cradek> oops I bet I need max/max.ini
[04:38:47] <cradek> not max/emc.ini
[04:39:07] <jmkasunich> it looks for max/max.ini
[04:39:09] <cradek> cms_cfg.cc 624: cms_config: can't open 'emc.nml'. Error = 2 -- No such file or directory
[04:39:37] <jmkasunich> the ini file should tell it to get emc.nml from ../common
[04:39:50] <jmkasunich> ../common/emc.nml
[04:40:36] <jmkasunich> that kind of change will be needed to all the standard configs, dunno if alex did them or not
[04:40:49] <jmkasunich> and of course people with custom configs will have to fix them
[04:40:57] <jmkasunich> thats why we're doing this now
[04:41:13] <jmkasunich> ok, getting close to midnight, I gotta crash
[04:41:22] <cradek> no problem, progress is fine with me
[04:41:28] <cradek> emctask.cc 270: interp_error: Unable to open file
[04:41:38] <cradek> doesn't tell me WHAT file!
[04:41:50] <jmkasunich> heh
[04:41:55] <jmkasunich> thats the interp, I have no clue
[04:42:34] <cradek> var probably
[04:42:59] <jmkasunich> emc.var in the ini should also say ../common/emc.var
[04:43:11] <cradek> aha I think I got them all now
[04:43:20] <jmkasunich> as should any references to core-stepper.hal
[04:43:33] <cradek> it'll be great to not have cvs mess up my ini file now
[04:43:53] <cradek> I'm glad he went with real pathnames
[04:44:12] <jmkasunich> it will be nice to be able to tell a user to tar up their config dir and send it when they have problems
[04:44:30] <cradek> agreed
[04:44:40] <jmkasunich> hmmm, I wonder if the wizard could offer that as an option: "archive configuration"
[04:44:44] <cradek> it's alive!!
[04:45:07] <cradek> tar cf - $config |mail jmk
[04:45:17] <jmkasunich> skip the mail part tho
[04:45:53] <jmkasunich> you know, this wizard could get interesting, maybe it should be the method used to invoke any "config editor" tools we have
[04:46:14] <jmkasunich> treat a "config
[04:46:18] <jmkasunich> oops
[04:46:50] <jmkasunich> treat a "config" as a document... have config->new, config->open, config->save_as, etc
[04:47:16] <SWPadnos_> config->edit
[04:47:23] <jmkasunich> yes
[04:47:24] <SWPadnos_> that's the fun one ;)
[04:47:44] <jmkasunich> well the thing ray's working on is kind of a config editor isn;t it?
[04:47:56] <SWPadnos_> yep
[04:48:07] <jmkasunich> anyway, just a thought
[04:48:09] <jmkasunich> sleep time
[04:48:10] <SWPadnos_> meant for tuning, but may expand into the halgui
[04:48:17] <cradek> yayyyyy
[04:48:18] <jmkasunich> A halgui
[04:48:22] <SWPadnos_> do you have just a gouple of minutes?
[04:48:26] <cradek> I can set offsets with Chips loaded and they don't fly away
[04:48:26] <SWPadnos_> couple
[04:48:34] <jmkasunich> 12 mins till midnight..
[04:48:44] <SWPadnos_> ok - a quick one to ponder about halcmd
[04:49:01] <SWPadnos_> I enabled that debugging code, and added to it. here's what I get:
[04:49:09] <SWPadnos_> tokens[1] = 'param', tokens[2][0] = 0x70
[04:49:10] <SWPadnos_> HAL:0: 00:{show} (len: 4, [0x73])
[04:49:12] <SWPadnos_> HAL:0: 01:{param} (len: 5, [0x70])
[04:49:14] <SWPadnos_> HAL:0: 02:{pid.0.P} (len: 7, [0x70])
[04:49:15] <SWPadnos_> (the rest omitted)
[04:49:21] <cradek> AND I can run him at FO 200%
[04:49:27] <cradek> kick ASS
[04:49:45] <SWPadnos_> oops:
[04:49:46] <SWPadnos_> localhost:/Project/emc2/bin# ./halcmd pid.0.Pgain =
[04:49:48] <SWPadnos_> tokens[1] = '=', tokens[2][0] = 0x00
[04:49:49] <SWPadnos_> HAL:0: 00:{pid.0.Pgain} (len: 11, [0x70])
[04:49:51] <SWPadnos_> HAL:0: 01:{=} (len: 1, [0x3D])
[04:49:52] <SWPadnos_> HAL:0: 02:{} (len: 0, [0x00])
[04:50:20] <SWPadnos_> but at the end of parse_cmd, the tokens[1] ad tokens[2][0] line doesn't print (it's there twice)
[04:50:31] <SWPadnos_> in fact, here's the whole "else" now:
[04:51:06] <SWPadnos_> if ((strcmp(tokens[1], "=") == 0) && (tokens[2][0] != 0)) {
[04:51:07] <SWPadnos_> printf("tokens[1] = '%s', tokens[2][0] = 0x%02X\n", tokens[1], tokens[2][0]);
[04:51:09] <SWPadnos_> retval = do_setp_cmd(tokens[0], tokens[2]);
[04:51:10] <SWPadnos_> } else {
[04:51:12] <SWPadnos_> printf("NOT RUNNING SETP!!\n");
[04:51:13] <SWPadnos_> retval = -1;
[04:51:15] <SWPadnos_> }
[04:51:17] <SWPadnos_> if (retval != 0) {
[04:51:18] <SWPadnos_> rtapi_print_msg(RTAPI_MSG_ERR, "HAL:%d: Unknown command '%s'\n", linenumber, tokens[0]);
[04:51:20] <SWPadnos_> }
[04:51:26] <jmkasunich> this is the else that used to print " unknown command"?
[04:51:30] <SWPadnos_> neither of those prints ever shows up, but the param gets set
[04:51:41] <SWPadnos_> yes - I added the code there
[04:52:00] <SWPadnos_> it's still there, but only if retval != 0
[04:52:22] <SWPadnos_> but neither the NOT RUNNING nor the token print ever happens
[04:52:30] <SWPadnos_> but the setp does ??
[04:52:43] <jmkasunich> do bin/halcmd help setp
[04:52:53] <jmkasunich> read the second line
[04:53:07] <jmkasunich> you are implementing somethign that is already there
[04:53:27] <SWPadnos_> ok - that may be my problem ;)
[04:53:34] <jmkasunich> slap!
[04:53:45] <SWPadnos_> well - you could have said that earilie
[04:53:48] <SWPadnos_> slap!
[04:53:51] <jmkasunich> sorry, I should have rememberd that
[04:53:51] <SWPadnos_> earlier
[04:53:54] <SWPadnos_> heh
[04:54:03] <SWPadnos_> ok - I'll just cvs up -C now
[04:54:14] <SWPadnos_> fscker
[04:54:20] <jmkasunich> thats why your prints don't execute, the old code saw something it understood
[04:54:30] <SWPadnos_> right - now I get it
[04:54:40] <SWPadnos_> bastid
[04:55:08] <jmkasunich> your approach might be more robust
[04:55:11] <SWPadnos_> well - I will fix the typo though
[04:55:30] <jmkasunich> you wait until it doesn't match any command before checking for the "=" and assuming a setp
[04:55:35] <SWPadnos_> yes
[04:55:43] <SWPadnos_> rather than some other command that might use =
[04:55:51] <jmkasunich> the old code says if tokens[1] is '=', it must be a setp
[04:56:22] <SWPadnos_> true - I can remove that check, and rely on this one instead
[04:56:28] <jmkasunich> see the old code?
[04:56:33] <SWPadnos_> since that would allow other commands to use =
[04:56:38] <SWPadnos_> yep, just below the setp check
[04:56:54] <jmkasunich> ok, can I sleep now? ;-)
[04:56:57] <SWPadnos_> yep
[04:57:02] <SWPadnos_> night ;)
[04:57:17] <jmkasunich> I am sorry I didn't recall that earlier, would have saved you some time
[04:57:27] <SWPadnos_> no problem - I love brick walls ;)
[04:57:33] <SWPadnos_> and bleeding heads
[04:57:50] <jmkasunich> jmkasunich is now known as jmk_sleep
[09:21:44] <petev> dang, did u go to sleep and wake up already?
[09:29:20] <alex_joni> who? me?
[09:29:25] <petev> yeah
[09:29:27] <alex_joni> I'm about 2 hours at work
[09:29:36] <alex_joni> it's 11am here
[09:29:38] <petev> man, I've been sitting here too long
[09:29:44] <alex_joni> indeed ;)
[09:30:05] <petev> it's 1:35 AM here
[09:30:23] <alex_joni> seen that
[09:32:16] <petev> I tell u, fenn started looking at canonical stuff and it just keeps getting worse
[09:40:52] <alex_joni> lol
[09:41:02] <alex_joni> it's not that bad
[09:43:08] <alex_joni> at least that's my impression of it
[09:47:24] <petev> alex_joni: no, there is a bunch of axis/joint mixups
[09:47:38] <alex_joni> there are no joints in canon
[09:47:43] <petev> the whole init/home stuff seems a bit broke
[09:47:49] <alex_joni> init/home?
[09:47:52] <petev> yeah, well what is clamp axis
[09:48:03] <petev> it's really clamp joint, right?
[09:48:07] <alex_joni> no
[09:48:10] <petev> why?
[09:48:14] <alex_joni> canon knows only carthesian
[09:48:19] <petev> how do you clamp and axis?
[09:48:30] <alex_joni> and the speeds in the ini are axis-speeds not joint speeds
[09:48:33] <petev> that would be nice, but I don't think it works
[09:48:39] <alex_joni> it does work
[09:48:47] <petev> how?
[09:48:56] <alex_joni> the problem is it isn't nice to define axis-speeds in the ini
[09:49:05] <petev> all clamps I have seen are on the joints, which happen to be axis in a VMC
[09:49:08] <alex_joni> for a trivkin user it won't matter
[09:49:17] <alex_joni> where have you seen clamps?
[09:49:20] <petev> right, but what about a hexapod?
[09:49:38] <petev> my brideport has manual clamps and I have seen automatic ones
[09:49:40] <alex_joni> the stuff in canon is ONLY carthesian
[09:49:44] <petev> bridgeport
[09:49:58] <petev> so what does clamp do?
[09:50:03] <alex_joni> we must be talking about different clamps then.. what does that mean?
[09:50:03] <petev> and what about home
[09:50:17] <alex_joni> home works OK, for both (trivkin and nontrivkin)
[09:50:24] <petev> the clamp is a mechanical device that holds a joint for rigidity
[09:50:36] <petev> but you home a joint, not an axis, no?
[09:50:40] <alex_joni> I was talking about speed clamping
[09:50:46] <alex_joni> petev: you home both
[09:51:00] <alex_joni> which do you wanna discuss, don't want to mix the two
[09:51:06] <alex_joni> homing or other stuff?
[09:51:32] <petev> let's do clamp first
[09:51:43] <alex_joni> ok.. I know speed clamping
[09:51:54] <petev> which is what?
[09:51:56] <alex_joni> which means to reduce the speed in order not to exceed the max possible speed
[09:52:04] <alex_joni> that is what canon does
[09:52:11] <petev> that's definitely not what NIST was talking about
[09:52:19] <alex_joni> talking where?
[09:52:29] <petev> in comments, etc.
[09:52:37] <alex_joni> not sure..
[09:52:46] <alex_joni> anyways, let me put it how I see it
[09:52:49] <petev> do u think a canon clamp axis call limits speed?
[09:52:56] <petev> ok, continue
[09:52:57] <alex_joni> hang on
[09:53:10] <alex_joni> not sure about clamp axis (what function is that?)
[09:53:31] <alex_joni> /* Misc Functions */
[09:53:32] <alex_joni> void CLAMP_AXIS(CANON_AXIS axis)
[09:53:32] <alex_joni> {
[09:53:32] <alex_joni> /*! \todo FIXME-- unimplemented */
[09:53:32] <alex_joni> }
[09:53:34] <alex_joni> this one?
[09:54:02] <alex_joni> don't think it does anything :D
[09:54:14] <petev> yeah
[09:54:25] <alex_joni> ok.. so clamp is out of the question
[09:54:34] <alex_joni> now back to canon and it's normal use ;)
[09:54:49] <alex_joni> when a command is received (arc, line, ..) canon looks at it
[09:55:03] <petev> yeah, that part is fine
[09:55:06] <alex_joni> and looks at the max alowed speed (based on the slowest axis)
[09:55:08] <petev> let's talk home then
[09:55:12] <alex_joni> ok: home
[09:55:15] <petev> home axis or joint?
[09:55:23] <alex_joni> trivkins or nontrivkins?
[09:55:35] <alex_joni> for trivkins it's simple: it doesn't matter
[09:55:37] <petev> canon doesn't know, so has to handle both
[09:55:45] <alex_joni> canon doesn't do homing
[09:55:51] <alex_joni> it only commands homing
[09:56:00] <petev> it will when it's the machine API like it should be
[09:56:26] <petev> right now all the home stuff is axis calls
[09:56:38] <petev> but that seems wrong, u home a joint, no?
[09:58:32] <alex_joni> there are 2 things for nontrivkins
[09:58:54] <petev> ok..
[09:59:00] <alex_joni> world and joint view
[09:59:05] <petev> right
[09:59:11] <alex_joni> if you turn on a nontrivkin machine it will go to joint
[09:59:20] <alex_joni> and you can't switch to world before homing
[09:59:26] <alex_joni> so you need to home each joint
[09:59:35] <petev> yeah, which GUI does that?
[09:59:40] <alex_joni> all of them
[09:59:55] <petev> they are all labelled as axis
[09:59:59] <alex_joni> no
[10:00:06] <petev> I never say any say joint
[10:00:08] <alex_joni> the are labeled joints 0..x
[10:00:11] <alex_joni> tkemc does
[10:00:14] <alex_joni> and mini does
[10:00:20] <petev> hmm, never saw that
[10:00:22] <alex_joni> for non-trivkins
[10:00:31] <alex_joni> because you never compiled a different motmod
[10:00:36] <alex_joni> with non-trivkins linked to it
[10:00:46] <petev> ok, that's probably it
[10:00:53] <alex_joni> gotta run.. let's talk tonight.. ok?
[10:00:57] <petev> ok
[18:00:11] <SWP_Away> SWP_Away is now known as SWPadnos
[19:17:54] <chinamill> * chinamill is back
[19:28:42] <chinamill> I had a segmentation fualt error in line 622 of emc.run today; anyone else experience this?
[19:29:13] <alex_joni> chinamill: try not to use emc.run anymore..
[19:29:17] <alex_joni> but it's interesting
[19:29:26] <alex_joni> was it on startup? or shutdown?
[19:30:49] <chinamill> I saw the config cleanup, looks much less messy, great!
[19:31:47] <chinamill> During milling
[19:31:58] <alex_joni> bdi 4.30?
[19:32:22] <chinamill> bdi-4.30 and emc2 cvs from today
[19:32:56] <alex_joni> that's odd.. do you have the exact message?
[19:33:30] <chinamill> I saved it on the mill. I can get it for you tomorrow
[19:33:44] <alex_joni> ok.. please do
[19:35:08] <chinamill> once emc2 coused X-problems, like a alt+ctrl+backspace
[19:35:51] <chinamill> whaen I logged back in and tried to start emc2 again, it said it was already running
[19:36:06] <alex_joni> probably the lock was still there
[19:36:15] <alex_joni> that can happen on an unclean shutdown
[19:36:42] <chinamill> but this crash was alsu during milling
[19:37:20] <alex_joni> yes.. that's what I mean with unclean shutdown
[19:37:22] <alex_joni> crash
[19:37:29] <chinamill> ok.
[20:49:36] <SWPadnos_> hiya Ray
[20:49:45] <rayh> hi steve
[20:49:59] <SWPadnos_> how's tings?
[20:50:08] <rayh> not bad eh.
[20:50:12] <SWPadnos_> (hard to print a Jamaican accent ;) )
[20:58:19] <rayh> I got a second layer of nodes showing with hal_tree. Interesting that there is really only one command for all and each returns a unique name.
[21:01:50] <SWPadnos_> you mean "show"?
[21:01:58] <SWPadnos_> or the tree widget?
[21:02:16] <rayh> the tree widget returns a command name and an arg.
[21:02:44] <rayh> I want to make it so that the arg returned by a leaf is the whole pin or param or sig name.
[21:03:06] <SWPadnos_> ah - so you need the full "path" to the leaf node
[21:03:11] <rayh> otherwise I imagine a great large switch command.
[21:03:41] <SWPadnos_> the leaf nodes must contain the name of the parent, right?
[21:03:41] <rayh> Right but you cannot have two sub nodes named the same.
[21:03:58] <SWPadnos_> sub nodes in the tree, or subnodes of a particular node?
[21:04:24] <rayh> the $tree add command allows a separate parent name.
[21:04:31] <rayh> let me find the right command.
[21:05:23] <rayh> pathName insert index parent node ?option value...?
[21:05:32] <rayh> Inserts a new node identified by node in the children list of parent at position index.
[21:05:54] <rayh> It really is not bad but is constricting.
[21:06:02] <SWPadnos_> ok, but can you retrieve the parent name from a particular node?
[21:06:26] <SWPadnos_> or am I misunderstanding the problem?
[21:06:31] <rayh> pathName cget option
[21:07:10] <rayh> should let us do that.
[21:07:31] <SWPadnos_> so you want to have a function that returns "pin" "ppmc.0.encoder.00.position", when you ask for the arg and name?
[21:07:45] <SWPadnos_> rathern than just "position"
[21:07:56] <rayh> I believe that we can directly name nodes "ppmc.0.encoder.00.position
[21:08:07] <rayh> and that is what is returned with the command.
[21:08:21] <SWPadnos_> sure, but you probably don't want to, since that would clutter up the tree (visually)
[21:08:29] <SWPadnos_> unless it can display something other than the node name
[21:08:52] <rayh> there is a separate -text option so that one could show up as position
[21:08:58] <SWPadnos_> ok
[21:09:20] <rayh> under encoder.00 node under ppmc.0 node
[21:09:47] <rayh> I should have enough of this done to commit tonight.
[21:09:55] <SWPadnos_> right - I imagine that there would be nodes like hal -> ppmc.0 -> encoder.0 -> position
[21:10:18] <rayh> yep.
[21:10:19] <SWPadnos_> (possibly without the hal root node)
[21:10:28] <rayh> the root node is not shown.
[21:10:31] <SWPadnos_> cool - I'd like to see it
[21:10:35] <SWPadnos_> ok
[21:11:07] <rayh> Right now clicking on the box with the plus opens the node
[21:11:31] <SWPadnos_> makes sense
[21:11:33] <rayh> clicking on the name issues hal/cmd "show" for that level
[21:11:53] <SWPadnos_> you said you're using the BWidget?
[21:12:06] <rayh> I've added a radiobutton set to allow switching from show to other possibilities.
[21:12:12] <rayh> BWidget is it.
[21:12:16] <SWPadnos_> ok
[21:13:47] <SWPadnos_> do you use list to generate the tree in the first plac?
[21:13:49] <SWPadnos_> place
[21:14:01] <SWPadnos_> or is it generated by clicking on the pluses
[21:14:59] <rayh> I wrote a process that uses list for all.
[21:15:18] <rayh> That way we can update the list as we make changes to HAL
[21:16:08] <rayh> The only invariant is the set of HAL parts, comp, pin, param, sig, funct, and thread
[21:16:20] <SWPadnos_> ok
[21:16:36] <rayh> wow. the new emc2 config looks a lot different.
[21:16:44] <SWPadnos_> yes
[21:16:55] <alex_joni> rayh: like it?
[21:17:26] <alex_joni> btw, you should stop using emc.run, and use emc instead
[21:17:37] <alex_joni> if everyone says it's ok, I'll remove emc.run
[21:17:51] <cradek> it's ok with me...
[21:17:58] <rayh> works for me.
[21:17:58] <cradek> it's much better now
[21:18:14] <alex_joni> how about changing it for a version that only prints a user-message?
[21:18:17] <alex_joni> emc.run is obsolete, please use emc
[21:18:24] <rayh> We should add ini files to each of the subdirectories?
[21:18:30] <alex_joni> yes
[21:18:36] <alex_joni> in some places even 2
[21:18:47] <rayh> Right.
[21:18:47] <alex_joni> like stepper/stepper_in.ini and stepper/stepper_mm.ini
[21:18:56] <alex_joni> those are not intended to get run
[21:19:02] <alex_joni> only for testing
[21:19:09] <alex_joni> we are discussing a simple wizard
[21:19:25] <alex_joni> on startup it looks at the available templates and asks the user for a name and template to use
[21:19:34] <alex_joni> and it will setup a config dir for the users machine
[21:19:47] <alex_joni> so he won't use the default configs/foo templates
[21:20:00] <rayh> Good plan. I wrote one of these long ago for emc.
[21:20:04] <SWPadnos_> i tcould even be written in tcl (hint hint)
[21:20:10] <alex_joni> you did? using what?
[21:20:10] <SWPadnos_> can you find it?
[21:20:42] <rayh> I'm sure that I could work up a front screen and nav stuff easy enough.
[21:20:51] <alex_joni> tcl?
[21:20:59] <rayh> tickle and it was on the dropbox.
[21:21:20] <rayh> If tcl/tk is appropriate I'd be pleased to start.
[21:21:48] <SWPadnos_> it probably is appropriate, since emc already more-or-less requires tcl / wish
[21:21:55] <rayh> How about starting it with emc and an unknown name
[21:22:24] <alex_joni> I would have rather used a bash script with dialog
[21:22:30] <alex_joni> but it seems that's not on the bdi :(
[21:22:34] <rayh> like "emc rayminimill"
[21:22:35] <SWPadnos_> the idea is that the wizard will either allow you to select an existing config, or enter a name, and make a copy of an existing config
[21:22:52] <alex_joni> SWPadnos_: right..
[21:23:13] <SWPadnos_> an unknown name for the wizard might result in a prompt asking if you want to create anew config, and then ask you for the template to copy
[21:23:15] <alex_joni> but the wizard should only run if there is no default config (already configured by the wizard)
[21:23:18] <rayh> I could reproduce all of the bash functionality in a totally graphical way.
[21:23:21] <alex_joni> or if it gets run as ray suggested
[21:23:33] <SWPadnos_> unless you directly run the wizard
[21:23:40] <alex_joni> rayh: I know you can, but sometimes it's good to have it text-mode too
[21:23:46] <alex_joni> I imagine some machines without X
[21:23:52] <alex_joni> remote GUI
[21:23:53] <SWPadnos_> for the keystick holdouts ;)
[21:24:01] <alex_joni> SWPadnos_: or that
[21:24:07] <rayh> ah the old textmode things.
[21:24:19] <cradek> I have a trivial script done that prompts for a selection
[21:24:46] <alex_joni> cradek: can I see it?
[21:25:35] <rayh> ah. My first checkout of the new didn't produce an src dir. Now it is.
[21:29:15] <cradek> ok, now I've really finished it :-)
[21:30:35] <alex_joni> nice
[21:30:57] <cradek> does it have to be more complicated or is that it?
[21:31:15] <cradek> it could be polished a bit, but that's the general idea I think
[21:31:31] <alex_joni> well a few issues I have with it by reading the code ;)
[21:31:37] <alex_joni> 1. don't want to use ln -s
[21:31:44] <cradek> 1. yes we do
[21:32:01] <alex_joni> we agreed the templates in the configs/ dir shouldn't be user runnable
[21:32:11] <cradek> oh really? I didn't know that
[21:32:12] <alex_joni> I mean, they are valid, but they shouldn't be used
[21:32:24] <rayh> The iniconfig stuff went away at linuxcnc.org. I can dcc if you wish a look at it.
[21:32:57] <alex_joni> the user should be forced to make a copy of the template he wants
[21:33:14] <alex_joni> looking in the dropbox ray
[21:33:20] <cradek> ok, then change ln to the appropriate cp
[21:33:30] <alex_joni> right
[21:33:33] <rayh> Not there any more. I'll restore a copy now.
[21:33:41] <alex_joni> dcc it then
[21:33:49] <alex_joni> cradek: a few more issues / wishes ;)
[21:34:20] <alex_joni> don't want to always use 'default' as the default ;) so I think a file configs/.default holding the config name would be best
[21:34:35] <alex_joni> created by this script
[21:34:42] <rayh> transfering now as iniconfig.tgz
[21:34:46] <cradek> alex_joni: bah
[21:34:59] <cradek> alex_joni: don't make it more complicated than it has to be
[21:35:06] <cradek> alex_joni: if it's the default, the user doesn't have to type it anyway
[21:35:27] <alex_joni> yeah.. but they should get prompted for a name
[21:35:30] <cradek> alex_joni: if you really want it to be a custom name (which I can understand) then use a symlink default -> custom
[21:35:55] <cradek> alex_joni: a file containing the name of a directory is a stupid substitute for a symlink - that's what they do for windows "shortcuts"
[21:36:05] <alex_joni> what happens if the user wants to try a different template?
[21:36:14] <alex_joni> or if he wants to have more than one config?
[21:36:32] <cradek> he'll have to learn how to make directories? I dunno
[21:36:46] <cradek> sorry, I barely care about this, maybe I shouldn't help
[21:36:55] <alex_joni> bear with me for a second.. please
[21:37:02] <alex_joni> what if:
[21:37:09] <alex_joni> 1. the user runs emc the first time
[21:37:30] <alex_joni> emc sees no default config (either ln, or default dir or configs/.default, doesn't matter)
[21:37:38] <alex_joni> emc calls the wizard script
[21:37:48] <rayh> http://www.linuxcnc.org/dropbox/iniconfig.tgz
[21:38:10] <alex_joni> the wizard script looks what templates are available, and presents the user with a list (along with some descriptions.. we can work on that lateron)
[21:38:17] <alex_joni> the user choses a template, and a name
[21:38:46] <alex_joni> the stuff gets copied to configs/name/ (name.ini, and other .var, .tbl, .hal etc)
[21:39:09] <alex_joni> possibly he gets asked if he wants _in or _mm (if the template dir holds more than one ini)
[21:39:24] <alex_joni> next time emc runs it'll see the default dir, and run that
[21:39:35] <rayh> How about a README in each configs/"directory"
[21:39:46] <alex_joni> but lateron the user wants to try another config
[21:40:14] <alex_joni> so he's trying emc newname (the emc scripts sees newname doesn't exist, calls the wizard with name=newname)
[21:40:20] <cradek> rayh: that would be a good way to get a description
[21:40:23] <alex_joni> rayh: that's fine
[21:40:42] <alex_joni> cradek: does the above sound farfetched?
[21:40:42] <cradek> rayh: they would have to be short if you hope to display them all in a terminal though
[21:40:57] <rayh> Good. We can include that in the graphical easy enough.
[21:41:06] <alex_joni> here's where dialog would come in.. list, with description box below
[21:41:07] <SWPadnos_> "description" might be better, but README is common
[21:41:16] <alex_joni> I'd vote for README
[21:41:33] <rayh> Right. In tcl/tk we could build a dropdown menu with the names of all the subdirs
[21:41:44] <rayh> click one and you get the readme.
[21:41:51] <rayh> for it.
[21:41:52] <cradek> rayh: how do I run this iniconfig thing?
[21:42:22] <rayh> Oh. the config.txt file has a description.
[21:42:32] <rayh> It should have been named README
[21:42:33] <cradek> rayh: I'm picturing radiobuttons on the left and a frame with the readme info in it on the right: the right one updates as you change the radiobuttons
[21:42:40] <cradek> rayh: when you're happy, you can hit OK to select that one
[21:42:51] <rayh> Sounds good to me.
[21:42:56] <alex_joni> and a textbox for name above
[21:43:09] <rayh> Certainly.
[21:43:25] <alex_joni> * alex_joni isn't fond of only 'default'
[21:43:26] <cradek> oh for the new name to create?
[21:43:30] <alex_joni> yes
[21:43:35] <rayh> I'll hack that up right away.
[21:43:37] <cradek> I think it should be below so the flow of the screen is top-to-bottom
[21:43:46] <alex_joni> OK, below is ok too
[21:43:47] <cradek> peruse configs, pick one
[21:43:49] <cradek> pick new name
[21:43:50] <cradek> hit ok
[21:43:51] <alex_joni> just make sure its there ;)
[21:44:10] <cradek> * cradek is anal about screen layouts
[21:44:20] <rayh> What filename would you like for this?
[21:44:30] <cradek> rayh: how do I run iniconfig?
[21:44:31] <rayh> I presume that it will be in emc2/tcl/bin
[21:44:38] <alex_joni> emc-config-wizard
[21:45:06] <rayh> Um. Seems to me that config-wizard implies more than this will do.
[21:45:14] <alex_joni> cradek: ./emcconf.tcl ?
[21:45:36] <cradek> oh is it just a text editor?
[21:46:05] <cradek> oh emcconf1 does more
[21:46:07] <rayh> something like newconfig comes
[21:46:31] <rayh> or copyconfig
[21:47:06] <alex_joni> setupconfig?
[21:47:16] <rayh> that would work.
[21:54:23] <SWPadnos_> how about choose-config?
[21:54:34] <SWPadnos_> and the file created is default-config
[22:04:04] <rayh> Is there a generally available variable for the path to emc/configs
[22:06:32] <alex_joni> rayh: yes, $EMC2_CONFIG_DIR
[22:07:02] <alex_joni> err.. that's the path where the ini file is
[22:07:17] <alex_joni> and $EMC2_ORIG_CONFIG_DIR is emc2/configs/
[22:08:07] <rayh> so all of the directories would be collected by /sbin/ls $EMC2_ORIG_CONFIG_DIR
[22:08:20] <rayh> and limit the results to directories?
[22:08:21] <cradek> rayh: glob
[22:08:41] <rayh> i would but don't know how.
[22:10:38] <cradek> % glob configs/*
[22:10:38] <cradek> configs/CVS configs/common configs/demo_mazak configs/demo_step_cl configs/m5i20 configs/motenc configs/sim configs/stepper configs/stg
[22:13:43] <rayh> ah okay. I can handle that.
[22:14:06] <cradek> I wasn't clear, that's a tclsh command, not bash
[22:14:29] <alex_joni> hmmm chris doing tcl.. that's a new one
[22:14:47] <SWPadnos_> glob also returns directories, like ls
[22:14:52] <SWPadnos_> I mean - files and dirs
[22:15:19] <cradek> alex_joni: just because I don't like it doesn't mean I can't program in it
[22:15:25] <SWPadnos_> ok - you need glob configs/*/
[22:17:00] <rayh> so configs/*/ should be replaced by $EMC2_ORIG_CONFIG_DIR
[22:17:22] <SWPadnos_> $EMC2_ORIG_CONFIG_DIR/configs/*/
[22:17:24] <rayh> I presume so that we can install this thing without hard coded directories.
[22:18:21] <alex_joni> right
[22:18:48] <alex_joni> SWPadnos_: $EMC2_ORIG_CONFIG_DIR already has configs/ in it
[22:18:55] <SWPadnos_> ah 0 OK
[22:19:22] <alex_joni> rayh: yes. configs/ is a relative thing and it's bad
[22:19:30] <SWPadnos_> got it - $EMC2_CONFIG_DIR is what holds configs/
[22:19:31] <alex_joni> because you don't know where the tcl gets run from
[22:19:44] <alex_joni> say you have configs/stepper/stepper.ini
[22:19:53] <rayh> got it.
[22:19:56] <alex_joni> $EMC2_CONFIG_DIR is configs/stepper/
[22:20:05] <alex_joni> $EMC2_ORIG_CONFIG_DIR is configs/
[22:20:28] <alex_joni> SWPadnos_: the run script goes to $EMC2_CONFIG_DIR and runs from there
[22:20:35] <SWPadnos_> ok
[22:20:43] <alex_joni> so it can easily find stuff on installed system aswell
[22:20:51] <rayh> tells me it can't find that variable in the environment.
[22:21:08] <alex_joni> you need to run it from the emc script, that exports the var
[22:21:13] <alex_joni> or export it manually for now
[22:21:17] <alex_joni> while testing
[22:22:58] <rayh> Okay will do.
[22:23:50] <alex_joni> export EMC2_ORIG_CONFIG_DIR=path/to/configs && ./choose-config.tcl
[22:24:29] <alex_joni> ok guys.. after midnight, can't stay like last night..
[22:24:40] <alex_joni> g'night all..
[22:27:01] <rayh> see you alex
[22:30:39] <cradek> bye alex
[22:30:51] <alex_joni> catch you tomorrow