src/Tools/jEdit/src/jedit/VFS.scala
author wenzelm
Thu, 25 Jun 2009 14:19:14 +0200
changeset 34616 bc923168c880
parent 34615 5e61055bf35b
child 34624 5e4f33d033ba
permissions -rw-r--r--
_canonPath: expand_path; _listFiles: robust handling of null;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34407
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     1
/*
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     2
 * Isabelle virtual file system for jEdit.
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     3
 *
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     4
 * This filesystem passes every operation on to FileVFS. Just the read and write
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     5
 * operations are overwritten to convert Isabelle symbols to unicode on read and
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     6
 * unicode to Isabelle symbols on write.
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     7
 *
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     8
 * @author Johannes Hölzl, TU Munich
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
     9
 */
aad6834ba380 added some headers and comments;
wenzelm
parents: 34363
diff changeset
    10
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    11
package isabelle.jedit
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    12
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    13
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    14
import java.io.{InputStream, OutputStream, ByteArrayInputStream,
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    15
  ByteArrayOutputStream, InputStreamReader}
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    16
import java.awt.Component
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    17
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    18
import org.gjt.sp.jedit.{OperatingSystem, Buffer}
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    19
import org.gjt.sp.jedit.io
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    20
import org.gjt.sp.jedit.io.{VFSFile, VFSManager}
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    21
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
    22
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    23
object VFS
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    24
{
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    25
  val BUFFER_SIZE = 1024
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    26
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    27
  def input_converter(in: InputStream): ByteArrayInputStream =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    28
  {
34615
5e61055bf35b renamed IsabelleProcess to Isabelle_Process;
wenzelm
parents: 34614
diff changeset
    29
    val reader = new InputStreamReader(in, Isabelle_System.charset)
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
    30
    val buffer = new StringBuilder
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    31
    val array = new Array[Char](BUFFER_SIZE)
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    32
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    33
    var finished = false
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
    34
    while (!finished) {
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    35
      val length = reader.read(array, 0, array.length)
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    36
      if (length == -1)
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    37
        finished = true
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    38
      else
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    39
        buffer.append(array, 0, length)
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    40
    }
34363
0fec381fb51e use utf-8 charset encoding
immler@in.tum.de
parents: 34337
diff changeset
    41
34440
561a6d19bd95 renamed object Plugin to Isabelle;
wenzelm
parents: 34436
diff changeset
    42
    val str = Isabelle.symbols.decode(buffer.toString)
34615
5e61055bf35b renamed IsabelleProcess to Isabelle_Process;
wenzelm
parents: 34614
diff changeset
    43
    new ByteArrayInputStream(str.getBytes(Isabelle_System.charset))
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    44
  }
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    45
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    46
  class OutputConverter(out: OutputStream) extends ByteArrayOutputStream
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    47
  {
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    48
    override def close()
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    49
    {
34440
561a6d19bd95 renamed object Plugin to Isabelle;
wenzelm
parents: 34436
diff changeset
    50
      out.write(Isabelle.symbols.encode(new String(buf, 0, count)).getBytes)
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    51
      out.close()
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    52
    }
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    53
  }
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    54
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    55
  class File(vfs: VFS, path: String, file: VFSFile) extends VFSFile
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    56
  {
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    57
    override def getVFS = vfs
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    58
    override def getPath = path
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    59
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    60
    override def getColor = file.getColor
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    61
    override def getDeletePath = file.getDeletePath
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    62
    override def getExtendedAttribute(name: String) = file.getExtendedAttribute(name)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    63
    override def getIcon(expanded: Boolean, open: Boolean) = file.getIcon(expanded, open)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    64
    override def getLength = file.getLength
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    65
    override def getName = file.getName
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    66
    override def getSymlinkPath = file.getSymlinkPath
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    67
    override def getType = file.getType
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    68
    override def isBinary(session: Object) = file.isBinary(session)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    69
    override def isHidden = file.isHidden
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    70
    override def isReadable = file.isReadable
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    71
    override def isWriteable = file.isWriteable
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    72
    override def setDeletePath(path: String) = file.setDeletePath(path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    73
    override def setHidden(hidden: Boolean) = file.setHidden(hidden)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    74
    override def setLength(length: Long) = file.setLength(length)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    75
    override def setName(name: String) = file.setName(name)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    76
    override def setPath(path: String) = file.setPath(path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    77
    override def setReadable(readable: Boolean) = file.setReadable(readable)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    78
    override def setWriteable(writeable: Boolean) = file.setWriteable(writeable)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    79
    override def setSymlinkPath(symlink_path: String) = file.setSymlinkPath(symlink_path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    80
    override def setType(ty: Int) = file.setType(ty)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    81
  }
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    82
}
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    83
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    84
class VFS extends io.VFS("isabelle", VFSManager.getFileVFS.getCapabilities)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    85
{
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    86
  private val base = VFSManager.getFileVFS
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
    87
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    88
  private def map_file(path: String, file: VFSFile): VFSFile =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    89
    if (file == null) null else new VFS.File(this, path, file)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    90
34616
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    91
  private def drop_prefix(path: String): String =
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    92
    if (path.startsWith(Isabelle.VFS_PREFIX))
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    93
      path.substring(Isabelle.VFS_PREFIX.length)
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    94
    else path
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    95
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    96
  private def expand_path(path: String): String =
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    97
    Isabelle.VFS_PREFIX + Isabelle.system.expand_path(drop_prefix(path))
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
    98
  
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
    99
  private def platform_path(path: String): String =
34616
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
   100
    Isabelle.system.platform_path(drop_prefix(path))
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   101
34616
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
   102
  
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   103
  override def getCapabilities = base.getCapabilities
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   104
  override def getExtendedAttributes = base.getExtendedAttributes
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   105
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   106
  override def getFileName(path: String) = base.getFileName(path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   107
  override def getParentOfPath(path: String) = super.getParentOfPath(path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   108
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   109
  override def constructPath(parent: String, path: String): String =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   110
    if (parent.endsWith("/")) parent + path
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   111
    else parent + "/" + path
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   112
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   113
  override def getFileSeparator = '/'
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
   114
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   115
  override def getTwoStageSaveName(path: String): String =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   116
  {
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   117
    val dir = new java.io.File(platform_path(getParentOfPath(path)))
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   118
    if (dir.canWrite || OperatingSystem.isWindows)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   119
      super.getTwoStageSaveName(path)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   120
    else null
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   121
  }
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   122
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   123
  override def createVFSSession(path: String, comp: Component) = base.createVFSSession(path, comp)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   124
34616
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
   125
  override def _canonPath(session: Object, path: String, comp: Component) = expand_path(path)
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   126
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   127
  override def _listFiles(session: Object, path: String, comp: Component): Array[VFSFile] =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   128
    base._listFiles(session, platform_path(path), comp).map(file =>
34616
bc923168c880 _canonPath: expand_path;
wenzelm
parents: 34615
diff changeset
   129
      if (file == null) null else map_file(constructPath(path, file.getName), file))
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   130
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   131
  override def _getFile(session: Object, path: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   132
    map_file(path, base._getFile(session, platform_path(path), comp))
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   133
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   134
  override def _delete(session: Object, path: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   135
    base._delete(session, platform_path(path), comp)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   136
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   137
  override def _rename(session: Object, from: String, to: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   138
    base._rename(session, platform_path(from), platform_path(to), comp)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   139
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   140
  override def _mkdir(session: Object, path: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   141
    base._mkdir(session, platform_path(path), comp)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   142
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   143
  override def _backup(session: Object, path: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   144
    base._backup(session, platform_path(path), comp)
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   145
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
   146
  override def _createInputStream(session: Object, path: String,
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
   147
      ignoreErrors: Boolean, comp: Component) =
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   148
    VFS.input_converter(base._createInputStream(session, platform_path(path), ignoreErrors, comp))
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
   149
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   150
  override def _createOutputStream(session: Object, path: String, comp: Component) =
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   151
    new VFS.OutputConverter(base._createOutputStream(session, platform_path(path), comp))
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
   152
34436
a77cfbe18a31 use Plugin.self.symbols;
wenzelm
parents: 34407
diff changeset
   153
  override def _saveComplete(session: Object, buffer: Buffer, path: String, comp: Component) =
34614
25b178e4faaf misc tuning and reorganization;
wenzelm
parents: 34605
diff changeset
   154
    base._saveComplete(session, buffer, platform_path(path), comp)
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
   155
}