-- Copyright (C) 1986 by Xerox Corporation. All rights reserved. -- CWindowLibImpl.mesa -- NFS 31-Jan-86 10:05:14 DIRECTORY CEnvUtil USING[IsItDefaultStdin, SetOutputMode, StdinHandle, SystemCall, zone], CIOLib USING[FilePtr], CRuntime USING [ConfigHandle,GetConfigHandle, GetStdout, SetConfigHandle, ProcessNotRegistered, StopIfUserAborted], CString USING [CString, CStringToLongString], CWindowLib USING [sgttyb, TIOCGETP, TIOCSETP]; CWindowLibImpl:PROGRAM IMPORTS CEnvUtil, CRuntime, CString EXPORTS CWindowLib = { failure:INTEGER = -1; success:INTEGER = 0; ioctl:PUBLIC PROCEDURE[ stream:CIOLib.FilePtr, request:INTEGER,argp:LONG POINTER TO CWindowLib.sgttyb] RETURNS[INTEGER ¬ success] = { IF ~CEnvUtil.IsItDefaultStdin[stream­] THEN RETURN[failure]; SELECT request FROM CWindowLib.TIOCGETP => argp­ ¬ LOOPHOLE[stream­,CEnvUtil.StdinHandle].mode; CWindowLib.TIOCSETP => LOOPHOLE[stream­,CEnvUtil.StdinHandle].mode ¬ argp­; ENDCASE => RETURN[failure]; IF stream = CRuntime.GetStdout[] THEN CEnvUtil.SetOutputMode[stream­.clientData, argp­]; }; system:PUBLIC PROCEDURE[string:CString.CString] RETURNS[INTEGER] = { mString:LONG STRING ¬ CString.CStringToLongString[string,CEnvUtil.zone]; exitCode:INTEGER; cH:CRuntime.ConfigHandle ¬ NIL; CRuntime.StopIfUserAborted[]; -- since user abort will be reset. cH ¬ CRuntime.GetConfigHandle[!CRuntime.ProcessNotRegistered => CONTINUE]; exitCode ¬ SIGNAL CEnvUtil.SystemCall[mString]; IF cH # NIL THEN CRuntime.SetConfigHandle[cH]; CEnvUtil.zone.FREE[@mString]; RETURN[exitCode]; }; }.