[e-cvs] cvs commit: e/src/esrc/com/skyhunter/testCaplet helloWorldCapletAuthor.emaker helloWorldTester.e testCapletAuthor.emaker testLauncher.e

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Wed, 8 Aug 2001 02:00:21 -0400


markm       01/08/08 02:00:21

  Added:       src/esrc/com/skyhunter/e/icons briefzilla.gif
               src/esrc/com/skyhunter/e/lang sourceRunnerAuthor.emaker
                        vatMakerAuthor.emaker vatTester.e
               src/esrc/com/skyhunter/e/security
                        capRingControllerMakerAuthorOld.emaker
                        capWTMakerAuthorOld.emaker
                        oldPowerboxControllerMakerAuthor.emaker
                        powerboxControllerMakerAuthor.emaker
               src/esrc/com/skyhunter/e/util mapDomText.emaker
               src/esrc/com/skyhunter/eBrowser analyzeOutlineFunc.emaker
                        analyzeOutlineFuncAuthor.emaker
                        syncServerMakerAuthor.emaker syncServerTester.e
               src/esrc/com/skyhunter/eDeskPlus capLauncherAuthor.emaker
               src/esrc/com/skyhunter/eDeskPlus/strings about.txt
               src/esrc/com/skyhunter/ex/swing capFrameMakerAuthor.emaker
               src/esrc/com/skyhunter/installer
                        agreedCapPromiserAuthorTester.e
                        agreedCapsXMLPromiserAuthor.emaker
                        persistentInstallerAuthor.emaker
               src/esrc/com/skyhunter/testCaplet
                        helloWorldCapletAuthor.emaker helloWorldTester.e
                        testCapletAuthor.emaker testLauncher.e
  Log:
  fixed menuMaker case.  Added missing files

Revision  Changes    Path
1.1                  e/src/esrc/com/skyhunter/e/icons/briefzilla.gif

Index: briefzilla.gif
===================================================================
GIF89a


1.1                  e/src/esrc/com/skyhunter/e/lang/sourceRunnerAuthor.emaker

Index: sourceRunnerAuthor.emaker
===================================================================

//Copyright (C) 2001 Combex. All Rights Reserved.
def sourceRunnerAuthor(unsafe__uriGetter, interp, trace, stdout) :near {
    def traceln(text) {trace(text + "\n")}
    def runSource(sourceText) :near {
        def interpret() :any {
            traceln("starting run prep")
            def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>
            var scope := ScopeSetupMaker privileged(false, stdout, stdout, interp)
            def subInterp {
                to blockAtTop() {
                    # ignored
                }
                to continueAtTop() {
                    # ignored
                }
                delegate { interp }
            }
            scope := scope sprout() bindFinal("interp", subInterp)
            traceln("made scope 2")
            try {
                def tree := e__quasiParser(sourceText)
                def result := tree eval(scope newPov())
                traceln("\n# value: " + result)
                traceln("shown")
                result
            } catch problem {
                traceln("\n# problem: " + problem)
                traceln("problem shown")
            }
        }
        interpret()
    }
}



1.1                  e/src/esrc/com/skyhunter/e/lang/vatMakerAuthor.emaker

Index: vatMakerAuthor.emaker
===================================================================

# Reads the current contents of the buffer, and resets the buffer.
# <p>
# Repeated calls act like successive reads from a stream
#
# @author Mark S. Miller
# @author Terry Stanley
def readBuffer(stringBuffer) :String {
    def result := stringBuffer toString()
    stringBuffer setLength(0)
    result
}

# For making vats.
# <p>
# This is a very early draft of the concept, and is expected to change
# radically in non-upwards compatible ways.
# 
# @author Marc Stiegler
# @author Mark S. Miller
# @author Terry Stanley
def vatMakerAuthor(unsafe__uriGetter, introducer, traceln) :near {

    # XXX Kludge: The sourceCode expression must not print to stdout or 
    # stderr when it's evaluated, although the objects it spawns may do 
    # so later
    class vatMaker(sourceCode, args, props, vatName) :near {
        def io__uriGetter := <unsafe:java.io.*>
        def elib__uriGetter := <unsafe:org.erights.e.elib.*>
        def elang__uriGetter := <unsafe:org.erights.e.elang.*>
        def RunnerMaker := <elib:prim.Runner>
        def InterpMaker := <elang:interp.Interp>
        def StringWriterMaker := <io:StringWriter>
        def TextWriterMaker := <elib:base.TextWriter>
        def TwineFeederMaker := <elang:syntax.TwineFeeder>

        def altoutWriter := StringWriterMaker new()
        def altoutBuffer := altoutWriter getBuffer()
        def altout := TextWriterMaker new(altoutWriter)

        def alterrWriter := StringWriterMaker new()
        def alterrBuffer := alterrWriter getBuffer()
        def alterr := TextWriterMaker new(alterrWriter)

        def runner := RunnerMaker new(vatName)
        def sacrificial := TwineFeederMaker new("")
        def altInterp := InterpMaker make(
            args,
            props,
            altout,
            alterr,
            runner,
            sacrificial,
            null)        # optTopScope, null implies privilegedScope

        traceln("made interp")
        def wrappedSource := `
introducer onTheAir()
println(introducer sturdyToURI(sturdyRef($sourceCode)))
`
        altInterp setSource(wrappedSource)
        def optProblem := altInterp interpret() # beware: 2 vat blocking op
        require(optProblem == null, thunk{`while spawning: $optProblem`})
        def errString := alterrBuffer toString() trim()
        require(errString == "", thunk{`errors while spawning: $errString`})

        def uri := readBuffer(altoutBuffer) trim()
        def sr := introducer sturdyFromURI(uri)
        def primorialObjPromise := sr promiseRef()
        def vat {
            to promisePrimorialObj() :any {primorialObjPromise}
            to getInterp()          :near {altInterp}
            to getRunner()          :near {runner}
            to readStdout()       :String {readBuffer(altoutBuffer)}
            to readStderr()       :String {readBuffer(alterrBuffer)}
        }
    }
}



1.1                  e/src/esrc/com/skyhunter/e/lang/vatTester.e

Index: vatTester.e
===================================================================

introducer onTheAir()
def vatMaker := <import:com.skyhunter.e.lang.vatMakerAuthor> run(
    unsafe__uriGetter, introducer, println)

def source := "
def bogusSyncServer(x) :any { x * 2 }
"

def vat := vatMaker new(source, [], interp getProps(), "Bogus Sync Server")
println("made far vat")

def farSyncServer := vat promisePrimorialObj()
println("far sync server: " + farSyncServer)
def outs := vat readStdout()
def errs := vat readStderr()
println("farOuts: " + outs)
println("farErrs: " + errs)
println("vat runner: " + vat getRunner())

def answer := farSyncServer <- run(37)
def answer2 := farSyncServer <- run(24)
when (answer2) -> done(adone) {
    println("got answer2 in when clause: " + answer2)
    println("got adone in done clause: " + adone)
    def answer3 := farSyncServer <- run(102)
    when (answer3) -> done2(a3) {
        println("got a3: " + a3)
        println("Test Done")
        interp continueAtTop()
    } catch p2 {println("p2: " + p2)}
} catch prob {
    println("prob: " + prob)
}

interp blockAtTop()









1.1                  e/src/esrc/com/skyhunter/e/security/capRingControllerMakerAuthorOld.emaker

Index: capRingControllerMakerAuthorOld.emaker
===================================================================

def capRingControllerMakerAuthor (unsafe__uriGetter, file__uriGetter) :near {
    class capRingControllerMaker(capRingFile) :near {
        def capRingController

        var timer := null
        var readablesMap := [] asMap() diverge()
        var writeablesMap := [] asMap() diverge()
        var tempDir := null

        def capRing {
            to getReadablesMap() :near {readablesMap snapshot()}
            to getWriteablesMap() :near {writeablesMap snapshot()}
            to getTimer() :near {timer}
            to getTempDirectory() :near {tempDir}
        }
        def bind capRingController {
            to getCapRing() :near {capRing}
            to addReadable(nickname,file) {}
            to addWriteable(nickname,file) {}
            to addTimer() {}
            to addTempDir() {}
        }
    }
}

#println("starting make")
#def maker :=  capRingControllerMakerAuthor (unsafe__uriGetter, file__uriGetter)
#    def controller := maker new(null)
#println("made: " + controller)





1.1                  e/src/esrc/com/skyhunter/e/security/capWTMakerAuthorOld.emaker

Index: capWTMakerAuthorOld.emaker
===================================================================
def capWTMakerAuthor(awt__uriGetter, swing__uriGetter, JPanel__quasiParser) :near {
    class capWTMaker(appImage, appTitle, powerbox) :near {
        def capFrameMaker := <import:com.skyhunter.ex.swing.capFrameMakerAuthor> (
            powerbox, <swing:JFrame>, appImage, appTitle, JPanel__quasiParser, swing__uriGetter)
        def dialogPromiser := <import:com.skyhunter.ex.swing.dialogPromiserAuthor> (
            awt__uriGetter, swing__uriGetter, JPanel__quasiParser, capFrameMaker)
        def capWT {
            //TODO: get rid of getSwing and getAwt when E makes components safe
            to getSwing() :near {swing__uriGetter}
            to getAwt() :near {awt__uriGetter}
            to getCapFrameMaker() :near {capFrameMaker}
            to getDialogPromiser() :near {dialogPromiser}
            to requestEditableFile(title, justification) :any{}
            to requestReadableFile(title, justification) :any{}
        }
    }
}




1.1                  e/src/esrc/com/skyhunter/e/security/oldPowerboxControllerMakerAuthor.emaker

Index: oldPowerboxControllerMakerAuthor.emaker
===================================================================

def powerboxControllerMakerAuthor(unsafe__uriGetter, file__uriGetter, resource__uriGetter, JPanel__quasiParser) :near {
    def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor>(
        <unsafe:java.awt.*>, <unsafe:javax.swing.*>)
    var stdErr := ""
    def confinedRunner(sourceTwine) :any {
        stdErr := ""
        def traceln(text) {stdErr := `$stdErr $text ${"<br>\n"}`}
        traceln("in confined runner, about to interpret")
        def interpret() :any {
            var result := null
            traceln("ready")
            def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>
            traceln("made scoper")
            def scope1 := ScopeSetupMaker universal()
            traceln("made scope1")
            try {
                def tree := e__quasiParser(sourceTwine)
                traceln("made tree")
                result := tree eval(scope1 newPov())
                traceln("confined Interpretation done")
                traceln("\n# value: " + result)
                traceln("confined shown")
            } catch problem {
                traceln(`Error: ${"\n"}$problem`)
                result := stdErr
                throw
            }
            result
        }
        interpret()
    }

    class powerboxControllerMaker(appImage,
        appTitle,
        capletSource,
        initialFiles,
        capRingController) :near {

        def caplet
        def powerbox {
            to getCapRing() :near {capRingController getCapRing()}
            //initialFiles returns a near map of possibly far files
            to getInitialFiles() :near {initialFiles}
            //base capability request pops tabbed dialog user can pick a raw cap in
            to requestBaseCapabilityVow(capName,justification) :any {}
            //general capability pops drag/drop dialog
            to requestCapabilityVow(capName, justification) :any {}
            to getCapWT() :near {
                def makerAuthor := <import:com.skyhunter.e.security.capWTMakerAuthor>
                def maker := makerAuthor(<unsafe:java.awt.*>, <unsafe:javax.swing.*>, JPanel__quasiParser)
                maker new(appImage, appTitle, powerbox)
            }
        }
        def powerboxController {
            to getPowerbox() :near {powerbox}
            to reactToPowerbar(powerbar) {
                #build cut button
                def cutter() {
                    #do nothing
                }
                def cutButton := uiKit newToolButton(
                    <resource:com/skyhunter/e/icons/cut.gif>,
                    "Cut from Global Clipboard", cutter)
                #build paste button
                def paster() {
                    caplet reactToPaste("test paste object string")
                }
                def pasteButton := uiKit newToolButton(
                    <resource:com/skyhunter/e/icons/paste.gif>,
                    "Cut from Global Clipboard", paster)
                def strut := uiKit label("")
                def powerPanel := JPanel`$cutButton $pasteButton $strut.X`
                powerbar add(powerPanel)
            }
        }
        def launchCaplet(source) :near {
            try {
            def maker := confinedRunner(source)
            maker new(powerbox)
            } catch err {
                powerbox getCapWT() getDialogPromiser() new(
                    "Caplet failed",
                    `<html>Program runner trace: <br>
                    $stdErr <br>
                    Caplet execution output: <br>
                    $err`,
                    null,
                    ["OK"])
            }
        }
        def bind caplet := launchCaplet(capletSource)
        powerboxController
    }
}




1.1                  e/src/esrc/com/skyhunter/e/security/powerboxControllerMakerAuthor.emaker

Index: powerboxControllerMakerAuthor.emaker
===================================================================

//Copyright (C) 2001 Combex. All Rights Reserved.

def powerboxControllerMakerAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any {
    def swing__uriGetter := <unsafe:javax.swing.*>
    def awt__uriGetter := <unsafe:java.awt.*>
    def traceOut := <unsafe:java.lang.System> out()
    def trace(text) {E call(traceOut, "print(String)", [text])}
    def traceln(text) {trace(text + "\n")}
    def runSource := <import:com.skyhunter.e.lang.sourceRunnerAuthor> run(unsafe__uriGetter, interp, trace, stdout)
    def validFrameVerbs := ["show",
        "pack", "addWindowListener",
        "dispose", "hide",
         "isShowing", "removeWindowListener",
        "setCursor", "toBack",
        "getMenuBar", "getTitle",
        "isResizable", "setMenuBar",
        "setResizable", "getState",
        "setState",  "getJMenuBar",
        "update" ] asKeys()
    //capletAuthorSource is optional so that the caplet can be manufactured either
    // by the powerbox during normal operations, or externally to the powerbox
    // when the caplet is better constructed externally, as in when debugging.
    // There is a one-to-one correspondence between caplets and powerbox/powerboxController pairs
    class powerboxControllerMaker(optCapletAuthorSource, capletName, optCapletIconImage, authorizedCapsSml) :any  {
        def powerbox
        def caplet
        def powersMap := [] asKeys() diverge()
        class powerbarControllerMaker(powerPanel, eFrame) :near {
            def powerbarController {
                to reactToPaste() {caplet reactToPaste(eFrame,"dummyObject")}
            }
        }
        def frameMaker {
            to new(title) :near {
                def myJFrame := <swing:JFrame> new(`$capletName $title`)
                if (optCapletIconImage != null) {myJFrame setIconImage(optCapletIconImage)}
                def contentPane := <swing:JPanel> new()
                def powerbarPane := <swing:JPanel> new()
                myJFrame getContentPane() add(contentPane, "Center")
                myJFrame getContentPane() add(powerbarPane, "South")
                def frame {
                    to setTitle(title) {myJFrame setTitle(`$capletName $title`)}
                    to getContentPane() :near {
                        traceln("contentPane requested")
                        contentPane
                    }
                    match[verb,args] {
                        if (validFrameVerbs maps(verb)) {
                            E call(myJFrame, verb, args)
                        }
                    }
                }
                powerbarControllerMaker new(powerbarPane,frame)
                frame
            }
            to new() :near {
                frameMaker new("")
            }
        }
        def launchCaplet() {
            if (optCapletAuthorSource != null) {
                def capletAuthor := runSource(optCapletAuthorSource)
                def bind caplet := capletAuthor(powerbox, awt__uriGetter, swing__uriGetter)
            }
        }
        def processCapsSml() {
            powersMap[powerbox FRAME_MAKER()] := frameMaker
            powersMap[powerbox TRACE()] := trace
        }
        def bind powerbox {
            to requestExit() {
                interp continueAtTop()

            }
            to getFrameMaker() :near {frameMaker }
            to subsetPowers(restrictedMap) :near {}
            to requestFilesPromise(editable, title, justification, startPathText, filter) :any {
                def answer := [] diverge()
                def chooser := <swing:JFileChooser> new()
                if (filter != null) {chooser setFileFilter(filter)}
                if (startPathText != null && startPathText != "") {
                    try {
                        chooser setCurrentDirectory(<file: startPathText>)
                    } catch e {traceln("bad startPath: " + startPathText)}
                }
                chooser setApproveButtonText("Grant Editing")
                chooser setMultiSelectionEnabled(false)
                def editableText() :any {
                    if (editable) {
                        "editable"
                    }else {"read-only"}
                }
                chooser setDialogTitle(`$capletName requests ${editableText()} file: $title`)
                def accessory := <swing:JLabel> new()
                accessory setText("Justification: " + justification)
                chooser setAccessory(accessory)
                def approve0 := chooser showOpenDialog(null)
                if (approve0 == 0) {
                    traceln("file selection approved")
                    var nextFile := chooser getSelectedFile()
                    if (!editable) {nextFile := nextFile readOnly()}
                    answer push(nextFile)
                }
                answer
            }
            to requestUrlPromise(urlString, title, justification) :any {}
            to requestCapPromise(title, justification) :any {}
            to optCap(capKey) :any {powersMap[capKey] }
            to runSource(sourceText) :any {runSource(sourceText)}
            to CAP_URLGETTER() :any {"capUrlGetter"}
            to CAP_TIMER() :any {"capTimerGetter"}
            to FRAME_MAKER() :any {"frameMaker"}
            to TRACE() :any {"trace"}

        }
        processCapsSml()
        launchCaplet()
        def powerboxController {
            to getPowerbox() :near {powerbox}
            to forceExit() {interp continueAtTop()}
            to getCaplet() :near {caplet}
            to startExternalCaplet(theCaplet) {
                def bind caplet := theCaplet
            }
        }
    }
}

//variations on caplet architecture:
// def capletAuthor: author responds to Run, which is not class-like,
//    caplet autostarts, so caplet source must be re evaluated for each run
// class capletAuthor: author responds to New,
//    caplet autostarts, so caplet source reevaluated every time
// class capletMakerAuthor: caplet maker responds to new,
//    once author compiled, make new caplets
// class capletRunnerAuthor: caplet runner responds to run
// class capletStarterAuthor: caplet runner responds to start,
//    spends an extra level of indentation
// class capletInitializerAuthor: caplet runner responds to init(), very
//     like java applets, spends an extra level of indentation
// class capletMakerAuthor with separate start() method, separates
//     construction of class from actual execution, leading to simpler
//     syntax for beginners but again another lost level of indentation.
//     Note that the classCapletMakerAuthor can always start itself no matter
//     whether this syntax is used or not, so it is not a security feature of
//     any kind.

// Decisions: class or def for Author?

// Most compact representations that enable single evaluation of author source:
//     class/def caplet(Maker/Runner)Author

// Most Java-like: capletMakerAuthor+"to init()" and capletInitializerAuthor

// Note that any of these methods allow the capletAuthor or Maker or whatever to return
// null, i.e., return no handle, to attempt to not be shut off. But putting it
// on a separate thread means it can always be shut off anyway, and so the
// most notable consequence of returning a null is that the object is no longer
// persistable, since it cannot be informed to persist.



1.1                  e/src/esrc/com/skyhunter/e/util/mapDomText.emaker

Index: mapDomText.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def mapDomText(domTextNodes) :any {
    def table := [] asKeys() diverge()
    def nodeText(list) :String {
        if (list size() == 1) {
            list[0] getData()
        } else if (list size() ==0 ) {
            ""
        } else {
            //badData, no way to inform
        }
    }
    def visitor {
        match [verb, args] {
            if (verb =~ `visit@{theKey}`) {
                table[theKey] := nodeText(args[0])
            }
        }
    }
    for each in domTextNodes {each welcome(visitor)}
    table snapshot()
}



1.1                  e/src/esrc/com/skyhunter/eBrowser/analyzeOutlineFunc.emaker

Index: analyzeOutlineFunc.emaker
===================================================================

def elex := <unsafe:org.erights.e.elang.syntax.ELexer>

def sourceAnalyzer {
            #returns [outlineList,outlineIndices,varLineList,varLineIndices]
            #suitable for being passed to textModel setLines method
            to makeOutline(sourceText) :pbc {
                def computeIndent(leadString) :any {
                    var spaceCount := 0
                    var indentCount := 0
                    for each in leadString {
                        if (each == '\t') {
                            indentCount += 1
                        } else if (each == ' ') {
                            spaceCount += 1
                        }
                    }
                    indentCount := indentCount + (spaceCount _/ 4)
                    " " * (indentCount + 1)
                }
                def newFuncList := [] diverge()
                def funcLineIndices := [] diverge()
                def newVarList := []diverge()
                def varLineIndices := [] diverge()
                for eachIndex => each in sourceText lines() {
                    #does this line have a "def" in it?
                    if (each =~ `@{leader1}def@{postDef}`) {
                        def testComment := leader1 trim()
                        #is the line a commented out def? If not, continue analysis
                        if (testComment size() == 0 || (testComment[0] != '#' && testComment[0] != '/')) {
                            #if this is a def, is it an object definition with a "{"?
                            try {
                                if (each =~ `@{leader}def@{defineSuffix} @{name}${"{"}@{theEnd}` ?
                                (elex isIdentifierStart(name[0]) && (defineSuffix == "" || defineSuffix == "ine"))) {
                                    newFuncList push("*" + computeIndent(leader) + "def " + name)
                                    funcLineIndices push(eachIndex)
                                    #otherwise, is this a define of a variable?
                                } else if (each =~ `@{leader}def@{defineSuffix} @{name}${":="}@{theEnd}` ?
                                (elex isIdentifierStart(name[0]) && (defineSuffix == "" || defineSuffix == "ine"))) {
                                    newVarList push("*" + computeIndent(leader) + name)
                                    varLineIndices push(eachIndex)
                                }
                            }catch innerDefE {println("caught inner def e " + innerDefE + "\nOn: " + each)}
                        }
                    } else if (each =~ `@{leader}to @{name}${"{"}@{theEnd}` ?
                    (elex isIdentifierStart(name[0]))) {
                        newFuncList push("*" + computeIndent(leader) + "to " + name)
                        funcLineIndices push(eachIndex)
                    }
                }
                [newFuncList,funcLineIndices,newVarList,varLineIndices]
            }
}



1.1                  e/src/esrc/com/skyhunter/eBrowser/analyzeOutlineFuncAuthor.emaker

Index: analyzeOutlineFuncAuthor.emaker
===================================================================

#def elex := <unsafe:org.erights.e.elang.syntax.ELexer>
def analyzeOutlineFuncAuthor(elex, stdout) :near {
    #returns [outlineList,outlineIndices,varLineList,varLineIndices]
    #suitable for being passed to textModel setLines method
    def traceln(text) {stdout println(text)}
    def analyzeSource (sourceText) :near {
        def computeIndent(leadString) :any {
            var spaceCount := 0
            var indentCount := 0
            for each in leadString {
                if (each == '\t') {
                    indentCount += 1
                } else if (each == ' ') {
                    spaceCount += 1
                }
            }
            indentCount := indentCount + (spaceCount _/ 4)
            " " * (indentCount)
        }
        def newFuncList := [] diverge()
        def funcLineIndices := [] diverge()
        def newVarList := []diverge()
        def varLineIndices := [] diverge()
        var declarationType := ""
        var leader := ""
        var postDeclaration := ""
        for eachIndex => each in sourceText split("\n") {
            # first ascertain if this line has "def " or "class "
            # in front
            postDeclaration := ""
            if (each =~ `@{defLeader}def @postDef`) {
                leader := defLeader
                postDeclaration := postDef trim()
                declarationType := "def"
            } else if (each =~ `@{classLeader}class @postClass`) {
                leader := classLeader
                postDeclaration := postClass trim()
                declarationType := "class"
            } else if (each =~ `@{toLeader}to @postTo`) {
                leader := toLeader
                postDeclaration := postTo trim()
                declarationType := "to"
            } else if (each =~ `@{varLeader}var @postVar`) {
                leader := varLeader
                postDeclaration := postVar trim()
                declarationType := "var"
            }
            # if it looks like a class or def, using an open
            # brace, process it as such
            if (postDeclaration size() != 0 && leader trim() size() == 0) {
                # if this is a def/class, is it an object
                # definition with a "{"?
                try {
                    # if this uses a brace in the declaration, it
                    # is a func
                    if (postDeclaration =~ `@nameArea{@theEnd` &&
                        (elex isIdentifierStart(nameArea[0]))
                    ) {
                        def indent := computeIndent(leader)
                        def entry := `$indent $declarationType $nameArea`
                        newFuncList push(entry)
                        funcLineIndices push(eachIndex)
                        # otherwise, is this a define of a variable?
                    } else if (postDeclaration =~ `@nameArea:=@theEnd` &&
                        (elex isIdentifierStart(nameArea[0]) ||
                        nameArea[0] == '[')
                    ) {
                        def indent := computeIndent(leader)
                        newVarList push(`$indent $nameArea`)
                        varLineIndices push(eachIndex)
                    } else if (elex isIdentifierStart(postDeclaration[0])){
                        # this is probably a def blah promise declaration
                        def indent := computeIndent(leader)
                        newFuncList push(`$indent $declarationType $postDeclaration`)
                        funcLineIndices push(eachIndex)
                    }
                } catch innerDefE {
                    traceln("caught inner def e " +
                        innerDefE + "\nOn: " + each)
                }
            }
        }
        [newFuncList snapshot(), funcLineIndices snapshot(), newVarList snapshot(), varLineIndices snapshot()]
    }
}





1.1                  e/src/esrc/com/skyhunter/eBrowser/syncServerMakerAuthor.emaker

Index: syncServerMakerAuthor.emaker
===================================================================

//Copyright (C) 2001 Combex. All Rights Reserved.

def syncServerMakerAuthor(unsafe__uriGetter, stdout) :near {
    def traceln(text) {stdout println(text)}
    def elex := <unsafe:org.erights.e.elang.syntax.ELexer>
    def analyzeOutline := <import:com.skyhunter.eBrowser.analyzeOutlineFuncAuthor> run(elex, stdout)
    class syncServerMaker() :near {
        var textCache := ""
        def syncServer {
            #given a text, return null if the text is the same as the last
            #text, return the function list, function indices, var list, and
            #var indices in a ConstList otherwise
            to getVersion() :pbc {0.1}
            to refreshFuncs(theText) :near {
                if (theText == textCache) {
                    null
                } else {
                    textCache := theText
                    analyzeOutline(theText)
                }
            }
        }
    }
}



1.1                  e/src/esrc/com/skyhunter/eBrowser/syncServerTester.e

Index: syncServerTester.e
===================================================================

def serverMaker := <import:com.skyhunter.eBrowser.syncServerMakerAuthor> run(unsafe__uriGetter, stdout) 
def server := serverMaker new()
def testSource := "
def double(num) :any {2 * num}
def num := 3
"
def result := server refreshFuncs(testSource)
println("output from server test: " + result)




1.1                  e/src/esrc/com/skyhunter/eDeskPlus/capLauncherAuthor.emaker

Index: capLauncherAuthor.emaker
===================================================================

//Copyright (C) 2001 Combex. All Rights Reserved.

def capletLauncherAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any {
    def swing__uriGetter := <unsafe:javax.swing.*>
    def awt__uriGetter := <unsafe:java.awt.*>
    def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter)
    def traceOut := <unsafe:java.lang.System> out()
    def trace(text) {E call(traceOut, "print(Object)", [text])}
    def traceln(text) {trace(text + "\n")}

    def launchCaplet(capletSourceFile) :any {
        #def sourcePath := capletSourceFile getCanonicalPath()
        #def capletNameRoot := capletSourceFile nameRoot???
        #def sourceDir := capletSourceFile getDir()
        #if (!(<file:installedApps> exists())) {<unsafe:java.io.File> mkdir("installedApps")}
        #def outFile := <file: (capletNameRoot + year + month + day + hour + min + ".run")>
        #def capletAuthor := <import:com.skyhunter.RUNSOURCE> run(capletSourceFile getText())
        #def agreedCapsPromiser := <import:com.skyhunter.installer.agreedCapsXMLPromiserAuthor> run(
        #    unsafe__uriGetter, file__uriGetter)
        #def capsXMLVow := agreedCapsPromiser(capletAuthor getRequestedCaps())
        #when (capsXMLVow) -> done(capsXML) {
        #    outFile setText(capsXML)
        #    mapInstalledRunFile(outFile)
        #} catch prob {traceln("capsXML lost: " + prob)}
    }
}



1.1                  e/src/esrc/com/skyhunter/eDeskPlus/strings/about.txt

Index: about.txt
===================================================================
eDesk

Copyright 1999-2001 Marc Stiegler.
All rights reserved.

This software covered by the Mozilla license.
For details see
http://www.skyhunter.com/marcs/securit-Edesk-license.html 1.1 e/src/esrc/com/skyhunter/ex/swing/capFrameMakerAuthor.emaker Index: capFrameMakerAuthor.emaker =================================================================== def capFrameMakerAuthor(powerboxController, JFrameMaker, appImage, appTitle, JPanel__quasiParser, swing__uriGetter) :near { def badWindowMethodsString := "getFocusOwner getInputContext getOwnedWindows toFront getOwner getToolkit addWindowListener " def badFrameMethodsString := "setIconImage " def badJFrameMethodsString := "setContentPane setDesktopIcon getDesktopPane setFrameIcon getGlassPane setGlassPane setIcon setLayer getLayeredPane setLayeredPane getRootPane setSelected moveToFront toFront " def stringToMap(var parseString) :any { def map := [] asMap() diverge() while (parseString =~ `@nextKey${'\n'}@remainder`) { map[nextKey trim()] := null parseString := remainder } map snapshot() } def badMethods := stringToMap(badWindowMethodsString) diverge() badMethods putAll(stringToMap(badFrameMethodsString)) badMethods putAll(stringToMap(badJFrameMethodsString )) class capFrameMaker() :near { def innerFrame := <swing:JFrame> new() if (appImage != null) {innerFrame setIconImage(appImage)} innerFrame setTitle(appTitle) def contentPane := <swing:JPanel> new() def powerPane := <swing:JPanel> new() def innerPane := JPanel`$contentPane.Y $powerPane` innerFrame getContentPane() add(innerPane) powerboxController reactToPowerbar(powerPane) def capFrame { to setTitle(titleSuffix) { innerFrame setTitle(`$appTitle - $titleSuffix`) } to getContentPane() :near {contentPane} match [verb, args] { if (badMethods maps(verb)) { throw("no such capFrame method") } else { E call(innerFrame, verb, args) } } } } } #def powerbox {match [verb,arg] {}} #def maker := capFrameMakerAuthor(powerbox, <swing:JFrame>, null, "test") #def win := maker new() #win show() 1.1 e/src/esrc/com/skyhunter/installer/agreedCapPromiserAuthorTester.e Index: agreedCapPromiserAuthorTester.e =================================================================== //Copyright (C) 2001 Combex. All Rights Reserved. def capNgo := <import:com.skyhunter.installer.agreedCapsXMLPromiserAuthor> run(unsafe__uriGetter, file__uriGetter) def capXMLvow := capNgo(" <requests> <urlProtocols> <protocol> <name>http</name> <why>Just Because</why> </protocol> <protocol> <name>ftp</name> <why>I need it!</why> </protocol> <protocol> <name>file</name> <why>I really need it!</why> </protocol> </urlProtocols> </requests>") println(`capXML promise: $capXMLvow`) when (capXMLvow) -> done(capXML) { println("got answer: " + capXML) } catch prob {println("prob: " + prob)} interp blockAtTop() 1.1 e/src/esrc/com/skyhunter/installer/agreedCapsXMLPromiserAuthor.emaker Index: agreedCapsXMLPromiserAuthor.emaker =================================================================== //Copyright (C) 2001 Combex. All Rights Reserved. def agreedCapsXMLPromiserAuthor(unsafe__uriGetter, file__uriGetter) :any { def swing__uriGetter := <unsafe:javax.swing.*> def awt__uriGetter := <unsafe:java.awt.*> def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter) def traceOut := <unsafe:java.lang.System> out() def trace(text) {E call(traceOut, "print(Object)", [text])} def traceln(text) {trace(text + "\n")} def mapDomText := <import:com.skyhunter.e.util.mapDomText> def validUrlProtocols := ["http","https", "ftp","mailto"] asKeys() def promiseAgreedCapsXML(requestsXML) :any { def [capsPromise, capsSolver] := PromiseMaker() traceln("about to get requestsTree") def requestsTree := (sml__quasiParser valueMaker(requestsXML) substitute(ListMaker run())) diverge() traceln("got requestsTree") def agreedUrlProtocols := [] asKeys() diverge() def urlProtocolsMainPanel := <swing:Box> new(1) def capTabsPane := <swing:JTabbedPane> new() def protocolsVisitor { to visitProtocol(subnodes) { def table := mapDomText(subnodes) traceln("table: " + table) if (validUrlProtocols maps(table["Name"])) { def protocolPane := <swing:JPanel> new() def protocolCheck := <swing:JCheckBox> new(table["Name"]) def whyLabel := <swing:JLabel> new(table["Why"]) protocolPane add(protocolCheck, "East") protocolPane add(whyLabel, "West") def clickedRunner() { traceln("into clickedRunner") if (protocolCheck isEnabled()) { agreedUrlProtocols[table["Name"]] := null } else { agreedUrlProtocols removeKey(table["Name"]) } traceln("did clickedRunner: " + agreedUrlProtocols) } uiKit attachAction(protocolCheck, clickedRunner) urlProtocolsMainPanel add(protocolPane) } else {traceln("invalid protocol: " + table["Name"])} } to viewText(text) {} } def requestsVisitor { to visitUrlProtocols(subnodes) { for each in subnodes {each welcome(protocolsVisitor)} def helpLabel := <swing:JLabel> new("<html><b>Help</b> generally goes here</html>") urlProtocolsMainPanel add(helpLabel) urlProtocolsMainPanel setName("Web") capTabsPane add(urlProtocolsMainPanel) } to viewText(text) {} } def topVisitor { to visitRequests(subnodes) { for each in subnodes {each welcome (requestsVisitor)} } to viewText(blah) {} } for each in requestsTree {each welcome(topVisitor)} def frame := <swing:JFrame> new() def realPane := <swing:Box> new(1) realPane add(capTabsPane) def grantRunner() { traceln("into grantrunner: " ) frame dispose() var xmlOut := "<caps>" if (agreedUrlProtocols size() > 0) { xmlOut += "<urlProtocols>" for each => dummy in agreedUrlProtocols { xmlOut += `<protocol>$each</protocol>` } xmlOut += "</urlProtocols>" } xmlOut += "</caps>" capsSolver resolve(xmlOut) } def grantButton := uiKit newButton("Grant All Checked Authorities", grantRunner) realPane add(grantButton) frame getContentPane() add(realPane) frame pack() frame show() capsPromise } } 1.1 e/src/esrc/com/skyhunter/installer/persistentInstallerAuthor.emaker Index: persistentInstallerAuthor.emaker =================================================================== //Copyright (C) 2001 Combex. All Rights Reserved. def persistentInstallerAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any { def swing__uriGetter := <unsafe:javax.swing.*> def awt__uriGetter := <unsafe:java.awt.*> def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter) def traceOut := <unsafe:java.lang.System> out() def trace(text) {E call(traceOut, "print(Object)", [text])} def traceln(text) {trace(text + "\n")} def installPersistently(capletSourceFile) :any { #def sourcePath := capletSourceFile getCanonicalPath() #def capletNameRoot := capletSourceFile nameRoot??? #def sourceDir := capletSourceFile getDir() #if (!(<file:installedApps> exists())) {<unsafe:java.io.File> mkdir("installedApps")} #def outFile := <file: (capletNameRoot + year + month + day + hour + min + ".run")> #def capletAuthor := <import:com.skyhunter.RUNSOURCE> run(capletSourceFile getText()) #def agreedCapsPromiser := <import:com.skyhunter.installer.agreedCapsXMLPromiserAuthor> run( # unsafe__uriGetter, file__uriGetter) #def capsXMLVow := agreedCapsPromiser(capletAuthor getRequestedCaps()) #when (capsXMLVow) -> done(capsXML) { # outFile setText(capsXML) # mapInstalledRunFile(outFile) #} catch prob {traceln("capsXML lost: " + prob)} } } 1.1 e/src/esrc/com/skyhunter/testCaplet/helloWorldCapletAuthor.emaker Index: helloWorldCapletAuthor.emaker =================================================================== def helloWorldCapletAuthor { to getRequestedCaps() :near {"<requests></requests>"} to run(powerbox, awt__uriGetter, swing__uriGetter) :near { def trace := powerbox optCap(powerbox TRACE()) def helloWorldCaplet { to reactToCut() :any {} to reactToCopy() :any {} to reactToPaste(object) {} to reactToSaveRequest(outStream) {} to reactToPrintRequest(printJob) {} to init() { trace("Hello World Running \n") def frameMaker := powerbox optCap(powerbox FRAME_MAKER()) def frame := frameMaker new("Hello World") def label := <swing:JLabel> new( "<html><b>Hello World</b><p>has arrived</html>") frame getContentPane() add(label) def listener { to windowClosing(event) { powerbox requestExit() } match [verb, args] {} } frame addWindowListener(listener) frame show() } } helloWorldCaplet init() helloWorldCaplet } } 1.1 e/src/esrc/com/skyhunter/testCaplet/helloWorldTester.e Index: helloWorldTester.e =================================================================== //Copyright (C) 2001 Combex. All Rights Reserved. def controllerMaker := <import:com.skyhunter.e.security.powerboxControllerMakerAuthor> run( unsafe__uriGetter, file__uriGetter, interp, stdout) def helloWorldCapletAuthor := <import:com.skyhunter.testCaplet.helloWorldCapletAuthor> #test with caplet in emaker def capletController := controllerMaker new(null, "Test Emaker Caplet:",null, "") def powerbox := capletController getPowerbox() capletController startExternalCaplet(helloWorldCapletAuthor(powerbox, awt__uriGetter, swing__uriGetter)) interp blockAtTop() 1.1 e/src/esrc/com/skyhunter/testCaplet/testCapletAuthor.emaker Index: testCapletAuthor.emaker =================================================================== def testCapletAuthor { to getRequestedCaps() :near {"<requests></requests>"} to run(powerbox, awt__uriGetter, swing__uriGetter) :near { def trace := powerbox optCap(powerbox TRACE()) def testCaplet { to reactToFile(file) :boolean {} to reactToCut() :any {} to reactToCopy() :any {} to reactToPaste(object) {} to reactToSaveRequest(outStream) {} to reactToPrintRequest(printJob) {} to init() { trace("testCaplet in emaker running\n") def frameMaker := powerbox optCap(powerbox FRAME_MAKER()) trace("frameMaker retrieved") def frame := frameMaker new("TestCaplet has arrived") def label := <swing:JLabel> new( "<html><b>Test Caplet</b><p>has arrived</html>") trace("created label\n") frame getContentPane() add(label) trace ("added label to content pane\n") frame show() trace("testCaplet about to requestExit") powerbox requestExit() } } testCaplet init() testCaplet } } 1.1 e/src/esrc/com/skyhunter/testCaplet/testLauncher.e Index: testLauncher.e =================================================================== def sky__uriGetter := <import:com.skyhunter.*> def capSource := <resource:com/skyhunter/testCaplet/testCaplet.emaker> getText() def capRingControllerMaker := <sky:e.security.capRingControllerMakerAuthor>( unsafe__uriGetter, file__uriGetter) def capRingController := capRingControllerMaker new(null) def powerboxControllerMaker := <sky:e.security.powerboxControllerMakerAuthor>( unsafe__uriGetter, file__uriGetter, resource__uriGetter, JPanel__quasiParser) def image := <swing:ImageIcon> new(<resource:com/skyhunter/e/icons/cut.gif>) getImage() def powerboxController := powerboxControllerMaker new(image, "TestCaplet", capSource, [], capRingController)