-- Saving to a file info
-- Save.info

SaveStyleProc: Menus.MenuProc = BEGIN
-- Save the style currently in the style tool in a file names <StyleName>.style where
-- <StyleName> is the name found in the style name viewer.
 styleFileName: Rope.ROPE;
 handle: StyleToolHandle ← NARROW[clientData];
IF ~handle.outer.newVersion THEN RETURN;
 styleFileName ← ViewerTools.GetContents[handle.styleNameViewer];
IF Rope.Size[styleFileName] = 0 THEN {
  MessageWindow.Append[message: "Enter style name prior to loading.", clearFirst: TRUE];
  MessageWindow.Blink[];
  RETURN };
-- Check if ".style" already appended
IF Rope.Find[s1: styleFileName, s2: ".style", case: FALSE] = -1 THEN
  styleFileName ← Rope.Cat[styleFileName, ".style"];
IF ~MessageWindow.Confirm[Rope.Cat["Confirm write to ", styleFileName, "..."]] THEN RETURN
ELSE {
  SaveStyle[styleFileName];
  MessageWindow.Append[message: Rope.Cat["Current style saved in ", styleFileName], clearFirst: TRUE];
  handle.outer.newVersion ← FALSE;
  ViewerOps.PaintViewer[handle.outer, header];
  };
  
END;

SaveStyle: PROC [filename: Rope.ROPE] = BEGIN
 file: IO.Handle;
 file ← IO.CreateFileStream[fileName: filename, accessOptions: overwrite, createOptions: none
  ! IO.Error => SELECT ec FROM
       IllegalFileName => {MessageWindow.Append[message: Rope.Cat[
             filename, " is not a valid file name"], clearFirst: TRUE];
             MessageWindow.Blink[];
             CONTINUE};
       ENDCASE => ERROR-- shouldn't happen
  ]; -- Write beginning of file:
IO.PutRope[file, Rope.Cat["% ", filename]];
IO.PutChar[file, IO.CR]; IO.PutChar[file, IO.CR];
IO.PutRope[file, "BeginStyle"];
IO.PutChar[file, IO.CR]; IO.PutChar[file, IO.CR];

-- Write ending of file
IO.PutRope[file, "EndStyle"];

IO.Flush[file];
IO.Close[file];
END;