QueryCommandsImpl.mesa
Copyright Ó 1984, 1985, 1986, 1987 by Xerox Corporation. All rights reserved.
created by L. Stewart
Mike Spreitzer January 9, 1987 5:35:31 pm PST
Russ Atkinson (RRA) January 27, 1987 5:45:50 pm PST
Doug Wyatt, January 28, 1987 4:16:53 pm PST
Michael Plass, March 2, 1987 6:36:03 pm PST
Doug Terry, April 9, 1987 1:34:30 pm PDT
Taken from InitialCommandsImpl.mesa by removing all but Open command and renaming "Open" to "QOpen".
DIRECTORY
Commander USING [CommandObject, CommandProc, CommandProcHandle, CommandProcObject, Handle, Lookup, Register],
CommandTool USING [AddProcToList, ArgumentVector, DoCommand, Failed, GetProp, Parse, RemoveProcFromList],
FileNames USING [ConvertToSlashFormat, CurrentWorkingDirectory, ResolveRelativePath, StripVersionNumber],
FS USING [Close, Create, EnumerateForNames, Error, ExpandName, NameProc, OpenFile, StreamOpen],
IO USING [Close, EndOf, EndOfStream, Error, GetBlock, GetLine, PutBlock, PutChar, PutF, PutF1, PutFR, PutRope, STREAM],
Rope USING [Cat, Concat, Equal, Find, IsEmpty, Match, ROPE, Run, Size, Substr],
RopeList USING [DReverse],
TiogaMenuOps USING [Open, OpenImpl],
ViewerClasses USING [Column, Viewer];
QueryCommandsImpl: CEDAR MONITOR
IMPORTS Commander, CommandTool, FileNames, FS, IO, Rope, RopeList, TiogaMenuOps
= BEGIN
ROPE: TYPE = Rope.ROPE;
STREAM: TYPE = IO.STREAM;
ColumnFromSwitch: PROC [switchArg: ROPE, default: ViewerClasses.Column] RETURNS [column: ViewerClasses.Column ← left] ~ {
MatchPrefix: PROC [s: ROPE] RETURNS [BOOL] ~ {
RETURN [Rope.Run[s1: switchArg, s2: s, case: FALSE] = Rope.Size[switchArg]];
};
SELECT TRUE FROM
MatchPrefix["-right"] => column ← right;
MatchPrefix["-left"] => column ← left;
MatchPrefix["-color"] => column ← color;
ENDCASE => column ← default;
};
Open: Commander.CommandProc = {
argv: CommandTool.ArgumentVector ← CommandTool.Parse[cmd
! CommandTool.Failed => {msg ← errorMsg; GO TO oops}];
column: ViewerClasses.Column ← left;
noFiles: BOOLTRUE;
FOR i: NAT IN [1..argv.argc) DO
argi: ROPE ~ argv[i];
IF Rope.Match["-*", argi]
THEN { column ← ColumnFromSwitch[argi, column] }
ELSE {
list: LIST OF ROPE ← ExpandStar[argi];
WHILE list # NIL DO
name: ROPE ← FileNames.ResolveRelativePath[list.first];
OpenViewer[name, cmd.out, column];
list ← list.rest;
ENDLOOP;
noFiles ← FALSE;
};
ENDLOOP;
IF noFiles THEN OpenViewer[NIL, cmd.out, column];
EXITS oops => result ← $Failure;
};
ExpandStar: PROC [token: ROPE] RETURNS [LIST OF ROPE] = {
IF Rope.Find[token, "*"] # -1 THEN {
stripVersion: BOOL;
listOfTokens: LIST OF ROPENIL;
ConsProc: FS.NameProc = {
fullFName ← FileNames.ConvertToSlashFormat[fullFName];
IF stripVersion THEN fullFName ← FileNames.StripVersionNumber[fullFName];
listOfTokens ← CONS[fullFName, listOfTokens]; -- on front of list
RETURN[TRUE];
};
IF token.Find["!"] = -1 THEN token ← Rope.Concat[token, "!H"];
stripVersion ← token.Find["!H", 0, FALSE] # -1;
FS.EnumerateForNames[pattern: FileNames.ResolveRelativePath[token], proc: ConsProc
! FS.Error => IF error.group # bug THEN CONTINUE];
RETURN[RopeList.DReverse[listOfTokens]];
}
ELSE RETURN[LIST[token]];
};
OpenViewer: PROC [name: ROPE, out: STREAM, column: ViewerClasses.Column] = {
viewer: ViewerClasses.Viewer;
IF Rope.IsEmpty[name] THEN name ← FileNames.CurrentWorkingDirectory[];
viewer ← TiogaMenuOps.Open[fileName: name, column: column];
IF viewer = NIL THEN out.PutF1["\tViewer file not found: %g\n", [rope[name]]]
ELSE out.PutF1["\tCreated Viewer: %g\n", [rope[viewer.name]]];
};
Init: PROC = {
Register: PROC [name: ROPE, proc: Commander.CommandProc, doc: ROPE, data: REFNIL, un: BOOLFALSE] = {
name ← Rope.Concat["///Commands/", name];
Commander.Register[name, proc, doc, data, NOT un];
};
Register["QOpen", Open, "QOpen [-left | -right | -color ] fileName - open a viewer"];
};
Init[];
END.
April 4, 1983 4:42 pm, Stewart, Created
April 20, 1983 7:10 pm, Stewart, add commandfile arguments and auto commandfiles
September 7, 1983 11:10 am, Stewart, Cedar 5
October 24, 1983 9:42 am, Stewart, New CommandTool
November 3, 1983 9:37 am, Stewart, Bulletproofing
November 3, 1983 9:37 am, Stewart, add Checkpoint and Rollback
January 14, 1984 8:18 pm, Stewart, new Open
January 9, 1987 3:41:40 pm PST, Spreitzer, added OpenImpl and made New create files