Oxedit: module { PATH: con "/dis/o/xedit.dis"; Tree: adt { tid: int; # tree id, never reused. path: string; # for debug, mostly col: ref Panels->Panel; tag: ref Panels->Panel; xtag: ref Panels->Panel; eds: list of ref Edit; new: fn(path: string): ref Tree; find: fn(tid: int): ref Tree; close: fn(t: self ref Tree); mk: fn(ed: self ref Tree); findedit: fn(t: self ref Tree, path: string): ref Edit; addedit: fn(t: self ref Tree, ed: ref Edit); deledit: fn(t: self ref Tree, ed: ref Edit); lru: fn(t: self ref Tree); dump: fn(t: self ref Tree); }; # Elog.typex Empty: con 0; Null : con '-'; Delete : con 'd'; Insert : con 'i'; Replace: con 'r'; Filename : con 'f'; # support for sam Elog: adt{ typex: int; # Delete, Insert, Filename q0: int; # location of change (unused in f) nd: int; # number of deleted characters r: string; }; # support for sam Elogbuf: adt { b: array of ref Elog; n: int; new: fn(): ref Elogbuf; push: fn(e: self ref Elogbuf, b: ref Elog); pop: fn(e: self ref Elogbuf): ref Elog; }; # Edit.edited Esel, Etext: con 1<Panel; body: ref Panels->Panel; col: ref Panels->Panel; # support for sam command language elog: ref Elog; elogbuf: ref Elogbuf; buf: ref Tblks->Blks; # with edited file text edited: int; # Esel|Etext according to what changed q0: int; q1: int; pick { File => qid: Sys->Qid; lastcmd: string; Msg => Dir => qid: Sys->Qid; # for dir } new: fn(name: string, tid: int, msg: int): ref Edit; close: fn(t: self ref Edit); mk: fn(ed: self ref Edit); get: fn(ed: self ref Edit): int; put: fn(ed: self ref Edit, where: string): int; cleanto: fn(ed: self ref Edit, cmd: string, arg: string): string; text: fn(ed: self ref Edit): string; # support for sam getedits: fn(ed: self ref Edit); clredits: fn(ed: self ref Edit); putedits: fn(ed: self ref Edit); }; init: fn(d: Oxdat); findpanel: fn(id: int): (ref Tree, ref Edit); trees: list of ref Tree; ui: ref Panels->Panel; seled: ref Edit; # last edit selected/in use debug: int; };