Home | History | Annotate | Line # | Download | only in common_source
subs.c revision 1.13
      1  1.13    lukem /*	$NetBSD: subs.c,v 1.13 1999/10/04 23:26:59 lukem Exp $	*/
      2   1.3      cgd 
      3   1.1      cgd /*
      4   1.3      cgd  * Copyright (c) 1980, 1993
      5   1.3      cgd  *	The Regents of the University of California.  All rights reserved.
      6   1.1      cgd  *
      7   1.1      cgd  * Redistribution and use in source and binary forms, with or without
      8   1.1      cgd  * modification, are permitted provided that the following conditions
      9   1.1      cgd  * are met:
     10   1.1      cgd  * 1. Redistributions of source code must retain the above copyright
     11   1.1      cgd  *    notice, this list of conditions and the following disclaimer.
     12   1.1      cgd  * 2. Redistributions in binary form must reproduce the above copyright
     13   1.1      cgd  *    notice, this list of conditions and the following disclaimer in the
     14   1.1      cgd  *    documentation and/or other materials provided with the distribution.
     15   1.1      cgd  * 3. All advertising materials mentioning features or use of this software
     16   1.1      cgd  *    must display the following acknowledgement:
     17   1.1      cgd  *	This product includes software developed by the University of
     18   1.1      cgd  *	California, Berkeley and its contributors.
     19   1.1      cgd  * 4. Neither the name of the University nor the names of its contributors
     20   1.1      cgd  *    may be used to endorse or promote products derived from this software
     21   1.1      cgd  *    without specific prior written permission.
     22   1.1      cgd  *
     23   1.1      cgd  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24   1.1      cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25   1.1      cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26   1.1      cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27   1.1      cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28   1.1      cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29   1.1      cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30   1.1      cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31   1.1      cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32   1.1      cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33   1.1      cgd  * SUCH DAMAGE.
     34   1.1      cgd  */
     35   1.1      cgd 
     36   1.6    lukem #include <sys/cdefs.h>
     37   1.1      cgd #ifndef lint
     38   1.3      cgd #if 0
     39   1.3      cgd static char sccsid[] = "@(#)subs.c	8.1 (Berkeley) 5/31/93";
     40   1.3      cgd #else
     41  1.13    lukem __RCSID("$NetBSD: subs.c,v 1.13 1999/10/04 23:26:59 lukem Exp $");
     42   1.3      cgd #endif
     43   1.1      cgd #endif /* not lint */
     44   1.1      cgd 
     45   1.1      cgd #include "back.h"
     46   1.1      cgd 
     47   1.6    lukem int     buffnum;
     48   1.6    lukem char    outbuff[BUFSIZ];
     49   1.1      cgd 
     50  1.10  hubertf static const char plred[] = "Player is red, computer is white.";
     51  1.10  hubertf static const char plwhite[] = "Player is white, computer is red.";
     52  1.10  hubertf static const char nocomp[] = "(No computer play.)";
     53   1.1      cgd 
     54  1.10  hubertf const char   *const descr[] = {
     55   1.1      cgd 	"Usage:  backgammon [-] [n r w b pr pw pb t3a]\n",
     56   1.1      cgd 	"\t-\tgets this list\n\tn\tdon't ask for rules or instructions",
     57   1.1      cgd 	"\tr\tplayer is red (implies n)\n\tw\tplayer is white (implies n)",
     58   1.1      cgd 	"\tb\ttwo players, red and white (implies n)",
     59   1.1      cgd 	"\tpr\tprint the board before red's turn",
     60   1.1      cgd 	"\tpw\tprint the board before white's turn",
     61   1.1      cgd 	"\tpb\tprint the board before both player's turn",
     62   1.1      cgd 	"\tterm\tterminal is a term",
     63   1.1      cgd 	"\tsfile\trecover saved game from file",
     64   1.1      cgd 	0
     65   1.1      cgd };
     66   1.1      cgd 
     67   1.6    lukem void
     68   1.6    lukem errexit(s)
     69   1.6    lukem 	const char *s;
     70   1.1      cgd {
     71   1.6    lukem 	write(2, "\n", 1);
     72   1.6    lukem 	perror(s);
     73   1.6    lukem 	getout(0);
     74   1.1      cgd }
     75   1.1      cgd 
     76  1.13    lukem int
     77   1.6    lukem addbuf(c)
     78   1.6    lukem 	int     c;
     79   1.1      cgd {
     80   1.1      cgd 	buffnum++;
     81   1.6    lukem 	if (buffnum == BUFSIZ) {
     82   1.6    lukem 		if (write(1, outbuff, BUFSIZ) != BUFSIZ)
     83   1.6    lukem 			errexit("addbuf (write):");
     84   1.1      cgd 		buffnum = 0;
     85   1.1      cgd 	}
     86   1.1      cgd 	outbuff[buffnum] = c;
     87  1.13    lukem 	return (0);
     88   1.1      cgd }
     89   1.1      cgd 
     90   1.6    lukem void
     91   1.6    lukem buflush()
     92   1.6    lukem {
     93   1.1      cgd 	if (buffnum < 0)
     94   1.1      cgd 		return;
     95   1.1      cgd 	buffnum++;
     96   1.6    lukem 	if (write(1, outbuff, buffnum) != buffnum)
     97   1.6    lukem 		errexit("buflush (write):");
     98   1.1      cgd 	buffnum = -1;
     99   1.1      cgd }
    100   1.1      cgd 
    101   1.6    lukem int
    102   1.6    lukem readc()
    103   1.6    lukem {
    104   1.6    lukem 	char    c;
    105   1.1      cgd 
    106   1.6    lukem 	if (tflag) {
    107   1.1      cgd 		cline();
    108   1.1      cgd 		newpos();
    109   1.1      cgd 	}
    110   1.1      cgd 	buflush();
    111   1.6    lukem 	if (read(0, &c, 1) != 1)
    112   1.6    lukem 		errexit("readc");
    113   1.1      cgd #ifdef WHY_IS_THIS_HARDWIRED_IN_HERE
    114   1.1      cgd 	if (c == '\177')
    115   1.6    lukem 		getout(0);
    116   1.1      cgd #endif
    117   1.1      cgd 	if (c == '\033' || c == '\015')
    118   1.1      cgd 		return ('\n');
    119   1.1      cgd 	if (cflag)
    120   1.1      cgd 		return (c);
    121   1.1      cgd 	if (c == '\014')
    122   1.1      cgd 		return ('R');
    123   1.1      cgd 	if (c >= 'a' && c <= 'z')
    124   1.1      cgd 		return (c & 0137);
    125   1.1      cgd 	return (c);
    126   1.1      cgd }
    127   1.1      cgd 
    128   1.6    lukem void
    129   1.6    lukem writec(c)
    130   1.6    lukem 	char    c;
    131   1.1      cgd {
    132   1.1      cgd 	if (tflag)
    133   1.6    lukem 		fancyc(c);
    134   1.1      cgd 	else
    135   1.6    lukem 		addbuf(c);
    136   1.1      cgd }
    137   1.1      cgd 
    138   1.6    lukem void
    139   1.6    lukem writel(l)
    140  1.10  hubertf 	const char   *l;
    141   1.1      cgd {
    142   1.1      cgd #ifdef DEBUG
    143  1.10  hubertf 	const char   *s;
    144   1.1      cgd 
    145   1.1      cgd 	if (trace == NULL)
    146   1.6    lukem 		trace = fopen("bgtrace", "w");
    147   1.6    lukem 
    148   1.6    lukem 	fprintf(trace, "writel: \"");
    149   1.1      cgd 	for (s = l; *s; s++) {
    150   1.1      cgd 		if (*s < ' ' || *s == '\177')
    151   1.6    lukem 			fprintf(trace, "^%c", (*s) ^ 0100);
    152   1.1      cgd 		else
    153   1.6    lukem 			putc(*s, trace);
    154   1.1      cgd 	}
    155   1.6    lukem 	fprintf(trace, "\"\n");
    156   1.6    lukem 	fflush(trace);
    157   1.1      cgd #endif
    158   1.1      cgd 
    159   1.1      cgd 	while (*l)
    160   1.6    lukem 		writec(*l++);
    161   1.1      cgd }
    162   1.1      cgd 
    163   1.6    lukem void
    164   1.6    lukem proll()
    165   1.6    lukem {
    166   1.1      cgd 	if (d0)
    167   1.1      cgd 		swap;
    168   1.1      cgd 	if (cturn == 1)
    169   1.6    lukem 		writel("Red's roll:  ");
    170   1.1      cgd 	else
    171   1.6    lukem 		writel("White's roll:  ");
    172   1.6    lukem 	writec(D0 + '0');
    173   1.6    lukem 	writec('\040');
    174   1.6    lukem 	writec(D1 + '0');
    175   1.1      cgd 	if (tflag)
    176   1.1      cgd 		cline();
    177   1.1      cgd }
    178   1.1      cgd 
    179   1.6    lukem void
    180   1.6    lukem wrint(n)
    181   1.6    lukem 	int     n;
    182   1.1      cgd {
    183   1.6    lukem 	int     i, j, t;
    184   1.1      cgd 
    185   1.6    lukem 	for (i = 4; i > 0; i--) {
    186   1.1      cgd 		t = 1;
    187   1.6    lukem 		for (j = 0; j < i; j++)
    188   1.1      cgd 			t *= 10;
    189   1.6    lukem 		if (n > t - 1)
    190   1.6    lukem 			writec((n / t) % 10 + '0');
    191   1.1      cgd 	}
    192   1.6    lukem 	writec(n % 10 + '0');
    193   1.1      cgd }
    194   1.1      cgd 
    195   1.6    lukem void
    196   1.6    lukem gwrite()
    197   1.6    lukem {
    198   1.6    lukem 	int     r, c;
    199   1.1      cgd 
    200   1.6    lukem 	r = c = 0;
    201   1.6    lukem 	if (tflag) {
    202   1.1      cgd 		r = curr;
    203   1.1      cgd 		c = curc;
    204   1.6    lukem 		curmove(16, 0);
    205   1.1      cgd 	}
    206   1.6    lukem 	if (gvalue > 1) {
    207   1.6    lukem 		writel("Game value:  ");
    208   1.6    lukem 		wrint(gvalue);
    209   1.6    lukem 		writel(".  ");
    210   1.1      cgd 		if (dlast == -1)
    211   1.6    lukem 			writel(color[0]);
    212   1.1      cgd 		else
    213   1.6    lukem 			writel(color[1]);
    214   1.6    lukem 		writel(" doubled last.");
    215   1.6    lukem 	} else {
    216   1.6    lukem 		switch (pnum) {
    217   1.6    lukem 		case -1:	/* player is red */
    218   1.6    lukem 			writel(plred);
    219   1.1      cgd 			break;
    220   1.6    lukem 		case 0:	/* player is both colors */
    221   1.6    lukem 			writel(nocomp);
    222   1.1      cgd 			break;
    223   1.6    lukem 		case 1:	/* player is white */
    224   1.6    lukem 			writel(plwhite);
    225   1.1      cgd 		}
    226   1.1      cgd 	}
    227   1.1      cgd 
    228   1.6    lukem 	if (rscore || wscore) {
    229   1.6    lukem 		writel("  ");
    230   1.1      cgd 		wrscore();
    231   1.1      cgd 	}
    232   1.6    lukem 	if (tflag) {
    233   1.1      cgd 		cline();
    234   1.6    lukem 		curmove(r, c);
    235   1.1      cgd 	}
    236   1.1      cgd }
    237   1.1      cgd 
    238   1.6    lukem int
    239   1.6    lukem quit()
    240   1.6    lukem {
    241   1.1      cgd 
    242   1.6    lukem 	if (tflag) {
    243   1.6    lukem 		curmove(20, 0);
    244   1.1      cgd 		clend();
    245   1.1      cgd 	} else
    246   1.6    lukem 		writec('\n');
    247   1.6    lukem 	writel("Are you sure you want to quit?");
    248   1.6    lukem 	if (yorn(0)) {
    249   1.6    lukem 		if (rfl) {
    250   1.6    lukem 			writel("Would you like to save this game?");
    251   1.1      cgd 			if (yorn(0))
    252   1.1      cgd 				save(0);
    253   1.1      cgd 		}
    254   1.1      cgd 		cturn = 0;
    255   1.1      cgd 		return (1);
    256   1.1      cgd 	}
    257   1.1      cgd 	return (0);
    258   1.1      cgd }
    259   1.1      cgd 
    260   1.6    lukem int
    261   1.6    lukem yorn(special)
    262   1.6    lukem 	char    special;	/* special response */
    263   1.1      cgd {
    264   1.6    lukem 	char    c;
    265   1.6    lukem 	int     i;
    266   1.1      cgd 
    267   1.1      cgd 	i = 1;
    268   1.6    lukem 	while ((c = readc()) != 'Y' && c != 'N') {
    269   1.1      cgd 		if (special && c == special)
    270   1.1      cgd 			return (2);
    271   1.6    lukem 		if (i) {
    272   1.6    lukem 			if (special) {
    273   1.6    lukem 				writel("  (Y, N, or ");
    274   1.6    lukem 				writec(special);
    275   1.6    lukem 				writec(')');
    276   1.1      cgd 			} else
    277   1.6    lukem 				writel("  (Y or N)");
    278   1.1      cgd 			i = 0;
    279   1.1      cgd 		} else
    280   1.6    lukem 			writec('\007');
    281   1.1      cgd 	}
    282   1.1      cgd 	if (c == 'Y')
    283   1.6    lukem 		writel("  Yes.\n");
    284   1.1      cgd 	else
    285   1.6    lukem 		writel("  No.\n");
    286   1.1      cgd 	if (tflag)
    287   1.1      cgd 		buflush();
    288   1.1      cgd 	return (c == 'Y');
    289   1.1      cgd }
    290   1.1      cgd 
    291   1.6    lukem void
    292   1.6    lukem wrhit(i)
    293   1.6    lukem 	int     i;
    294   1.1      cgd {
    295   1.6    lukem 	writel("Blot hit on ");
    296   1.6    lukem 	wrint(i);
    297   1.6    lukem 	writec('.');
    298   1.6    lukem 	writec('\n');
    299   1.1      cgd }
    300   1.1      cgd 
    301   1.6    lukem void
    302   1.6    lukem nexturn()
    303   1.6    lukem {
    304   1.6    lukem 	int     c;
    305   1.1      cgd 
    306   1.1      cgd 	cturn = -cturn;
    307   1.6    lukem 	c = cturn / abs(cturn);
    308   1.1      cgd 	home = bar;
    309   1.6    lukem 	bar = 25 - bar;
    310   1.1      cgd 	offptr += c;
    311   1.1      cgd 	offopp -= c;
    312   1.1      cgd 	inptr += c;
    313   1.1      cgd 	inopp -= c;
    314   1.1      cgd 	Colorptr += c;
    315   1.1      cgd 	colorptr += c;
    316   1.1      cgd }
    317   1.1      cgd 
    318   1.6    lukem void
    319   1.6    lukem getarg(arg)
    320   1.6    lukem 	char ***arg;
    321   1.1      cgd {
    322   1.6    lukem 	char  **s;
    323   1.1      cgd 
    324   1.6    lukem 	/* process arguments here.  dashes are ignored, nbrw are ignored if
    325   1.6    lukem 	 * the game is being recovered */
    326   1.1      cgd 
    327   1.1      cgd 	s = *arg;
    328   1.9  frueauf 	while (*s && s[0][0] == '-') {
    329   1.6    lukem 		switch (s[0][1]) {
    330   1.1      cgd 
    331   1.6    lukem 			/* don't ask if rules or instructions needed */
    332   1.1      cgd 		case 'n':
    333   1.1      cgd 			if (rflag)
    334   1.1      cgd 				break;
    335   1.1      cgd 			aflag = 0;
    336   1.1      cgd 			args[acnt++] = 'n';
    337   1.1      cgd 			break;
    338   1.1      cgd 
    339   1.7  hubertf 			/* player is both red and white */
    340   1.1      cgd 		case 'b':
    341   1.1      cgd 			if (rflag)
    342   1.1      cgd 				break;
    343   1.1      cgd 			pnum = 0;
    344   1.1      cgd 			aflag = 0;
    345   1.1      cgd 			args[acnt++] = 'b';
    346   1.1      cgd 			break;
    347   1.1      cgd 
    348   1.6    lukem 			/* player is red */
    349   1.1      cgd 		case 'r':
    350   1.1      cgd 			if (rflag)
    351   1.1      cgd 				break;
    352   1.1      cgd 			pnum = -1;
    353   1.1      cgd 			aflag = 0;
    354   1.1      cgd 			args[acnt++] = 'r';
    355   1.1      cgd 			break;
    356   1.1      cgd 
    357   1.6    lukem 			/* player is white */
    358   1.1      cgd 		case 'w':
    359   1.1      cgd 			if (rflag)
    360   1.1      cgd 				break;
    361   1.1      cgd 			pnum = 1;
    362   1.1      cgd 			aflag = 0;
    363   1.1      cgd 			args[acnt++] = 'w';
    364   1.1      cgd 			break;
    365   1.1      cgd 
    366   1.6    lukem 			/* print board after move according to following
    367   1.6    lukem 			 * character */
    368   1.1      cgd 		case 'p':
    369   1.1      cgd 			if (s[0][2] != 'r' && s[0][2] != 'w' && s[0][2] != 'b')
    370   1.1      cgd 				break;
    371   1.1      cgd 			args[acnt++] = 'p';
    372   1.1      cgd 			args[acnt++] = s[0][2];
    373   1.1      cgd 			if (s[0][2] == 'r')
    374   1.1      cgd 				bflag = 1;
    375   1.1      cgd 			if (s[0][2] == 'w')
    376   1.1      cgd 				bflag = -1;
    377   1.1      cgd 			if (s[0][2] == 'b')
    378   1.1      cgd 				bflag = 0;
    379   1.1      cgd 			break;
    380   1.1      cgd 
    381   1.1      cgd 		case 't':
    382   1.1      cgd 			if (s[0][2] == '\0') {	/* get terminal caps */
    383   1.1      cgd 				s++;
    384   1.6    lukem 				tflag = getcaps(*s);
    385   1.1      cgd 			} else
    386   1.6    lukem 				tflag = getcaps(&s[0][2]);
    387   1.1      cgd 			break;
    388   1.1      cgd 
    389   1.1      cgd 		case 's':
    390   1.1      cgd 			s++;
    391   1.1      cgd 			/* recover file */
    392  1.11  hubertf 			if (s[0] == NULL) {
    393  1.11  hubertf 				writel("No save file named\n");
    394  1.11  hubertf 				getout(0);
    395  1.11  hubertf 			} else
    396  1.11  hubertf 				recover(s[0]);
    397   1.1      cgd 			break;
    398   1.1      cgd 		}
    399   1.1      cgd 		s++;
    400   1.1      cgd 	}
    401   1.1      cgd 	if (s[0] != 0)
    402   1.1      cgd 		recover(s[0]);
    403   1.1      cgd }
    404   1.1      cgd 
    405   1.6    lukem void
    406   1.6    lukem init()
    407   1.6    lukem {
    408   1.6    lukem 	int     i;
    409   1.6    lukem 
    410   1.1      cgd 	for (i = 0; i < 26;)
    411   1.1      cgd 		board[i++] = 0;
    412   1.1      cgd 	board[1] = 2;
    413   1.1      cgd 	board[6] = board[13] = -5;
    414   1.1      cgd 	board[8] = -3;
    415   1.1      cgd 	board[12] = board[19] = 5;
    416   1.1      cgd 	board[17] = 3;
    417   1.1      cgd 	board[24] = -2;
    418   1.1      cgd 	off[0] = off[1] = -15;
    419   1.1      cgd 	in[0] = in[1] = 5;
    420   1.1      cgd 	gvalue = 1;
    421   1.1      cgd 	dlast = 0;
    422   1.1      cgd }
    423   1.1      cgd 
    424   1.6    lukem void
    425   1.6    lukem wrscore()
    426   1.6    lukem {
    427   1.6    lukem 	writel("Score:  ");
    428   1.6    lukem 	writel(color[1]);
    429   1.6    lukem 	writec(' ');
    430   1.6    lukem 	wrint(rscore);
    431   1.6    lukem 	writel(", ");
    432   1.6    lukem 	writel(color[0]);
    433   1.6    lukem 	writec(' ');
    434   1.6    lukem 	wrint(wscore);
    435   1.1      cgd }
    436   1.1      cgd 
    437   1.6    lukem void
    438   1.6    lukem fixtty(t)
    439   1.6    lukem 	struct termios *t;
    440   1.1      cgd {
    441   1.1      cgd 	if (tflag)
    442   1.1      cgd 		newpos();
    443   1.1      cgd 	buflush();
    444   1.6    lukem 	if (tcsetattr(0, TCSADRAIN, t) < 0)
    445   1.1      cgd 		errexit("fixtty");
    446   1.1      cgd }
    447   1.1      cgd 
    448   1.6    lukem void
    449   1.6    lukem getout(dummy)
    450  1.12      jsm 	int     dummy __attribute__((__unused__));
    451   1.6    lukem {
    452   1.1      cgd 	/* go to bottom of screen */
    453   1.6    lukem 	if (tflag) {
    454   1.6    lukem 		curmove(23, 0);
    455   1.1      cgd 		cline();
    456   1.1      cgd 	} else
    457   1.6    lukem 		writec('\n');
    458   1.1      cgd 
    459   1.1      cgd 	/* fix terminal status */
    460   1.6    lukem 	fixtty(&old);
    461   1.4      cgd 	exit(0);
    462   1.1      cgd }
    463   1.1      cgd 
    464   1.6    lukem void
    465   1.6    lukem roll()
    466   1.6    lukem {
    467   1.6    lukem 	char    c;
    468   1.6    lukem 	int     row;
    469   1.6    lukem 	int     col;
    470   1.6    lukem 
    471   1.6    lukem 	row = col = 0;
    472   1.6    lukem 	if (iroll) {
    473   1.6    lukem 		if (tflag) {
    474   1.1      cgd 			row = curr;
    475   1.1      cgd 			col = curc;
    476   1.6    lukem 			curmove(17, 0);
    477   1.1      cgd 		} else
    478   1.6    lukem 			writec('\n');
    479   1.6    lukem 		writel("ROLL: ");
    480   1.1      cgd 		c = readc();
    481   1.6    lukem 		if (c != '\n') {
    482   1.1      cgd 			while (c < '1' || c > '6')
    483   1.1      cgd 				c = readc();
    484   1.6    lukem 			D0 = c - '0';
    485   1.6    lukem 			writec(' ');
    486   1.6    lukem 			writec(c);
    487   1.1      cgd 			c = readc();
    488   1.1      cgd 			while (c < '1' || c > '6')
    489   1.1      cgd 				c = readc();
    490   1.6    lukem 			D1 = c - '0';
    491   1.6    lukem 			writec(' ');
    492   1.6    lukem 			writec(c);
    493   1.6    lukem 			if (tflag) {
    494   1.6    lukem 				curmove(17, 0);
    495   1.1      cgd 				cline();
    496   1.6    lukem 				curmove(row, col);
    497   1.1      cgd 			} else
    498   1.6    lukem 				writec('\n');
    499   1.1      cgd 			return;
    500   1.1      cgd 		}
    501   1.6    lukem 		if (tflag) {
    502   1.6    lukem 			curmove(17, 0);
    503   1.1      cgd 			cline();
    504   1.6    lukem 			curmove(row, col);
    505   1.1      cgd 		} else
    506   1.6    lukem 			writec('\n');
    507   1.1      cgd 	}
    508   1.6    lukem 	D0 = rnum(6) + 1;
    509   1.6    lukem 	D1 = rnum(6) + 1;
    510   1.1      cgd 	d0 = 0;
    511   1.1      cgd }
    512