On Feb 21, 2015, at 2:59 AM, Richard Gaskin wrote: > Peter M. Brigham wrote: > >> Just out of curiosity, how *would* you do this via shell call or >> the equivalent on a Windows laptop? > > Good question. > > Thanks to the beautiful simplicity of the Linux /proc directory I was able to > find: > > cat /proc/acpi/battery/BAT1/state > > The "charging state" field there will contain "charging" or "discharging". > > Now if we can turn up a Win command line solution I'll write a handler for > this that'll make it convenient to get this info on all three platforms.
That was my thought too. I was waiting for more info, but I started with the handler(s) below. I don't speak Regex so I converted that line to use a native LC function instead, getNestedItem() -- from your function posted here several months ago, Richard, called nDepth(). I use this so often that its now an essential part of my library. It's much more comprehensible to me than Regex, though it can't do everything Regex can. So the quantity of code below is really mostly utility handlers and the basic getMacPowerSource() is very compact, as was the original. I'll leave the other platforms to you, Richard. (If you use Regex, I'll translate it! :-) ) > Martin, thanks for handling the Mac side - nice work. Yes, thanks! -- Peter Peter M. Brigham [email protected] http://home.comcast.net/~pmbrig ------- function getMacPowerSource -- returns the current power source for a Mac -- "AC" or "Battery" -- requires getNestedItem() getItem(), getDelimiters() put shell ("pmset -g batt") into tSource -- returns something like: -- Currently drawing from 'AC Power' -- -InternalBattery-0 99%; finishing charge; 0:00 remaining return getNestedItem(tSource,2,"'",1,space) end getMacPowerSource function getNestedItem -- allows specifying different delimiters to extract nested chunks -- getNestedItem(tData,index1,delim1,index2,delim2,...) -- eg, put "aaa,bbb,ccc*ddd*eee*fff,ggg,hhh" into tData -- put getNestedItem(tData,3,comma,2,"*") -> "ddd" -- *-delim item 2 of comma-delim item 3 -- specified delimiters can be strings, not just single characters, -- so the following extracts the top-level domain name from a URL: -- put "http://www.nytimes.com/pages/science/index.html/" into tURL -- put getNestedItem(tURL,2,"://",1,"/") -> www.nytimes.com -- based on a function by Richard Gaskin, use-LC list, originally named nDepth() -- debugged by members of the use-LC list, -- expanded by Peter M. Brigham, [email protected] -- the result is a very versatile tool for extracting strings from any text -- with a known structure -- requires getItem(), getDelimiters() put paramcount() into prmCount if prmCount mod 2 <> 1 or prmCount = 1 then return "getNestedItem(): error in parameters." end if put param(1) into workingString repeat with i = 2 to prmCount-1 step 2 if workingString = empty then return empty put param(i) into pItemNbr put param(i+1) into tDelim put getItem(workingString,pItemNbr,tDelim) into workingString end repeat return workingString end getNestedItem function getItem pList, pIndex, pDelim -- returns item # pIndex of pList, given itemdelimiter = pDelim -- could just "get item pIndex of pList" in the calling handler but -- then have to set and restore the itemDelimiter, so this is less hassle -- defaults to pDelim = tab -- allows pDelim to be a string of characters -- so you could do this: -- getItem("a//b//c//d//e//f",4,"//") -> d -- also allows pIndex to be a range, eg "3-5" -- in that case enclose the range in quotes -- by Peter M. Brigham, [email protected] — freeware -- requires getDelimiters() if pDelim = empty then put tab into pDelim if len(pDelim) > 1 then put getDelimiters(pList) into tempDel if tempDel begins with "Error" then return "Error in getDelimiters()" end if else put pDelim into tempDel end if replace pDelim with tempDel in pList set the itemdelimiter to tempDel put offset("-",pIndex) into dashPos if dashPos > 1 then -- don't catch if pIndex is something like -1, -2, etc put char 1 to dashPos-1 of pIndex into tStart put char dashPos+1 to -1 of pIndex into tEnd put item tStart to tEnd of pList into theItem replace tempDel with pDelim in theItem else put item pIndex of pList into theItem end if return theItem end getItem function getDelimiters pText, nbr -- returns a cr-delimited list of <nbr> characters -- not found in the variable pText -- use for delimiters for, eg, parsing text files, loading arrays, etc. -- usage: put getDelimiters(pText,2) into tDelims -- if tDelims begins with "Error" then exit to top -- or whatever -- put line 1 of tDelims into lineDivider -- put line 2 of tDelims into itemDivider -- etc. -- by Peter M. Brigham, [email protected] — freeware if pText = empty then return "Error: no text specified." if nbr = empty then put 1 into nbr -- default 1 delimiter put "2,3,4,5,6,7,8,16,17,18,19,20,21,22,23,24,25,26" into baseList -- low ASCII values, excluding CR, LF, tab, etc. put the number of items of baseList into maxNbr if nbr > maxNbr then return "Error: max" && maxNbr && "delimiters." repeat with tCount = 1 to nbr put true into failed repeat with i = 1 to the number of items of baseList put item i of baseList into testNbr put numtochar(testNbr) into testChar if testChar is not in pText then -- found one, store and get next delim put false into failed put testChar into line tCount of delimList exit repeat end if end repeat if failed then if tCount = 0 then return "Error: cannot get any delimiters." else if tCount = 1 then return "Error: can only get one delimiter." else return "Error: can only get" && tCount && "delimiters." end if end if delete item i of baseList end repeat return delimList end getDelimiters ------- _______________________________________________ use-livecode mailing list [email protected] Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode
