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)