about summary refs log tree commit diff stats
path: root/apps
Commit message (Expand)AuthorAgeFilesLines
...
* 7376Kartik Agaram2020-12-231-3/+7
* 7375Kartik Agaram2020-12-231-9/+20
* 7373Kartik Agaram2020-12-211-1/+1
* 7372 - successful read from disk using BIOSKartik Agaram2020-12-211-13/+48
* 7371Kartik Agaram2020-12-211-1/+1
* 7370Kartik Agaram2020-12-212-7/+8
* 7369 - read hard disk using BIOSKartik Agaram2020-12-202-8/+2
* 7368 - ooh, int 13h works with a floppyKartik Agaram2020-12-201-0/+6
* 7367 - start of boot sector for Mu computerKartik Agaram2020-12-202-0/+191
* 7366Kartik Agaram2020-12-201-22/+24
* 7365Kartik Agaram2020-12-201-4/+4
* 7364Kartik Agaram2020-12-201-11/+12
* 7363Kartik Agaram2020-12-201-1/+1
* 7362Kartik Agaram2020-12-201-2/+2
* 7361Kartik Agaram2020-12-201-2/+2
* 7360Kartik Agaram2020-12-201-13/+21
* 7359 - boot into 32-bit modeKartik Agaram2020-12-201-6/+6
* 7358Kartik Agaram2020-12-202-0/+208
* 7357Kartik Agaram2020-12-191-74/+65
* 7356Kartik Agaram2020-12-195-121/+115
* 7355 - learning to boot into 32-bit modeKartik Agaram2020-12-1910-0/+351
* 7354 - tile: stop trying to center menuKartik Agaram2020-12-141-15/+7
* 7353Kartik Agaram2020-12-141-1/+1
* 7352Kartik Agaram2020-12-143-37/+15
* 7350 - mu.subx optimization: skip no-op copiesKartik Agaram2020-12-112-0/+141
* 7349Kartik Agaram2020-12-111-12/+12
* 7348 - mu.subx bug with string literalsKartik Agaram2020-12-112-0/+63
* 7347 - tile: separate sandbox and function menusKartik Agaram2020-12-061-0/+38
* 7346Kartik Agaram2020-12-061-2/+25
* 7345Kartik Agaram2020-12-061-14/+14
* 7344Kartik Agaram2020-12-061-3/+15
* 7343Kartik Agaram2020-12-061-5/+4
* 7342 - tile: hotkeys for ending function editKartik Agaram2020-12-061-0/+20
* 7341 - tile: function editing doneKartik Agaram2020-12-062-22/+6
* 7340 - tile: function editing almost doneKartik Agaram2020-12-062-4/+215
* 7339 - tile: position cursor in correct functionKartik Agaram2020-12-062-8/+77
* 7338 - tile: architecture starting to crystallizeKartik Agaram2020-12-052-21/+54
* 7337 - tile: jumping to a functionKartik Agaram2020-12-051-18/+147
* 7336 - tile: back to function editingKartik Agaram2020-12-052-17/+5
* 7334 - advent day 5 doneKartik Agaram2020-12-041-0/+81
* 7333 - advent day 5 part 1Kartik Agaram2020-12-041-0/+79
* 7332 - advent day 4 doneKartik Agaram2020-12-041-4/+124
* 7331 - hacky way to convert slice to stringKartik Agaram2020-12-041-0/+20
* 7330 - snapshot: advent day 4 part 2 easy casesKartik Agaram2020-12-041-8/+100
* 7329 - snapshot: advent day 4 part 2Kartik Agaram2020-12-0414-0/+82
* 7328 - advent day 4 part 1Kartik Agaram2020-12-041-0/+75
* 7327Kartik Agaram2020-12-031-6/+6
* 7326Kartik Agaram2020-12-031-5/+9
* 7325 - tile: start implementing function editingKartik Agaram2020-12-031-22/+28
* 7323 - advent day 3 doneKartik Agaram2020-12-021-1/+15
see: # https://github.com/nim-lang/nimble#nimble-link var override = "" discard readLine(f, override) discard readLine(f, override) close(f) if not override.isAbsolute(): best = best / override else: best = override let f = if subdir.len == 0: pkg else: subdir let res = addFileExt(best / f, "nim") if best.len > 0 and fileExists(res): result = res when false: proc resolveDollar(project, source, pkg, subdir: string; info: TLineInfo): string = template attempt(a) = let x = addFileExt(a, "nim") if fileExists(x): return x case pkg of "stdlib": if subdir.len == 0: return options.libpath else: for candidate in stdlibDirs: attempt(options.libpath / candidate / subdir) of "root": let root = project.splitFile.dir if subdir.len == 0: return root else: attempt(root / subdir) else: when considerParentDirs: var p = parentDir(source.splitFile.dir) # support 'import $karax': let f = if subdir.len == 0: pkg else: subdir while p.len > 0: let dir = p / pkg if dirExists(dir): attempt(dir / f) # 2nd attempt: try to use 'karax/karax' attempt(dir / pkg / f) # 3rd attempt: try to use 'karax/src/karax' attempt(dir / "src" / f) attempt(dir / "src" / pkg / f) p = parentDir(p) when considerNimbleDirs: if not options.gNoNimblePath: var nimbleDir = getEnv("NIMBLE_DIR") if nimbleDir.len == 0: nimbleDir = getHomeDir() / ".nimble" result = findInNimbleDir(pkg, subdir, nimbleDir / "pkgs") if result.len > 0: return result when not defined(windows): result = findInNimbleDir(pkg, subdir, "/opt/nimble/pkgs") if result.len > 0: return result proc scriptableImport(pkg, sub: string; info: TLineInfo): string = result = resolveDollar(gProjectFull, info.toFullPath(), pkg, sub, info) if result.isNil: result = "" proc lookupPackage(pkg, subdir: PNode): string = let sub = if subdir != nil: renderTree(subdir, {renderNoComments}).replace(" ") else: "" case pkg.kind of nkStrLit, nkRStrLit, nkTripleStrLit: result = scriptableImport(pkg.strVal, sub, pkg.info) of nkIdent: result = scriptableImport(pkg.ident.s, sub, pkg.info) else: localError(pkg.info, "package name must be an identifier or string literal") result = "" proc getModuleName*(conf: ConfigRef; n: PNode): string = # This returns a short relative module name without the nim extension # e.g. like "system", "importer" or "somepath/module" # The proc won't perform any checks that the path is actually valid case n.kind of nkStrLit, nkRStrLit, nkTripleStrLit: try: result = pathSubs(conf, n.strVal, toFullPath(conf, n.info).splitFile().dir) .replace(" ") except ValueError: localError(conf, n.info, "invalid path: " & n.strVal) result = n.strVal of nkIdent: result = n.ident.s of nkSym: result = n.sym.name.s of nkInfix: let n0 = n[0] let n1 = n[1] when false: if n1.kind == nkPrefix and n1[0].kind == nkIdent and n1[0].ident.s == "$": if n0.kind == nkIdent and n0.ident.s == "/": result = lookupPackage(n1[1], n[2]) else: localError(n.info, "only '/' supported with $package notation") result = "" else: let modname = getModuleName(conf, n[2]) # hacky way to implement 'x / y /../ z': result = getModuleName(conf, n1) result.add renderTree(n0, {renderNoComments}).replace(" ") result.add modname of nkPrefix: when false: if n.sons[0].kind == nkIdent and n.sons[0].ident.s == "$": result = lookupPackage(n[1], nil) else: discard # hacky way to implement 'x / y /../ z': result = renderTree(n, {renderNoComments}).replace(" ") of nkDotExpr: localError(conf, n.info, warnDeprecated, "using '.' instead of '/' in import paths") result = renderTree(n, {renderNoComments}).replace(".", "/") of nkImportAs: result = getModuleName(conf, n.sons[0]) else: localError(conf, n.info, "invalid module name: '$1'" % n.renderTree) result = "" proc checkModuleName*(conf: ConfigRef; n: PNode; doLocalError=true): FileIndex = # This returns the full canonical path for a given module import let modulename = getModuleName(conf, n) let fullPath = findModule(conf, modulename, toFullPath(conf, n.info)) if fullPath.isEmpty: if doLocalError: let m = if modulename.len > 0: modulename else: $n localError(conf, n.info, "cannot open file: " & m) result = InvalidFileIDX else: result = fileInfoIdx(conf, fullPath)