home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume6 / rndweather.p1 < prev    next >
Text File  |  1989-04-23  |  14KB  |  440 lines

  1. Newsgroups: comp.sources.misc
  2. From: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  3. Subject: v06i089: Random Weather Generator - patch1
  4. Reply-To: slocum@hi-csc.UUCP
  5.  
  6. Posting-number: Volume 6, Issue 89
  7. Submitted-by: slocum@hi-csc.UUCP
  8. Archive-name: rndweather.p1
  9.  
  10. This is the first patch to the recently posted Random Weather Generator.
  11.  
  12. Bug fixed:
  13.      o  Overflow on negative temperature - Temperature variable
  14.         changed to short.
  15.  
  16. Enhancements:
  17.      o  VMS port modifications.
  18.      o  The Middle Earth calendar has Lithe and Yule in separate
  19.         months, instead of being printed as part of Forelithe
  20.         and Foreyule.
  21.      o  The desired starting and ending years can be specified
  22.         on the command line.  The command 'england 1066 1075' 
  23.         will print weather for the ten years from 1066 through 1075.
  24.  
  25. My thanks to the following people who reported the bug and suggested
  26. the modifications:
  27.  
  28.     "251 degrees in a Minnesota winter" bug:
  29.         Michael Kent <...!{uflorida, uunet}!aleytys!mike>
  30.         Mark E Hunter <meh@wucs1.wustl.edu>
  31.         Dan Farmer <ajm@mentor.cc.purdue.edu>
  32.         Kevin W. Thomas <uokmax!kwthomas@uokmax.ecn.uoknor.edu>
  33.  
  34.     VMS and Shire calendar modifications:
  35.         Karsten Spang, NBI, Copenhagen <SPANG@nbivax.nbi.dk>
  36.  
  37. Brett Slocum   UUCP: ...uunet!hi-csc!slocum
  38.                Arpa: hi-csc!slocum@uunet.uu.net
  39. "My name is Inigo Montoya. You killed my father. Prepare to die."
  40.  
  41. #--------------------------------CUT HERE-------------------------------------
  42. #! /bin/sh
  43. #
  44. # This is a shell archive.  Save this into a file, edit it
  45. # and delete all lines above this comment.  Then give this
  46. # file to sh by executing the command "sh file".  The files
  47. # will be extracted into the current directory owned by
  48. # you with default permissions.
  49. #
  50. # The files contained herein are:
  51. #
  52. # -rwxrwx---  1 atchan         21 Apr 12 10:40 patchlevel.h
  53. # -rwxrwx---  1 195         11391 Apr 12 10:34 patch1
  54. #
  55. echo 'x - patchlevel.h'
  56. if test -f patchlevel.h; then echo 'shar: not overwriting patchlevel.h'; else
  57. sed 's/^X//' << '________This_Is_The_END________' > patchlevel.h
  58. X#define PATCHLEVEL 1
  59. ________This_Is_The_END________
  60. if test `wc -l < patchlevel.h` -ne 1; then
  61.     echo 'shar: patchlevel.h was damaged during transit (should have been 1 bytes)'
  62. fi
  63. fi        ; : end of overwriting check
  64. echo 'x - patch1'
  65. if test -f patch1; then echo 'shar: not overwriting patch1'; else
  66. sed 's/^X//' << '________This_Is_The_END________' > patch1
  67. X*** oMakefile    Wed Mar 22 10:29:57 1989
  68. X--- Makefile    Wed Apr 12 09:21:49 1989
  69. X***************
  70. X*** 30,35
  71. X  # GULF         - useful for Gulf States, Mediterranean, etc.
  72. X  # N_PACIFIC    - useful for Japan, Korea, Southern Alaskan coast, etc.
  73. X  
  74. X  england: weather.c weather.h gregorian.h mid_atlantic.h
  75. X      cc -DGREGORIAN -DMID_ATLANTIC -o england -g weather.c
  76. X  
  77. X
  78. X--- 30,40 -----
  79. X  # GULF         - useful for Gulf States, Mediterranean, etc.
  80. X  # N_PACIFIC    - useful for Japan, Korea, Southern Alaskan coast, etc.
  81. X  
  82. X+ # uncomment the appropriate line for System V or VMS
  83. X+ #CFLAGS = -DVMS
  84. X+ #CFLAGS = -DSYSV
  85. X+ CFLAGS = 
  86. X+ 
  87. X  england: weather.c weather.h gregorian.h mid_atlantic.h
  88. X      cc -DGREGORIAN -DMID_ATLANTIC -o england -g weather.c
  89. X*** omiddle_earth.h    Wed Feb  1 11:27:17 1989
  90. X--- middle_earth.h    Wed Apr 12 09:38:03 1989
  91. X***************
  92. X*** 18,29
  93. X  #define ASTRON      3
  94. X  #define THRIMIDGE   4
  95. X  #define FORELITHE   5
  96. X! #define AFTERLITHE  6
  97. X! #define WEDMATH     7
  98. X! #define HALIMATH    8
  99. X! #define WINTERFILTH 9
  100. X! #define BLOTMATH    10
  101. X! #define FOREYULE    11
  102. X  
  103. X  #define FIRST_MONTH AFTERYULE
  104. X  #define LAST_MONTH  FOREYULE
  105. X
  106. X--- 18,31 -----
  107. X  #define ASTRON      3
  108. X  #define THRIMIDGE   4
  109. X  #define FORELITHE   5
  110. X! #define LITHE       6
  111. X! #define AFTERLITHE  7
  112. X! #define WEDMATH     8
  113. X! #define HALIMATH    9
  114. X! #define WINTERFILTH 10
  115. X! #define BLOTMATH    11
  116. X! #define FOREYULE    12
  117. X! #define YULE        13
  118. X  
  119. X  #define FIRST_MONTH AFTERYULE
  120. X  #define LAST_MONTH  YULE
  121. X***************
  122. X*** 26,32
  123. X  #define FOREYULE    11
  124. X  
  125. X  #define FIRST_MONTH AFTERYULE
  126. X! #define LAST_MONTH  FOREYULE
  127. X  
  128. X  #define N_MONTHS (LAST_MONTH - FIRST_MONTH) + 1
  129. X  
  130. X
  131. X--- 28,34 -----
  132. X  #define YULE        13
  133. X  
  134. X  #define FIRST_MONTH AFTERYULE
  135. X! #define LAST_MONTH  YULE
  136. X  
  137. X  #define N_MONTHS (LAST_MONTH - FIRST_MONTH) + 1
  138. X  
  139. X***************
  140. X*** 37,42
  141. X      "Astron",
  142. X      "Thrimidge",
  143. X      "Forelithe",
  144. X      "Afterlithe",
  145. X      "Wedmath",
  146. X      "Halimath",
  147. X
  148. X--- 39,45 -----
  149. X      "Astron",
  150. X      "Thrimidge",
  151. X      "Forelithe",
  152. X+     "Lithe",
  153. X      "Afterlithe",
  154. X      "Wedmath",
  155. X      "Halimath",
  156. X***************
  157. X*** 43,48
  158. X      "Winterfilth",
  159. X      "Blotmath",
  160. X      "Foreyule",
  161. X  };
  162. X  
  163. X  UBYTE Day_Table[N_MONTHS] = {30, 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, 34};
  164. X
  165. X--- 46,52 -----
  166. X      "Winterfilth",
  167. X      "Blotmath",
  168. X      "Foreyule",
  169. X+     "Yule",
  170. X  };
  171. X  
  172. X  UBYTE Day_Table[N_MONTHS] = {30, 30, 30, 30, 30, 30, 1, 30, 30, 30, 30, 30, 30, 4};
  173. X***************
  174. X*** 45,51
  175. X      "Foreyule",
  176. X  };
  177. X  
  178. X! UBYTE Day_Table[N_MONTHS] = {30, 30, 30, 30, 30, 31, 30, 30, 30, 30, 30, 34};
  179. X  
  180. X  void
  181. X  print_holiday(day, month)
  182. X
  183. X--- 49,55 -----
  184. X      "Yule",
  185. X  };
  186. X  
  187. X! UBYTE Day_Table[N_MONTHS] = {30, 30, 30, 30, 30, 30, 1, 30, 30, 30, 30, 30, 30, 4};
  188. X  
  189. X  void
  190. X  print_holiday(day, month)
  191. X***************
  192. X*** 64,71
  193. X       case THRIMIDGE:
  194. X           break;
  195. X       case FORELITHE:
  196. X-          if (day == 31) 
  197. X-              printf(" Midsummer Day");
  198. X           break;
  199. X       case AFTERLITHE:
  200. X           break;
  201. X
  202. X--- 68,73 -----
  203. X       case THRIMIDGE:
  204. X           break;
  205. X       case FORELITHE:
  206. X           break;
  207. X       case LITHE:
  208. X           printf(" Midsummer Day");
  209. X***************
  210. X*** 67,72
  211. X           if (day == 31) 
  212. X               printf(" Midsummer Day");
  213. X           break;
  214. X       case AFTERLITHE:
  215. X           break;
  216. X       case WEDMATH:
  217. X
  218. X--- 69,77 -----
  219. X           break;
  220. X       case FORELITHE:
  221. X           break;
  222. X+      case LITHE:
  223. X+          printf(" Midsummer Day");
  224. X+          break;
  225. X       case AFTERLITHE:
  226. X           break;
  227. X       case WEDMATH:
  228. X***************
  229. X*** 78,85
  230. X       case BLOTMATH:
  231. X           break;
  232. X       case FOREYULE:
  233. X!          if ((day >= 31) AND (day <= 34))
  234. X!              printf(" Yule");
  235. X           break;
  236. X       }
  237. X  }
  238. X
  239. X--- 83,91 -----
  240. X       case BLOTMATH:
  241. X           break;
  242. X       case FOREYULE:
  243. X!          break;
  244. X!      case YULE:
  245. X!          printf(" Yule");
  246. X           break;
  247. X       }
  248. X  }
  249. X*** oweather.c    Wed Feb  1 15:50:51 1989
  250. X--- weather.c    Wed Apr 12 10:18:18 1989
  251. X***************
  252. X*** 8,13
  253. X   *  This program or its derivatives may not be sold for profit without    *
  254. X   *  permission of the author.                                             *
  255. X   *                                                                        *
  256. X   *  Original UNIX Version: Brett Slocum UUCP: ...uunet!hi-csc!slocum      *
  257. X   *                                      ARPA: hi-csc!slocum@uunet.uu.net  *
  258. X   *                                                                        *
  259. X
  260. X--- 8,22 -----
  261. X   *  This program or its derivatives may not be sold for profit without    *
  262. X   *  permission of the author.                                             *
  263. X   *                                                                        *
  264. X+  *  To run:   <region name> [<start year> <end year>]                     *
  265. X+  *                                                                        *
  266. X+  *      If the start and end years are not supplied, the program          *
  267. X+  *  produces one year of weather.                                         *
  268. X+  *                                                                        *
  269. X+  *  Example:  england 1066 1075                                           *
  270. X+  *            will produce 10 years of weather starting in 1066 and       *
  271. X+  *            in 1075.                                                    *
  272. X+  *                                                                        *
  273. X   *  Original UNIX Version: Brett Slocum UUCP: ...uunet!hi-csc!slocum      *
  274. X   *                                      ARPA: hi-csc!slocum@uunet.uu.net  *
  275. X   *                                                                        *
  276. X***************
  277. X*** 11,16
  278. X   *  Original UNIX Version: Brett Slocum UUCP: ...uunet!hi-csc!slocum      *
  279. X   *                                      ARPA: hi-csc!slocum@uunet.uu.net  *
  280. X   *                                                                        *
  281. X   **************************************************************************/
  282. X  
  283. X  #include "weather.h"
  284. X
  285. X--- 20,35 -----
  286. X   *  Original UNIX Version: Brett Slocum UUCP: ...uunet!hi-csc!slocum      *
  287. X   *                                      ARPA: hi-csc!slocum@uunet.uu.net  *
  288. X   *                                                                        *
  289. X+  *  Bugs reported and modifications suggested by:                         *
  290. X+  *      "251 degrees in a Minnesota winter" bug:                          *
  291. X+  *          Michael Kent <...!{uflorida, uunet}!aleytys!mike>             *
  292. X+  *          Mark E Hunter <meh@wucs1.wustl.edu>                           *
  293. X+  *          Dan Farmer <ajm@mentor.cc.purdue.edu>                         *
  294. X+  *          Kevin W. Thomas <uokmax!kwthomas@uokmax.ecn.uoknor.edu>       *
  295. X+  *                                                                        *
  296. X+  *      VMS and Shire calendar modifications:                             *
  297. X+  *          Karsten Spang, NBI, Copenhagen <SPANG@nbivax.nbi.dk>          *
  298. X+  *                                                                        *
  299. X   **************************************************************************/
  300. X  
  301. X  #include "weather.h"
  302. X***************
  303. X*** 62,69
  304. X  WEATHER_T  Weather;              /* today's weather */
  305. X  OVERCAST_T Sky;                  /* today's sky conditions */
  306. X  
  307. X! UBYTE Temperature = 0,           /* today's actual temperature */
  308. X!       Duration = 0;              /* today's precipitation duration */
  309. X  
  310. X  BOOL Duration_Hours = TRUE,      /* flag that indicates whether precip lasted */
  311. X                                   /* hours (TRUE) or minutes (FALSE) */
  312. X
  313. X--- 81,88 -----
  314. X  WEATHER_T  Weather;              /* today's weather */
  315. X  OVERCAST_T Sky;                  /* today's sky conditions */
  316. X  
  317. X! short Temperature = 0;           /* today's actual temperature */
  318. X! UBYTE Duration = 0;              /* today's precipitation duration */
  319. X  
  320. X  BOOL Duration_Hours = TRUE,      /* flag that indicates whether precip lasted */
  321. X                                   /* hours (TRUE) or minutes (FALSE) */
  322. X***************
  323. X*** 424,432
  324. X       int cum_temp;               /* cumulative temp used for calculating average temp */
  325. X       unsigned int sunshine = 0;  /* number of days of sunshine */
  326. X       MONTH_T month;              /* month counter */
  327. X!      UBYTE day,                  /* day counter */
  328. X!            year,                 /* year counter */
  329. X!            n_years = 1;          /* number of years */
  330. X  
  331. X       srandom((int)time(0));
  332. X       if (argc > 1)
  333. X
  334. X--- 443,452 -----
  335. X       int cum_temp;               /* cumulative temp used for calculating average temp */
  336. X       unsigned int sunshine = 0;  /* number of days of sunshine */
  337. X       MONTH_T month;              /* month counter */
  338. X!      UBYTE day;                  /* day counter */
  339. X!      int year,                   /* year counter */
  340. X!          start_year = 1,         /* starting year */
  341. X!          end_year = 1;           /* ending year */
  342. X  
  343. X       srandom((int)time(0));
  344. X       if ((argc > 1) AND (argc <= 3)) 
  345. X***************
  346. X*** 429,436
  347. X             n_years = 1;          /* number of years */
  348. X  
  349. X       srandom((int)time(0));
  350. X!      if (argc > 1)
  351. X!          n_years = atoi(argv[1]);
  352. X       init_winter();
  353. X       for (year = 1; year <= n_years; year++)
  354. X       {
  355. X
  356. X--- 449,465 -----
  357. X           end_year = 1;           /* ending year */
  358. X  
  359. X       srandom((int)time(0));
  360. X!      if ((argc > 1) AND (argc <= 3)) 
  361. X!      {
  362. X!          start_year = atoi(argv[1]);
  363. X!          end_year = atoi(argv[2]);
  364. X!      }
  365. X!      else
  366. X!      if (argc != 1)
  367. X!      {
  368. X!          printf("Usage: %s [<start year> <end year>]\n", argv[0]);
  369. X!          exit(0);
  370. X!      }
  371. X       init_winter();
  372. X       for (year = start_year; year <= end_year; year++)
  373. X       {
  374. X***************
  375. X*** 432,438
  376. X       if (argc > 1)
  377. X           n_years = atoi(argv[1]);
  378. X       init_winter();
  379. X!      for (year = 1; year <= n_years; year++)
  380. X       {
  381. X           Rainfall = 0.0;
  382. X           Snowfall = 0.0;
  383. X
  384. X--- 461,467 -----
  385. X           exit(0);
  386. X       }
  387. X       init_winter();
  388. X!      for (year = start_year; year <= end_year; year++)
  389. X       {
  390. X           Rainfall = 0.0;
  391. X           Snowfall = 0.0;
  392. X***************
  393. X*** 439,445
  394. X           sunshine = 0;
  395. X           init_stat();
  396. X           printf("%64c%6s\n", ' ',"Snow");
  397. X!          printf("Year %3d%11s%11s%14s%10s%10s%7s%7s\n", year, "Weather", "Sky", "Temperature", "Precip", "Wind", "Depth", "Notes");
  398. X           for (month = FIRST_MONTH; month <= LAST_MONTH; month++)
  399. X           {
  400. X               cum_temp = 0;
  401. X
  402. X--- 468,474 -----
  403. X           sunshine = 0;
  404. X           init_stat();
  405. X           printf("%64c%6s\n", ' ',"Snow");
  406. X!          printf("Year %4d%10s%11s%14s%10s%10s%7s%7s\n", year, "Weather", "Sky", "Temperature", "Precip", "Wind", "Depth", "Notes");
  407. X           for (month = FIRST_MONTH; month <= LAST_MONTH; month++)
  408. X           {
  409. X               cum_temp = 0;
  410. X*** oweather.h    Fri Dec 16 14:00:23 1988
  411. X--- weather.h    Wed Apr 12 09:21:55 1989
  412. X***************
  413. X*** 3,8
  414. X  #define random lrand48
  415. X  #endif
  416. X  
  417. X  #define DIE(n) ((int)(random() % (unsigned)n)+1)
  418. X  #define MIN(a,b) ((a<b) ? a : b)
  419. X  #define MAX(a,b) ((a>b) ? a : b)
  420. X
  421. X--- 3,13 -----
  422. X  #define random lrand48
  423. X  #endif
  424. X  
  425. X+ #ifdef VMS
  426. X+ #define srandom srand
  427. X+ #define random rand
  428. X+ #endif
  429. X+ 
  430. X  #define DIE(n) ((int)(random() % (unsigned)n)+1)
  431. X  #define MIN(a,b) ((a<b) ? a : b)
  432. X  #define MAX(a,b) ((a>b) ? a : b)
  433. ________This_Is_The_END________
  434. if test `wc -l < patch1` -ne 366; then
  435.     echo 'shar: patch1 was damaged during transit (should have been 366 bytes)'
  436. fi
  437. fi        ; : end of overwriting check
  438. exit 0
  439.  
  440.