.\" $NetBSD: twinkle1.c,v 1.4 1998/01/09 04:12:16 perry Exp $ .\" .\" Copyright (c) 1980, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)twinkle1.c 8.1 (Berkeley) 6/8/93 .\" # include # include /* * the idea for this program was a product of the imagination of * Kurt Schoens. Not responsible for minds lost or stolen. */ # define NCOLS 80 # define NLINES 24 # define MAXPATTERNS 4 typedef struct { int y, x; } LOCS; LOCS Layout[NCOLS * NLINES]; /* current board layout */ int Pattern, /* current pattern number */ Numstars; /* number of stars in pattern */ char *getenv(); int die(); main() { srand(getpid()); /* initialize random sequence */ initscr(); signal(SIGINT, die); noecho(); nonl(); leaveok(stdscr, TRUE); scrollok(stdscr, FALSE); for (;;) { makeboard(); /* make the board setup */ puton('*'); /* put on '*'s */ puton(' '); /* cover up with ' 's */ } } /* * On program exit, move the cursor to the lower left corner by * direct addressing, since current location is not guaranteed. * We lie and say we used to be at the upper right corner to guarantee * absolute addressing. */ die() { signal(SIGINT, SIG_IGN); mvcur(0, COLS - 1, LINES - 1, 0); endwin(); exit(0); } /* * Make the current board setup. It picks a random pattern and * calls ison() to determine if the character is on that pattern * or not. */ makeboard() { reg int y, x; reg LOCS *lp; Pattern = rand() % MAXPATTERNS; lp = Layout; for (y = 0; y < NLINES; y++) for (x = 0; x < NCOLS; x++) if (ison(y, x)) { lp->y = y; lp->x = x; lp++; } Numstars = lp - Layout; } /* * Return TRUE if (y, x) is on the current pattern. */ ison(y, x) reg int y, x; { switch (Pattern) { case 0: /* alternating lines */ return !(y & 01); case 1: /* box */ if (x >= LINES && y >= NCOLS) return FALSE; if (y < 3 || y >= NLINES - 3) return TRUE; return (x < 3 || x >= NCOLS - 3); case 2: /* holy pattern! */ return ((x + y) & 01); case 3: /* bar across center */ return (y >= 9 && y <= 15); } /* NOTREACHED */ } puton(ch) reg char ch; { reg LOCS *lp; reg int r; reg LOCS *end; LOCS temp; end = &Layout[Numstars]; for (lp = Layout; lp < end; lp++) { r = rand() % Numstars; temp = *lp; *lp = Layout[r]; Layout[r] = temp; } for (lp = Layout; lp < end; lp++) { mvaddch(lp->y, lp->x, ch); refresh(); } } tkusumi 2019-12-15dm: Rename dm specific atoi() to atoi64()tkusumi 2019-12-15dm: Style cleanups (no functional changes)tkusumi 2019-12-15dm: "unsigned" -> "unsigned int" for consistencytkusumi 2019-12-15dm: Rename targets' ->status() to ->table() given ->info() existstkusumi 2019-12-14dm: Remove unconditional debug prints in targets' ->strategy()tkusumi 2019-12-12dm: Make target's ->init() take parsed argc and argvtkusumi 2019-12-09dm: Correct target name "stripe" -> "striped"tkusumi 2019-12-08dm: Move targets specific structs to .c filestkusumi 2019-12-08dm: Refactor target's ->init() i/ftkusumi 2019-12-07dm: Fix strange pointer declarationstkusumi 2019-12-06dm: Fix typos in comments/messagestkusumi 2019-12-06dm: Don't ignore dm_target_alloc() argumenttkusumi 2019-12-05dm: Make dm core set config to NULL after destroytkusumi 2019-12-03dm: Include <sys/vnode.h> in dm.htkusumi 2019-12-01dm: Remove unused dm_dev::dev_typetkusumi 2019-10-15convert more KM_NOSLEEP to KM_SLEEP and remove code to handle failures.chs 2018-01-05use some size_t, add whitespace between functions, rcsids.christos 2017-06-01remove checks for failure after memory allocation calls that cannot fail:chs 2014-08-19cleanup properly on error.christos 2014-08-18Avoid a memory leak - from maxvagc 2014-06-14Change dk_lookup() to return an anonymous vnode not associated withhannken 2012-08-07Fix problem reported by jym on current-user@ patch was provided by mhitch@.haad 2012-01-04Fix wrong KASSERT, reported by mhitch@.haad 2011-10-14Change the vnode locking protocol of VOP_GETATTR() to request at leasthannken 2011-08-27be consistent and define secsize here as well (though this seems unused?)ahoka 2011-06-02Fix simple typo which made stripe target not working very at all. Issuehaad 2010-12-23make dm aware of physical sector sizes.mlelstv 2010-11-15curlwp needs sys/lwp.h.uebayasi 2010-10-23Add old file describing locking schema used in dm driver.haad 2010-05-18Add multi device strip support written by Guillermo Amaral and reviewed by me.haad 2010-01-04Indent files remove unnecessary blank lines, white spaces and KNFize code.haad 2009-12-01Revert my commit which have added knowledge about dm targets to libdevmapper,haad 2009-09-09Fix bug in kmem_alloc/kmem_free of params string. Params string washaad 2009-06-05Parse dm param string in libdevmapper and not in a dm target init function.haad 2009-04-06Fix build on amd64. Patch sent by dieter roelants.haad 2009-03-07Actually lmplement striping as LVM target. OK'd by Adam.reinoud 2009-03-01Add initial support for striping target, hardcode maximal number of stripeshaad 2009-01-02Return ENOSYS during from dm_target_init routine these tow targets aren'thaad 2009-01-02Add stripe target functions stubs. Stripe target must be present in dm driverhaad