DIRECTORY Atom, BasicTime USING[Now], Commander USING [CommandProc, Register], FS USING [StreamOpen], IO, Rope, ViewerTools, WhiteboardDB, WhiteboardDBPrivate; WhiteboardLoad: CEDAR PROGRAM IMPORTS Atom, BasicTime, Commander, FS, IO, Rope, WhiteboardDBPrivate, WhiteboardDB = BEGIN OPEN WhiteboardDBPrivate, IO, Rope; DoLoad: Commander.CommandProc = BEGIN ENABLE WhiteboardDB.WBError => { SELECT reason FROM $ServerDown => {msg _ "Load Failed -- server unavailable; retry later"; CONTINUE}; $TransactionAbort => {msg _ "Load Failed -- transaction aborted; retry later"; CONTINUE}; $ReadOnly => {msg _ "Load Failed -- database is readonly"; CONTINUE}; ENDCASE => REJECT }; h: IO.STREAM = IO.RIS[cmd.commandLine]; [] _ h.SkipWhitespace[]; IF h.EndOf THEN [] _ WhiteboardDB.Load["Whiteboard.dump"] ELSE [] _ WhiteboardDB.Load[h.GetLineRope[]]; END; LoadFromFile: PUBLIC PROC[dumpFile: ROPE] = BEGIN in: STREAM; in _ FS.StreamOpen[dumpFile]; IF in = NIL THEN RETURN; LoadWBs[in]; WhiteboardDBPrivate.MarkTransaction[]; END; LoadWBs: PROC[in: STREAM] = BEGIN WHILE LoadWB[in] DO ENDLOOP; END; LoadWB: PROC[in: STREAM] RETURNS [success: BOOLEAN] = BEGIN wb: Whiteboard; children: ChildSet; wbName: ROPE; [] _ in.GetTokenRope[ ! IO.EndOfStream => GOTO Done]; wbName _ in.GetTokenRope[].token; wb _ DeclareWhiteboard[name: wbName]; children _ Children[wb]; FOR child: WBItem _ NextChild[children], NextChild[children] UNTIL child = NIL DO Destroy[child] ENDLOOP; SetVersion[wb, 0]; SetCreateDate[wb, BasicTime.Now[]]; WHILE LoadWBItem[in, wb] DO ENDLOOP; RETURN[TRUE]; EXITS Done => { RETURN[FALSE] }; END; LoadWBItem: PROC[in: STREAM, wb: Whiteboard] RETURNS [BOOLEAN] = BEGIN key: ROPE; key _ in.GetTokenRope[].token; -- read keyword IF Rope.Equal[key,"NOTE"] THEN LoadNote[in, wb] ELSE IF Rope.Equal[key, "ICON"] THEN LoadIcon[in, wb] ELSE IF Rope.Equal[key, "END"] THEN RETURN[FALSE]; RETURN[TRUE]; END; LoadNote: PROC[in: STREAM, wb: Whiteboard] = BEGIN contentsRope, formatRope: ROPE; x, y, w, h: INTEGER; [] _ in.SkipWhitespace[]; [x, y, w, h] _ ReadCoords[in]; contentsRope _ in.GetRopeLiteral[]; formatRope _ in.GetRopeLiteral[]; [] _ NewNote[wb, x, y, w, h, NEW[ViewerTools.TiogaContentsRec _ [contentsRope, formatRope]]] END; LoadIcon: PROC[in: STREAM, wb: Whiteboard] = BEGIN iconNameRope, iconLabelRope, iconTypeRope, iconIconRope, iconArgumentRope: ROPE; x, y: INTEGER; x _ in.GetInt[]; y _ in.GetInt[]; iconNameRope _ in.GetRopeLiteral[]; iconLabelRope _ in.GetRopeLiteral[]; iconTypeRope _ in.GetRopeLiteral[]; iconIconRope _ in.GetRopeLiteral[]; iconArgumentRope _ in.GetRopeLiteral[]; [] _ NewIcon[wb, x, y, iconNameRope, iconLabelRope, iconIconRope, iconArgumentRope, Atom.MakeAtom[iconTypeRope]] END; ReadCoords: PROC[in: STREAM] RETURNS [x, y, w, h: INTEGER] = BEGIN x _ in.GetInt[]; y _ in.GetInt[]; w _ in.GetInt[]; h _ in.GetInt[]; END; Commander.Register[key: "WBLoad", proc: DoLoad, doc: "\nLoads named file into current whiteboard segment\n (File defaults to Whiteboard.dump)"] END... ˜File: WhiteboardLoad.mesa Copyright (C) 1984 by Xerox Corporation. All rights reserved. For loading of whiteboard databases. (Companion to WhiteboardDump.mesa.) Last edited by: Jennifer Widom, August 24, 1984 11:02:17 pm PDT Last edited by: Donahue, August 7, 1985 8:49:19 am PDT Last Edited by: Winkler, December 17, 1984 6:32:29 pm PST read keyword "WHITEBOARD" make sure all children are destroyed Ê:˜Jšœ™Jšœ=™=JšœH™HJšœ?™?J™6J™9J˜šÏk ˜ Jšœ˜Jšœ œ˜Jšœ œ˜(Jšœœ˜Jšœ˜Jšœ˜J˜ Jšœ ˜ Jšœ˜J˜—šœœ˜š˜Jšœœœ+˜MJ˜——Jšœœœ˜)J˜šÏnœ˜š˜šœ˜ Jšœ˜JšœHœ˜RJšœOœ˜YJšœ;œ˜EJšœœ˜—Jš œœœœœ˜'J˜šœ œ*˜9Jšœ)˜-—Jšœ˜J˜——šž œ œ œ˜+š˜Jšœœ˜ Jšœœ˜Jšœœœœ˜J˜ Jšœ&˜&šœ˜J˜———šžœœœ˜š˜Jšœ œœ˜Jšœ˜J˜——š žœœœœ œ˜5š˜J˜J˜Jšœœ˜ Jšœœœ˜6Jšœ™J˜!J˜%Jšœ$™$J˜šœ:œ œ˜QJ˜Jšœ˜—Jšœ˜J˜#Jšœœœ˜$Jšœœ˜ Jšœ œœ˜ Jšœ˜J˜——š ž œœœœœ˜@š˜Jšœœ˜ Jšœ Ïc˜/šœœ˜/Jšœœœ˜5Jš œœœœœ˜2—Jšœœ˜ Jšœ˜J˜——šžœœœ˜,š˜Jšœœ˜Jšœ œ˜J˜J˜J˜#J˜!Jšœœ<˜\Jšœ˜J˜——šžœœœ˜,š˜JšœKœ˜PJšœœ˜J˜J˜J˜#J˜$J˜#J˜#J˜'Jšœp˜pJšœ˜J˜——š ž œœœœœ˜<šœ˜J˜J˜J˜J˜Jšœ˜J˜——˜/J˜_J˜—Jšœ˜J˜—…— Т