Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.date.versionLessThan
on versionLessThan (vs1, vs2) {
<<Thursday, November 11, 1999 at 2:32:09 AM by AR
<<Implemented as a kernel verb in Frontier 6.1.
<<Old code
<<on versionLessThan (vs1, vs2) //old code
<<1/6/98 by DW
<<fixed this case:
<<date.versionLessThan ("2.0b9", "2.0")
<<true
<<on explodeVersion (s, adrtable)
<<new (tableType, adrtable)
<<adrtable^.mainVersionNum = 0
<<adrtable^.stageNum = 0
<<adrtable^.subVersionNum = 0
<<
<<local (mainVersionString = "")
<<local (stageChars = {'d', 'a', 'b', 'f'})
<<while sizeof (s) > 0
<<if stageChars contains s [1]
<<break
<<mainVersionString = mainVersionString + s [1]
<<s = string.delete (s, 1, 1)
<<
<<case string.countFields (mainVersionString, '.')
<<0 //no string
<<mainVersionString = "0.0.0"
<<1 //no dots
<<mainVersionString = mainVersionString + ".0.0"
<<2 //one dot
<<mainVersionString = mainVersionString + ".0"
<<while mainVersionString contains "."
<<mainVersionString = mainVersionString - "."
<<adrtable^.mainVersionNum = number (mainVersionString)
<<
<<if s == ""
<<return
<<
<<local (stage = 0, charstodelete = 0)
<<case string.lower (s [1])
<<'d'
<<stage = 1
<<charstodelete = 1
<<'a'
<<stage = 2
<<charstodelete = 1
<<'b'
<<stage = 3
<<charstodelete = 1
<<'f'
<<stage = 4
<<if string.lower (s [2]) == 'c'
<<charstodelete = 2
<<else
<<charstodelete = 1
<<s = string.delete (s, 1, charstodelete)
<<adrtable^.stageNum = stage
<<
<<adrtable^.subVersionNum = number (s)
<<
<<local (vt1, vt2)
<<explodeVersion (vs1, @vt1)
<<explodeVersion (vs2, @vt2)
<<
<<on error ()
<<scriptError ("This feature requires Frontier " + minVersionString + " and this is version " + Frontier.version () + ".")
<<
<<if vt1.mainVersionNum != vt2.mainVersionNum
<<return (vt1.mainVersionNum < vt2.mainVersionNum)
<<if vt1.stageNum != vt2.stageNum
<<if vt1.stageNum == 0
<<return (false) //it's greater than any other value
<<else
<<if vt2.stagenum == 0
<<return (true)
<<return (vt1.stageNum < vt2.stageNum)
<<if vt1.subVersionNum != vt2.subVersionNum
<<if vt1.subVersionNum == 0
<<return (false) //it's greater than any other value
<<else
<<return (vt1.subVersionNum < vt2.subVersionNum)
<<return (false) //they're equal
kernel (date.versionLessThan)}
<<bundle //test code, all should return false
<<dialog.notify (not date.versionLessThan ("2.0b9", "2.0"))
<<dialog.notify (not date.versionLessThan ("2.0b9", "2.0"))
<<dialog.notify (date.versionLessThan ("2.0", "2.0b9"))
<<dialog.notify (date.versionLessThan ("5.1.5b9", "5.1.5b9"))
<<dialog.notify (date.versionLessThan ("5.1.5b9", "5.0.2b18"))
<<dialog.notify (date.versionLessThan ("5.1.5", "5.0.2b18"))
<<dialog.notify (date.versionLessThan ("5.1.5", "5.1.5b18"))
<<dialog.notify (date.versionLessThan ("5.1.5b18", "5.1.5a18"))
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.