This is ioctls.m in view mode; [Download] [Up]
// ioctls.m
//
// This file contains methods related to blacking out screens; this used
// to be done via ioctls (hence the name) but for 3.0 there's a better
// interface.
//
// You may freely copy, distribute, and reuse the code in this example.
// NeXT disclaims any warranty of any kind, expressed or implied, as to its
// fitness for any particular use.
#import "Thinker.h"
#import "BackWindow.h"
#import "psfuncts.h"
#import <appkit/Window.h>
#import <objc/List.h>
#import <libc.h>
@implementation Thinker(ioctls)
- normalMode
{
[self _setDimBrightness : &dimBrightness];
return self;
}
- screenSaverMode
{
// this method prevents the screen from dimming so you can see the
// screen saver. Just return self right here if you want the screen
// to go dim while the screensaver is doing its thing.
[self getNormalBrightness :&normalBrightness];
[self _setDimBrightness :&normalBrightness];
return self;
}
// In the multi-headed case, I gotta throw a black window over all
// the screens so they don't burn in while I do animation on one.
// You'd want to black out all screen in every case if you switched
// animations on the fly to prevent the screen from possibly being
// unlocked for a moment.
// Hmm, I don't know why I didn't just put a single big non retained
// window over all screens instead...
- blackOutAllScreens
{
int i;
NXRect r;
if (screenCount <= 1) return self;
if (!screenList) screenList = [[List alloc] init];
for (i=0; i < screenCount; i++)
{
id theWindow;
r = screens[i].screenBounds;
theWindow = [[BackWindow alloc]
initContent:&r style:NX_TOKENSTYLE
backing:NX_NONRETAINED buttonMask:0 defer:NO];
[screenList addObject:theWindow];
[theWindow removeFromEventMask:(NX_LMOUSEDOWNMASK | NX_LMOUSEUPMASK
| NX_MOUSEMOVEDMASK | NX_LMOUSEDRAGGEDMASK
| NX_MOUSEENTEREDMASK | NX_MOUSEEXITEDMASK
| NX_KEYDOWNMASK | NX_KEYUPMASK
| NX_CURSORUPDATEMASK)];
[theWindow setBackgroundGray:NX_BLACK];
tweakWindow([theWindow windowNum], SAVERTIER-1);
[theWindow placeWindowAndDisplay:&r];
[theWindow orderFront:self];
}
return self;
}
- unBlackOutAllScreens
{
if (screenCount <= 1) return self;
[screenList makeObjectsPerform:@selector(orderOut:) with:self];
[screenList freeObjects];
return self;
}
- getDimBrightness:(double *)b
{
*b = NXAutoDimBrightness(evs);
return self;
}
- _setDimBrightness :(double *)b
{
NXSetAutoDimBrightness(evs, *b);
if (NXAutoDimState(evs))
{
NXSetAutoDimState(evs, NO);
NXSetAutoDimState(evs, YES);
}
return self;
}
- getNormalBrightness :(double *)b
{
*b = NXScreenBrightness(evs);
return self;
}
- getDimTime :(double *)t
{
*t = NXAutoDimTime(evs);
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.