Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!utgpu!water!watmath!clyde!rutgers!mit-eddie!uw-beaver!tektronix!tekgen!tekred!games-request
From: games-request@tekred.UUCP
Newsgroups: comp.sources.games
Subject: v01i057: sdi - missle command game for Suns, Part04/06
Message-ID: <1316@tekred.TEK.COM>
Date: Wed, 17-Jun-87 14:33:25 EDT
Article-I.D.: tekred.1316
Posted: Wed Jun 17 14:33:25 1987
Date-Received: Fri, 19-Jun-87 05:43:24 EDT
Sender: billr@tekred.TEK.COM
Lines: 1620
Approved: billr@tekred.TEK.COM
Submitted by: Mark Weiser
Comp.sources.games: Volume 1, Issue 57
Archive-name: sdi/Part04
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh city_icon1.h <<'END_OF_city_icon1.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x007F,0xFF00,0x0000,0x0000,0x1F83,0xC0FC,0x0000,
X 0x0001,0xE003,0x6003,0xC000,0x000E,0x0003,0x3000,0x3800,
X 0x0070,0x0003,0x3000,0x0700,0x0180,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
END_OF_city_icon1.h
if test 2274 -ne `wc -c city_icon3.h <<'END_OF_city_icon3.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0800,0x007F,0xFF00,0x0000,0x0400,0x1F83,0xC0FC,0x0000,
X 0x0201,0xE003,0x6003,0xC000,0x010E,0x0003,0x3000,0x3800,
X 0x0070,0x0003,0x3000,0x0700,0x0180,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon3.h
if test 2171 -ne `wc -c city_icon4.h <<'END_OF_city_icon4.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0800,0x007F,0xFF00,0x0000,0x0410,0x1F83,0xC0FC,0x0000,
X 0x0221,0xE003,0x6003,0xC000,0x01EE,0x0003,0x3000,0x3800,
X 0x0FF0,0x0003,0x3000,0x0700,0x0380,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon4.h
if test 2171 -ne `wc -c city_icon5.h <<'END_OF_city_icon5.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x007F,0xFF00,0x0003,0x0000,0x1F83,0xC0FC,0x0004,
X 0x0001,0xE003,0x6003,0xC000,0x000E,0x0003,0x3000,0x3800,
X 0x0070,0x0003,0x3000,0x0700,0x0180,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon5.h
if test 2171 -ne `wc -c city_icon6.h <<'END_OF_city_icon6.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x007F,0xFF00,0x0003,0x0000,0x1F83,0xC0FC,0x0004,
X 0x0001,0xE003,0x6003,0xC008,0x000E,0x0003,0x3000,0x3810,
X 0x0070,0x0003,0x3000,0x0700,0x0180,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon6.h
if test 2171 -ne `wc -c city_icon7.h <<'END_OF_city_icon7.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x007F,0xFF00,0x0003,0x0000,0x1F83,0xC0FC,0x0004,
X 0x0001,0xE003,0x6003,0xC008,0x000E,0x0003,0x3000,0x3810,
X 0x0070,0x0003,0x3000,0x0720,0x0180,0x0003,0x3000,0x00C0,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon7.h
if test 2171 -ne `wc -c city_icon8.h <<'END_OF_city_icon8.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x007F,0xFF00,0x0003,0x0000,0x1F83,0xC0FC,0x0204,
X 0x0001,0xE003,0x6003,0xC308,0x000E,0x0003,0x3000,0x3990,
X 0x0070,0x0003,0x3000,0x07E0,0x0180,0x0003,0x3000,0x00FE,
X 0x0600,0x0003,0x3000,0x0030,0x1BC0,0x0003,0x3000,0x000C,
X 0x6660,0x0003,0x6000,0x03F3,0x8600,0x0003,0xC000,0x00C0,
X 0x0300,0x0000,0x0000,0x00C0,0x00C0,0x0000,0x0000,0x00C0,
X 0x0060,0x0000,0x0000,0x00C0,0x0660,0x0000,0x0000,0x00C0,
X 0x0660,0x0000,0x0000,0x00C0,0x03C0,0x0000,0x0080,0x00C0,
X 0x0000,0x0000,0x0080,0x03F0,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xF1FF,0xFCFF,0xFFEB,0xFBE7,0x9FFB,0x7CFF,0xFFEF,
X 0x6FFF,0xFFFF,0x7FFF,0xBEF9,0xFB99,0x7FCF,0xFAF3,0xB7DF,
X 0xDFE2,0xB9F6,0xF973,0xAFD9,0x7CFA,0xBFC7,0xFBFF,0x9CDF,
X 0xEFFA,0xBFB7,0x7BFF,0xAFD9,0xFFFA,0xB3D7,0xFBFF,0xB7FF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_city_icon8.h
if test 2171 -ne `wc -c default_city.h <<'END_OF_default_city.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0080,0x0000,
X 0x0000,0x0000,0x0080,0x0000,0x0000,0x0000,0x0080,0x0000,
X 0x0F80,0x0000,0x01C0,0x0000,0x0B80,0x0000,0x01C0,0x0000,
X 0x0E80,0x0000,0x03E0,0x0000,0x0F80,0x0000,0x03E0,0x0000,
X 0x0B80,0x0000,0x0FFC,0x0000,0x0E80,0x0000,0x0924,0x0000,
X 0x0F80,0x0000,0x0924,0x0006,0x0D80,0x0000,0x0FFC,0x0006,
X 0x0F80,0x0000,0x09E4,0x0006,0x0B80,0x0000,0x09E4,0x0006,
X 0x0F80,0x0F00,0x0FFD,0xFFC6,0x0E80,0x090F,0x8F3D,0x54C6,
X 0x0F80,0x0F0A,0x8F3D,0xFFC6,0x0F80,0x090A,0x8FFD,0x6C46,
X 0x0880,0x0F0F,0x89FD,0xFFC6,0x0F80,0x090B,0x89FD,0x294F,
X 0x0E80,0x0F0B,0x8F25,0xFFC9,0x0F80,0x0F0E,0x8F25,0x544F,
X 0x0D80,0x0F0E,0x8FFD,0xFFC9,0x0FFC,0x090F,0x8FFD,0x964F,
X 0x0F9C,0x0F0F,0x8FFD,0xFFCF,0x0FE4,0x0F0E,0x8FFD,0x944F,
X 0x0BFC,0x090E,0x89E5,0xFFC9,0x0F9C,0x3F8F,0x89E5,0x48CF,
X 0x0DFC,0x208E,0xFFFD,0xFFCB,0x0FE4,0x3F8E,0xFF25,0x594F,
X 0x0E9C,0xFF8F,0xDF25,0xFFCD,0x0FFC,0x808A,0xBFFD,0x5ACF,
X 0xCEE4,0xFF8A,0xF9FD,0xFFF9,0xCF9C,0xFF8F,0xD9FF,0xB95F,
X 0x8FE4,0xFFFF,0xBFFF,0xFFD9,0xCEFC,0x80FB,0xFF3F,0x3CDF,
X 0xCBFF,0xFFBB,0xFF3F,0xFFF9,0x4FE7,0x80FE,0xFFFF,0x5A7F,
X 0xCF9E,0xFFFE,0xDFE7,0xFFEB,0xF9FF,0xFFEF,0xBFE7,0xB96F,
X 0xDF9F,0xFFFE,0xFFFF,0xFFEB,0xFBE7,0x80BE,0xDFE7,0x67EF,
X 0x6FFD,0xFFBB,0xBFE7,0xFEF9,0xFB9F,0x80FB,0xFFFF,0x1FDF,
X 0xDFE7,0xFFFF,0xD9FF,0xFFD9,0x7CFE,0xF0EF,0xB9FF,0x7CDF,
X 0xEFFF,0xFFBF,0xFFFF,0xFFD9,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
X 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_default_city.h
if test 2171 -ne `wc -c game_over.c <<'END_OF_game_over.c'
X/********************************** game_over.c **********************/
X#include
X#include "sdi.h"
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
X/*
X * This file is responsible for flashing my face on the screen if the game ends
X * and 'non-stop' is not set.
X */
X
X/* ORIGSIZE comes in from a -D in the makefile */
X#define NUMBER 10
X#define BORDERSIZE 64
X#define SIZE (ORIGSIZE+BORDERSIZE)
X
X
Xstatic short message_data[] = {
X#include "bigmessage.h"
X};
Xmpr_static(origmessagepr, ORIGSIZE, ORIGSIZE, 1, message_data);
X
X/*
X * Routine to flash my face on the screen.
X * The pr_destroy order below is tricky, but there is no storage leak.
X */
X
Xdo_game_over()
X{
X int center_x = max_x/2, center_y = max_y/2, circlesize;
X struct pixrect *circlepr;
X struct pixrect *messagepr;
X struct rect r;
X int i;
X struct pixwin *pw_a = citypw,
X *pw_b = launchpw;
X
X messagepr = make_circle(SIZE);
X pr_rop(messagepr, BORDERSIZE/2, BORDERSIZE/2, ORIGSIZE, ORIGSIZE,
X PIX_SRC, &origmessagepr, 0, 0);
X
X pw_batch_on(launchpw);
X pw_batch_on(citypw);
X for(i=0; i 0)
X pr_destroy(circlepr);
X circlesize = SIZE*(i+1)/(NUMBER);
X circlepr = make_circle(circlesize);
X do_picture(circlepr, circlesize, center_x, center_y, messagepr, pw_a, pw_b);
X pw_show(launchpw);
X pw_show(citypw);
X }
X#ifdef ORIG
X for(i=NUMBER-1; i > 0; i--) {
X /* clear the old circle (uses old pr and circlesize) */
X do_picture(circlepr, circlesize, center_x, center_y, NULL, pw_a, pw_b);
X pr_destroy(circlepr);
X /* make the new circle */
X circlesize = SIZE*(i)/(NUMBER);
X circlepr = make_circle(circlesize);
X do_picture(circlepr, circlesize, center_x, center_y, messagepr, pw_a, pw_b);
X pw_show(launchpw);
X pw_show(citypw);
X }
X do_picture(circlepr, circlesize, center_x, center_y, NULL, pw_a, pw_b);
X#else
X for (i=0; i < (max_y+SIZE/2); i += 10) {
X do_picture(circlepr, circlesize, center_x, center_y+i, messagepr, pw_a, pw_b);
X pw_show(launchpw);
X pw_show(citypw);
X }
X#endif
X pr_destroy(circlepr);
X pw_batch_off(citypw);
X pw_batch_off(launchpw);
X }
X
X/*
X * Put up one instance of the final picture. My, stenciling is slow.
X */
Xdo_picture(pr, size, x, y, messagepr, pw_a, pw_b)
Xstruct pixrect *pr, *messagepr;
Xint size;
Xstruct pixwin *pw_a, *pw_b;
X{
X pw_stencil(pw_a,
X x - size/2, y - size/2,
X size, size, PIX_SRC,
X pr, 0, 0,
X messagepr, SIZE/2 - size/2, SIZE/2 - size/2);
X pw_stencil(pw_b,
X x - size/2, y - size/2,
X size, size, PIX_SRC,
X pr, 0, 0,
X messagepr, SIZE/2 - size/2, SIZE/2 - size/2);
X}
END_OF_game_over.c
if test 2819 -ne `wc -c genmessage.c <<'END_OF_genmessage.c'
X#include
X#define NULL 0
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
X/*
X * Real quick and dirty hack to enlarge an image. Reads and outputs
X * in C-style pixrect form (human readable, #includable). Takes
X * two arguments: the file to be enlarged, and the integer enlargement.
X *
X * This is not used during the game itself (too slow), but run at
X * 'make' time to constuct the popup face for the end of game.
X */
Xshort *in;
X/* size of input image */
X#define SIZE 64
X/* how much larger to make each dimension */
X#define MAXMULT 16
Xint MULT;
X
X/*
X * The theory is, by changing only 'pattern' and 'shift' to reflect the
X * bit numbering of the target machine, this code will work for big
X * and little endians.
X */
X
Xstatic short pattern[] = {
X 0x8000, 0x4000, 0x2000, 0x1000, 0x800, 0x400, 0x200, 0x100,
X 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1
X };
X
Xstatic short shift[] = {
X 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
X };
X
Xstatic short out[SIZE*SIZE*MAXMULT*MAXMULT/16 + 1];
X
X
Xmain(argc, argv)
Xchar **argv;
X{
X int row, col, val, i, j;
X struct pixrect *pr, *icon_load_mpr();
X
X char error_msg[256];
X if (argc != 3) {
X printf("Usage: genmessage file factor\n");
X exit(1);
X }
X argc--; argv++;
X if ((pr = icon_load_mpr(*argv, error_msg)) == NULL) {
X printf("Could not get file '%s'.\n", *argv);
X printf("%s",error_msg);
X }
X in = mpr_d(pr)->md_image;
X
X argc--; argv++;
X MULT = atol(*argv);
X if (MULT > MAXMULT) {
X printf("Factor too big.\n");
X exit(1);
X }
X
X printf("/* Format_version=1, Width=%d, Height=%d, Depth=1, Valid_bits_per_item=16\n */\n", SIZE*MULT, SIZE*MULT);
X for (row = 0; row < SIZE; row++) {
X for (col = 0; col < SIZE; col++) {
X val = bitval(in, row*SIZE + col);
X for (i=0; i> shift[l%16]) & 0x1;
X}
END_OF_genmessage.c
if test 2580 -ne `wc -c global.c <<'END_OF_global.c'
X/********************************** global.c ***********************/
X#include "sdi.h"
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
Xint ballistic_delay = 4;
XPanel_item ballistic_item;
Xstruct pixfont *bigfont, *buttonfont; /* use 'struct pixfont' for 3.0 compatibility */
Xint blast_count = 0;
Xlong blast_delay = 150000;
Xint burst_distance = 32;
Xfloat carryover_divisor = 1.0;
Xint city_fd;
Xint cursor_type = 0;
Xint launch_fd;
XCanvas citycanvas;
XFrame cityframe;
XPixwin *citypw;
Xint continuous;
XFrame controlframe;
Xfloat foe_divisor = 2.0;
Xint foe_factor = 5;
XPanel_item foe_ground_item;
XPanel_item foe_item;
Xint foe_value = 5;
Xstruct pixfont *font; /* struct used for 3.0 compatibility */
Xint gamemaster = 0;
Xint field_margin = 32;
XPanel_item interceptor_item;
XPanel_item laser_item;
Xint launch_delay = 4;
XCanvas launchcanvas;
XFrame launchframe;
XPixwin *launchpw;
XPanel_item level_item;
Xint max_x = 440;
Xint max_y = 250;
Xint max_missile_speed = 25;
Xint min_missile_speed = 7;
Xint missile_count = 0;
XPixwin *need_a_bell = NULL;
XPanel_item next_round_item;
Xint num_cities = 0;
Xchar *panel_common[] = {
X (char *)PANEL_VALUE, (char *)1,
X (char *)PANEL_MIN_VALUE, (char *)0,
X (char *)PANEL_MAX_VALUE, (char *)0,
X (char *)PANEL_VALUE, (char *)0,
X (char *)PANEL_SHOW_RANGE, (char *)FALSE,
X (char *)PANEL_SHOW_VALUE, (char *)TRUE,
X (char *)PANEL_EVENT_PROC, (char *)no_events,
X (char *)PANEL_SLIDER_WIDTH, (char *)150,
X (char *)0 };
Xint restoring_game = 0;
XPanel_item resume_item;
XPanel_item rock_item;
Xint running = 0;
XPanel_item save_file_item;
Xchar save_file_name[128] = "sdi_saved_game";
Xstruct scores sc[NUM_SCORES+1],
X *sc_end = &sc[NUM_SCORES];
Xchar *scorefile = NULL;
XPanel_item score_item;
XPanel_item skill_item;
Xint starting_icon = 1;
Xint starting_icon_time = 5;
Xint starting_skill = 0;
XPanel_item suspend_item;
Xint suspended = 0;
Xint time_to_play = 0;
XPanel_item total_foe_item;
Xint total_cities_lost;
Xchar user_name[128] = "(nobody)";
XPanel_item user_name_item;
X
Xstruct circ *lasercircles;
Xstruct circ *laserkillcircles;
Xstruct circ *bigblastcircles;
Xstruct circ *littleblastcircles;
Xstruct circ *blastkillcircles;
Xstruct circ *citykillcircles;
Xstruct circ *littlerockcircles;
Xstruct circ *bigrockcircles;
X
Xstruct pixrect **blankcircles;
END_OF_global.c
if test 2614 -ne `wc -c laser.c <<'END_OF_laser.c'
X/****************************** laser.c *******************************/
X#include
X#include
X#include "sdi.h"
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
X/*
X * All laser-specific code is here.
X */
X
X/* Kill up to this many missiles with one laser blast */
X#define MAX_LASERS 6
X
X/* A missile must be lasered for this many time steps to kill it */
X#define LASER_KILL_TIME 3
X
X/* A laser kill is worth this many points in the launch window. */
Xstatic short laser_value = 50;
X
Xint find_lasers();
X
Xstatic struct laser {
X Pixwin *pw;
X short x, y;
X short count, maxlasers;
X short oldx[MAX_LASERS];
X short oldy[MAX_LASERS];
X struct missile *ptr[MAX_LASERS];
X struct laser *next;
X };
X
Xstruct laser *l_head = NULL;
X
X/*
X * Initialize a linked list of lasers. Free any already
X * on there.
X */
Xinit_laser()
X{
X struct laser *tmp;
X while (l_head != NULL) {
X tmp = l_head;
X l_head = l_head->next;
X free(tmp);
X }
X}
X
X/* communication into 'find_lasers' */
Xstatic struct blast fake_bid;
Xstatic struct laser *current_l;
Xstatic int global_laser_count;
X
X/*
X * Start a laser blast at position x,y in pixwin pw.
X */
Xstart_laser(x, y, pw, laser_count, laser_range)
Xint x, y;
XPixwin *pw;
X{
X struct blast *bid = &fake_bid;
X struct laser *l = (struct laser *)calloc(sizeof(struct laser), 1);
X struct missile *mptr;
X int i;
X /* Create a fake bid to use the intersection code. */
X bid->x = x;
X bid->y = y;
X bid->width = laser_range;
X update_blast_rect(bid);
X /* initialize the laser structure */
X l->pw = pw;
X l->count = 0;
X l->maxlasers = 0;
X l->x = x;
X l->y = y;
X l->next = l_head;
X l_head = l;
X current_l = l;
X global_laser_count = laser_count;
X doto_missiles(find_lasers);
X mptr = l->ptr[0];
X for (i = 0; i < l->maxlasers; i += 1) {
X l->oldx[i] = l->ptr[i]->x;
X l->oldy[i] = l->ptr[i]->y;
X }
X start_blast(x, y, 0, 0, pw, lasercircles);
X}
X
X/*
X * Helper routine passed into 'doto_missiles'. Uses the global variables
X * 'current_l' and 'fake_bid' to try to find MAX_LASERS missiles within the
X * range of this laser.
X */
Xfind_lasers(mid)
Xstruct missile *mid;
X{
X register current_count = current_l->maxlasers;
X if (current_count < global_laser_count &&
X single_intersect(&fake_bid, mid) &&
X mid->pw == current_l->pw) {
X current_l->ptr[current_count] = mid;
X mid->refs += 1;
X current_l->maxlasers += 1;
X }
X return current_count >= global_laser_count;
X}
X
X/*
X * This routine is called once each game timestep to update the status
X * of all lasers.
X */
Xdoto_lasers()
X{
X /* bump the count of each laser.
X for each whose count is >= LASER_KILL_TIME, kill its old arcs, start
X a small blast at each missiles current position, and free the laser.
X */
X struct laser *lptr, *old_lptr = NULL;
X int i;
X lptr = l_head;
X while (lptr != NULL) {
X lptr->count += 1;
X for (i=0; i < lptr->maxlasers; i += 1) {
X if (lptr->count > 1) {
X /* remove old laser path */
X pw_vector(lptr->pw, lptr->x, lptr->y,
X lptr->oldx[i], lptr->oldy[i],
X PIX_NOT(PIX_SRC), 1);
X }
X if (lptr->count > LASER_KILL_TIME) {
X /* this laser is all done */
X destroy_missile(lptr->ptr[i]);
X if (lptr->ptr[i]->y >= 0) {
X /* blast only if the missile is within range */
X start_blast(lptr->ptr[i]->x, lptr->ptr[i]->y,
X 0, 0, lptr->pw, laserkillcircles);
X }
X if (lptr->pw == citypw)
X bump_score(laser_value/5);
X else bump_score(laser_value);
X if (old_lptr == NULL) {
X /* at the head */
X l_head = lptr->next;
X } else {
X old_lptr->next = lptr->next;
X }
X } else {
X /* track the missile */
X lptr->oldx[i] = lptr->ptr[i]->x;
X lptr->oldy[i] = lptr->ptr[i]->y;
X pw_vector(lptr->pw, lptr->x, lptr->y,
X lptr->ptr[i]->x, lptr->ptr[i]->y, PIX_SRC, 1);
X
X old_lptr = lptr;
X }
X } /* end of for */
X lptr = lptr->next;
X } /* end of while */
X}
X
END_OF_laser.c
if test 4112 -ne `wc -c laserkill.h <<'END_OF_laserkill.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0007,0xF000,0x0000,0x0000,0x0038,0x0E00,0x0000,
X 0x0000,0x00C0,0x0580,0x0000,0x0000,0x0100,0x0440,0x0000,
X 0x0000,0x0200,0x0820,0x0000,0x0000,0x0400,0x1810,0x0000,
X 0x0000,0x0C00,0x5008,0x0000,0x0000,0x1700,0x500C,0x0000,
X 0x0000,0x11C0,0x7034,0x0000,0x0000,0x2030,0x4262,0x0000,
X 0x0000,0x2008,0xCEC2,0x0000,0x0000,0x2004,0x8B02,0x0000,
X 0x0000,0x407E,0xB001,0x0000,0x0000,0x4038,0xA001,0x0000,
X 0x0000,0x4007,0xC001,0x0000,0x0000,0x4001,0xFF01,0x0000,
X 0x0000,0x4007,0x8201,0x0000,0x0000,0x4018,0x87FF,0x0000,
X 0x0000,0x4061,0x0001,0x0000,0x0000,0x2081,0x0002,0x0000,
X 0x0000,0x20E1,0x2002,0x0000,0x0000,0x2019,0x6002,0x0000,
X 0x0000,0x1061,0xA004,0x0000,0x0000,0x10C0,0x2004,0x0000,
X 0x0000,0x0B00,0x2008,0x0000,0x0000,0x0600,0x2010,0x0000,
X 0x0000,0x0200,0x2020,0x0000,0x0000,0x0100,0x2040,0x0000,
X 0x0000,0x00C0,0x6180,0x0000,0x0000,0x0038,0x0E00,0x0000,
X 0x0000,0x0007,0xF000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_laserkill.h
if test 2171 -ne `wc -c menu.c <<'END_OF_menu.c'
X#include
X#include
X#include "walkmenu_impl.h"
X#include "image_impl.h"
X
X#define MAX_ITEMS 32
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
X/*
X * Pie menu code -- patent applied for.
X */
X
X/*
X * The front-end routines to make pie-menus look like the normal
X * Sun window library (at least a little bit).
X */
X
X
Xvoid
Xpie_menu_set(m, arg)
Xstruct menu *m;
Xint arg;
X{
X char **argptr = &(char *)arg;
X pie_menu_set_internal(m, argptr);
X}
X
Xpie_menu_item_set(mi, arg)
Xstruct menu_item *mi;
Xint arg;
X{
X char **argptr = &(char *)arg;
X pie_menu_item_set_internal(mi, argptr);
X}
X
Xstruct menu *
Xpie_menu_create(arg)
Xint arg;
X{
X char **argptr = &(char *)arg;
X struct menu *m;
X m = (struct menu *)calloc(sizeof(struct menu),1);
X m->item_list = (struct menu_item **)calloc(sizeof(struct menu_item *), MAX_ITEMS);
X m->max_nitems = MAX_ITEMS;
X pie_menu_set_internal(m, argptr);
X return m;
X}
X
Xstruct menu_item *
Xpie_menu_create_item(arg)
Xint arg;
X{
X char **argptr = &(char *)arg;
X struct menu_item *mi;
X mi = (struct menu_item *)calloc(sizeof(struct menu_item),1);
X mi->image = (struct image *)calloc(sizeof(struct image),1);
X pie_menu_item_set_internal(mi, argptr);
X return mi;
X}
X
Xpie_menu_set_internal(m, argptr)
Xstruct menu *m;
Xchar **argptr;
X{
X while (*argptr != 0) {
X switch(*argptr) {
X case MENU_APPEND_ITEM: {
X if (m->nitems >= (m->max_nitems-1))
X {
X fprintf("Too many items in a pie menu.\n");
X abort();
X }
X m->item_list[m->nitems] = (struct menu_item *)(*(argptr+1));
X ((struct menu_item *)m->item_list[m->nitems])->parent = m;
X m->nitems += 1;
X argptr += 2; break;
X }
X case MENU_NOTIFY_PROC: {
X (caddr_t)m->notify_proc = (caddr_t)(*(argptr+1));
X argptr += 2; break;
X }
X default: {
X fprintf(stderr, "Unexpected item in pie_menu_set_internal.\n");
X abort();
X break;
X }
X }
X }
X}
X
Xpie_menu_item_set_internal(mi, argptr)
Xstruct menu_item *mi;
Xchar **argptr;
X{
X while (*argptr != 0) {
X switch(*argptr) {
X case MENU_IMAGE: {
X mi->image->pr = (struct pixrect *)*(argptr+1);
X argptr += 2; break;
X }
X case MENU_STRING: {
X mi->image->string = (char *)*(argptr+1);
X argptr += 2; break;
X }
X case MENU_PULLRIGHT: {
X mi->pullright = TRUE;
X mi->value = (caddr_t)*(argptr+1);
X ((struct menu *)mi->value)->parent = mi;
X argptr += 2; break;
X }
X case MENU_RELEASE: {
X mi->free_item = TRUE;
X argptr += 1; break;
X }
X case MENU_RELEASE_IMAGE: {
X mi->image->free_image = TRUE;
X argptr += 1; break;
X }
X case MENU_CLIENT_DATA: {
X mi->client_data = (caddr_t)*(argptr+1);
X argptr += 2; break;
X }
X default: {
X fprintf(stderr, "Unexpected item in pie_menu_item_set_internal.\n");
X abort();
X break;
X }
X }
X }
X}
X
Xpie_menu_destroy(m)
Xstruct menu *m;
X{
X int i;
X if (m == NULL) return;
X for (i=0; initems; i++) {
X if (m->item_list[i]->free_item) {
X free(m->item_list[i]->image);
X free(m->item_list[i]);
X }
X }
X free(m->item_list);
X free(m);
X}
X
Xcaddr_t
Xpie_menu_get(m, arg)
Xstruct menu *m;
XMenu_attribute arg;
X{
X switch(arg) {
X case MENU_CLIENT_DATA: {
X return (caddr_t) m->client_data;
X break;
X }
X default: {
X fprintf(stderr, "Unexpected item in pie_menu_get.\n");
X abort();
X break;
X }
X }
X}
X
Xcaddr_t
Xpie_menu_item_get(mi, arg)
Xstruct menu_item *mi;
XMenu_attribute arg;
X{
X switch(arg) {
X case MENU_CLIENT_DATA: {
X return (caddr_t) mi->client_data;
X break;
X }
X default: {
X fprintf(stderr, "Unexpected item in pie_menu_item_get.\n");
X abort();
X break;
X }
X }
X}
X
Xcaddr_t
Xpie_menu_show(m, w, e, f, s)
Xstruct menu *m;
XWindow w;
XEvent *e;
Xint (*f)();
Xchar *s;
X{
X struct menu_item *rval;
X rval = (struct menu_item *)menu_track(m, w, e, f, s);
X}
END_OF_menu.c
if test 3990 -ne `wc -c missilekill.h <<'END_OF_missilekill.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0C00,0x0080,0x0000,0x0000,0x0000,0x0100,0x0000,
X 0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x1000,0x0000,0x0000,0x0000,0x0000,0x0800,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x8000,0x0000,0x2000,0x0000,
X 0x0000,0x1000,0x0000,0x0080,0x0000,0x0000,0x0000,0x0000,
X 0x2000,0x0000,0x0020,0x0200,0x0000,0x1000,0x0000,0x0000,
X 0x0000,0x0000,0x8080,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0400,0x0040,0x0080,0x0000,0x0000,0x0800,0x0200,0x4000,
X 0x0000,0x0021,0x0200,0x0000,0x0080,0x0000,0x0800,0x0000,
X 0x0000,0x0821,0x1004,0x0000,0x0000,0x0000,0x0000,0x0000,
X 0x0000,0x0820,0x2008,0x0000,0x0008,0x0402,0x2000,0x0000,
X 0x0000,0x0210,0x0010,0x0000,0x0001,0x0002,0x4040,0x0000,
X 0x0000,0x1090,0x0280,0x0000,0x0000,0x4842,0x8200,0x0200,
X 0x0000,0x00AA,0x0400,0x0800,0x0000,0x026F,0x0A00,0x4000,
X 0x0000,0x0122,0x48B2,0x0000,0x00A4,0x824E,0xE000,0x8000,
X 0x0000,0x08A5,0x0000,0x0000,0x0000,0x023E,0xD200,0x0000,
X 0x0000,0x54F3,0xA400,0x0000,0x0000,0x002D,0x0180,0x0020,
X 0x0020,0x014D,0x5429,0x2002,0x0000,0x0521,0x0802,0x4000,
X 0x0000,0x1826,0xA000,0x0000,0x0000,0x0000,0x1000,0x0000,
X 0x0001,0x4031,0x8800,0x0000,0x0000,0x0040,0x8200,0x0000,
X 0x0008,0x0009,0x0000,0x0000,0x0000,0x0200,0x2040,0x0000,
X 0x0040,0x0008,0x8020,0x0000,0x0000,0x0608,0x9010,0x0000,
X 0x0800,0x0008,0x0000,0x0000,0x0000,0x0000,0x0008,0x0000,
X 0x0000,0x0000,0x0001,0x0000,0x0000,0x1008,0x2100,0x0000,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0040,0x0000,
X 0x0001,0x0000,0x1000,0x0800,0x0000,0x0008,0x0000,0x0000,
X 0x0000,0x0000,0x0800,0x0100,0x0000,0x0008,0x0000,0x0000,
X 0x0008,0x0000,0x0004,0x0000,0x0000,0x0000,0x0200,0x0000,
X 0x0000,0x0008,0x0200,0x0010,0x0020,0x0008,0x0000,0x0008,
X 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1004,
X 0x0080,0x0000,0x0000,0x0800,0x0080,0x0000,0x0000,0x0400
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_missilekill.h
if test 2171 -ne `wc -c notify.c <<'END_OF_notify.c'
X/************************************ notify.c *************************/
X#include
X#include
X#include
X#include "sdi.h"
X
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever on Suns is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible. Use of this code
X * in other products is reserved to me--I'm working on Mac and IBM versions.
X */
X
X/*
X * notifier and timer specific code, including some input handling hacks.
X */
X
X/*
X * Begin a series of minor kludges to get good response time at
X * heavy screen loads without running into various SunView bugs
X * involving input notification and non-blocking I/O. There is
X * probably a bit of overkill here, but the obvious solution
X * (turn on non-blocking once in 'main') does not work.
X */
X
X/*
X * See if any mouse clicks have occured.
X */
Xcheckinput()
X{
X input_helper(city_fd, citycanvas);
X input_helper(launch_fd, launchcanvas);
X}
X
X/*
X * Without blocking, exhaust all input on file descripter 'fd' and
X * send it to window 'w'.
X */
Xinput_helper(fd, w)
XWindow w;
X{
X Event event;
X int old_flags = fcntl(fd, F_GETFL);
X/*
X * Have to turn FNDELAY on and off because SunView really doesn't
X * work well with it on under heavy input load. The result is that
X * we do too much work under light load (when we can afford it), and
X * much less work under heavy load (when it makes sense). A good balance.
X */
X fcntl(fd, F_SETFL, old_flags | FNDELAY);
X while(! input_readevent(fd, &event)) {
X canvas_event(w, &event);
X event_x(&event) = event_x(&event)-FIELD_MARGIN;
X event_y(&event) = event_y(&event)-FIELD_MARGIN;
X main_event_proc(w, &event, 0);
X }
X fcntl(fd, F_SETFL, old_flags);
X}
X
X/*
X * Receive notifications of pending input.
X */
XNotify_value
Xinput_notify(me, fd)
X{
X if (fd == city_fd) {
X input_helper(city_fd, citycanvas);
X } else if (fd == launch_fd) {
X input_helper(launch_fd, launchcanvas);
X }
X}
X
X/*
X * Schedule things from input clients before timers. The effect
X * is to get all the input before starting to update the screen.
X*/
XNotify_value
Xscheduler(n, clients)
XNotify_client *clients;
X{
X int i;
X for (i=0; i < n; i += 1) {
X if (
X clients[i] == (Notify_client)launchcanvas ||
X clients[i] == (Notify_client)citycanvas ||
X clients[i] == (Notify_client)launchframe ||
X clients[i] == (Notify_client)cityframe
X ) {
X notify_client(clients[i]);
X clients[i] = NOTIFY_CLIENT_NULL;
X }
X }
X for (i=0; i < n; i += 1) {
X if (clients[i] != NOTIFY_CLIENT_NULL) {
X notify_client(clients[i]);
X clients[i] = NOTIFY_CLIENT_NULL;
X }
X }
X return NOTIFY_DONE;
X}
X
X/*
X * Call procedure f in a little while.
X */
X
Xstruct call_wrapper {
X /* Dynamically allocating a wrapper ensures unique notifier id's. */
X void (*f)();
X}
X
Xdo_with_delay(f, secs, usecs)
Xvoid (*f)();
Xint secs, usecs;
X{
X Notify_value do_the_call();
X struct call_wrapper *w;
X struct itimerval timer;
X
X /* Sigh, so much work just to wait a bit before starting up. */
X timer.it_interval.tv_usec = 0;
X timer.it_interval.tv_sec = 0;
X timer.it_value.tv_usec = usecs;
X timer.it_value.tv_sec = secs;
X w = (struct call_wrapper *)calloc(sizeof(struct call_wrapper), 1);
X w->f = f;
X notify_set_itimer_func(w, do_the_call,
X ITIMER_REAL, &timer, NULL);
X}
X
X/*
X * Wrapper to make sure procedures from do_with_delay return good values
X * to the notifier.
X */
XNotify_value
Xdo_the_call(w, which)
Xstruct call_wrapper *w;
X{
X (*(w->f))();
X free(w);
X return NOTIFY_DONE;
X}
X
X/* Call this routine when we are suspended, and
X * we want to put off notification. The parameters
X * are those to notify_set_itimer_func.
X */
Xsuspendor(func, me, which, when)
XNotify_value (*func)();
Xint *me, which;
X{
X struct itimerval timer;
X timer.it_interval.tv_usec = 0;
X timer.it_interval.tv_sec = 0;
X timer.it_value.tv_usec = 0;
X timer.it_value.tv_sec = when;
X notify_set_itimer_func(me, func, ITIMER_REAL, &timer, which);
X}
END_OF_notify.c
if test 3982 -ne `wc -c talkingmark.h <<'END_OF_talkingmark.h'
X/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
X */
X 0xFFFF,0xFD40,0x00FF,0xFFFF,0xFFFF,0xFFFF,0xFE3F,0xFFFF,
X 0xFFFF,0x4000,0x0101,0xFFFF,0xFFFD,0x8C00,0x0080,0x1FFF,
X 0xFFFA,0x9231,0xA340,0x0FFF,0xFFF5,0x1009,0x54A0,0x03FF,
X 0xFFEC,0x1639,0x5720,0x07FF,0xFFF8,0x1249,0x5410,0x027F,
X 0xFFE8,0x0C29,0x5390,0x00BF,0xFFA8,0x0000,0x0010,0x00DF,
X 0xFFA8,0x1800,0x0010,0x007F,0xFFD8,0x2489,0x8A10,0x001F,
X 0xFF58,0x248A,0x4D20,0x002F,0xFF70,0x2453,0x8840,0x002F,
X 0xFFB0,0x2452,0x0880,0x001F,0xFED0,0x1821,0xC900,0x001F,
X 0xFD70,0x0000,0x0200,0x000F,0xFDE0,0x7FFF,0xFC00,0x0017,
X 0xFF70,0x8000,0x0000,0x000F,0xFDE1,0xA980,0x0001,0x2217,
X 0xFB61,0xFFF0,0x0017,0xFF19,0xFD61,0xF2BC,0x000D,0xFDCF,
X 0xF7B1,0x801E,0x0030,0x00DB,0xFD70,0x8FC3,0x0070,0x7073,
X 0xF570,0x95B1,0x00A1,0xAC3F,0xFAA8,0xA698,0x0062,0xF21C,
X 0xF678,0xBAF0,0x0044,0xB615,0xFD58,0xCF10,0x80C3,0xAC1D,
X 0xFAF8,0x4040,0x0082,0x781B,0xFFB8,0x4500,0x0080,0x8008,
X 0xFDAC,0x4000,0x8080,0x501E,0xFDB4,0x4000,0x0080,0x000A,
X 0xFF6C,0x4000,0x0080,0x0005,0xFF5C,0x2001,0x0080,0x0007,
X 0xFFEE,0x2001,0x0040,0x0009,0xFEBA,0x2002,0x0048,0x0005,
X 0xFFE1,0x100A,0x4022,0x000B,0xFFD5,0x1844,0x0020,0x000A,
X 0xFF44,0x8804,0x8010,0x0007,0xFF68,0x8D07,0x5D50,0x8005,
X 0xFFD0,0x4412,0xB7EC,0x0017,0xFFFE,0x2237,0xFDEA,0x0005,
X 0xFFB0,0x116F,0x5F56,0x801D,0xFFFA,0x18D7,0xEFFD,0x801F,
X 0xFFF5,0x047E,0x4AD5,0x805B,0xFFDD,0x0235,0xF6AB,0x20DB,
X 0xFFD7,0x818E,0xB7BB,0xB1DB,0xFFDB,0xB1FB,0x005E,0xCD6F,
X 0xFFE6,0xCF4E,0x0036,0xB6FF,0xFFEB,0xB6F7,0x557A,0x593F,
X 0xFFFB,0x3CA0,0xAA81,0xF7AF,0xFFF3,0x46C0,0x0001,0x79DF,
X 0xFFFA,0x7920,0x1A01,0xDB7F,0xFFFD,0x7B50,0x2506,0xF77F,
X 0xFFFA,0x9750,0x6F08,0x7EFF,0xFFFB,0x5BD4,0x92D5,0xB2FF,
X 0xFFFC,0xBF87,0xAD69,0x457F,0xFFFF,0x4ADE,0xFAAD,0x55FF,
X 0xFFFF,0x9649,0xC2DF,0xD7FF,0xFFFF,0xEBF7,0x5BD9,0x6BFF,
X 0xFFFF,0xFC68,0x9776,0xD7FF,0xFFFF,0xFDDD,0x789B,0xBFFF,
X 0xFFFF,0xFF5F,0xD576,0xFFFF,0xFFFF,0xFFE2,0x2AAB,0xFFFF
X/*
X * Copyright 1987 by Mark Weiser.
X * Permission to reproduce and use in any manner whatsoever is granted
X * so long as this copyright and other identifying marks of authorship
X * in the code and the game remain intact and visible.
X */
END_OF_talkingmark.h
if test 2171 -ne `wc -c walkmenu_impl.h <<'END_OF_walkmenu_impl.h'
X/* @(#)walkmenu_impl.h 1.1 86/02/04 SMI */
X
X/***********************************************************************/
X/* walkmenu_impl.h */
X/* Copyright (c) 1985 by Sun Microsystems, Inc. */
X/***********************************************************************/
X
X#ifndef walkmenu_impl_DEFINED
X#define walkmenu_impl_DEFINED
X
X#include
X#include "image_impl.h"
X
X#define TRUE 1
X#define FALSE 0
X#define NULL 0
X
X#define Pkg_private
X#define Pkg_extern extern
X#define Private static
X
X#define imax(a, b) ((int)(b) > (int)(a) ? (int)(b) : (int)(a))
X#define range(v, min, max) ((v) >= (min) && (v) <= (max))
X
X#define menu_attr_next(attr) (Menu_attribute *)attr_next((caddr_t *)attr)
X#define MENU_FILLER 5
X
X/***********************************************************************/
X/* Structures */
X/***********************************************************************/
X
X/*
X * Fields: default_position, selected_position and image are not validated
X * and must be checked before each usage.
X */
X
X/*********** Menu **********/
X
Xstruct menu {
X struct menu_ops_vector *ops;
X int default_position; /* Default item */
X int selected_position; /* Last selected item */
X /* Values are: default, selected, nth item */
X Menu_attribute initial_selection; /* Initial presentation */
X Menu_attribute default_selection; /* Default presentation */
X int height; /* in pixels, zero implies best fit */
X int width; /* in pixels */
X struct pixrect *shadow_pr; /* Draw shadow with this pattern */
X int (*feedback_proc)(); /* NYI */
X caddr_t (*notify_proc)();
X struct menu *(*gen_proc)(); /* Dynamically generate menu */
X /* Handler for item select, calls menu item proc */
X struct image default_image; /* Font, max size, etc. */
X struct menu *stack_menu; /* NYI - Stacking menu (sibling) */
X int pullright_delta; /* Distance(pixels) to bring up menu*/
X caddr_t client_data; /* Client''s use */
X
X/* Flags */
X unsigned allow_accelerated_selection:1; /* NYI */
X unsigned display_one_level:1; /* Limit initial selection */
X unsigned stand_off:1; /* Don''t selected item */
X unsigned valid_result:1; /* True if m->value is valid */
X unsigned jump_after_selection:1; /* If true then jump */
X unsigned jump_after_no_selection:1; /* If true then jump */
X unsigned free_everything:1; /* Not used */
X unsigned free_menu:1; /* Not used */
X unsigned free_shadow_pr:1; /* Not used */
X unsigned free_client_data:1; /* Not used */
X
X/* Auxiliary fields */
X int nitems; /* Number of items */
X int max_nitems; /* Size of item list */
X int ncols;
X int nrows;
X struct menu_item **item_list;
X struct menu_info *dynamic_info; /* Holds dynamic info for show() */
X struct menu_item *parent; /* Last pullright item */
X
X
X
X};
X
X
X/*********** Menu item **********/
X
Xstruct menu_item {
X struct menu_ops_vector *ops;
X struct image *image;
X struct menu_item *(*gen_proc)(); /* Called before displaying item */
X struct menu *(*gen_pullright)();/* Called before displaying menu */
X caddr_t (*notify_proc)(); /* Called only when selected */
X caddr_t value; /* union: value, menu_ptr */
X caddr_t client_data;
X struct menu *parent; /* Current enclosing menu */
X
X/* Flags */
X unsigned inactive:1;
X unsigned no_feedback:1;
X unsigned pullright:1;
X unsigned selected:1;
X unsigned free_everything:1; /* Not used */
X unsigned free_item:1;
X unsigned free_value:1; /* Not used */
X unsigned free_client_data:1; /* Not used */
X
X};
X
X
X/*********** Menu ops **********/
X
Xstruct menu_ops_vector {
X caddr_t (*menu_get_op)();
X int (*menu_set_op)();
X void (*menu_destroy_op)();
X};
X
X
X/*********** Menu info **********/
X
Xstruct menu_info {
X struct inputevent *first_iep;
X struct inputevent *last_iep;
X int depth;
X caddr_t (*notify_proc)();
X};
X
X#endif ~walkmenu_impl_DEFINED
END_OF_walkmenu_impl.h
if test 4150 -ne `wc -c