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.