This is stdsys.c in view mode; [Download] [Up]
/* * hextris Copyright 1990 David Markley, dm3e@+andrew.cmu.edu, dam@cs.cmu.edu * * Permission to use, copy, modify, and distribute, this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the copyright holders be used in * advertising or publicity pertaining to distribution of the software with * specific, written prior permission, and that no fee is charged for further * distribution of this software, or any modifications thereof. The copyright * holder make no representations about the suitability of this software for * any purpose. It is provided "as is" without express or implied warranty. * * THE COPYRIGHT HOLDER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA, PROFITS, QPA OR GPA, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* This file contains routines used by hextris that are generally standard * on most system and display types. It contains no I/O, other than to files. */ #include <stdio.h> #include <string.h> #include <libc.h> #include "header.h" /* The function reverse is not copyrighted. * * This is a standard string reverse routine. */ void reverse(char *s) { int c,i,j; for (i = 0, j = strlen(s)-1; i < j; i++,j--) { c = s[i]; s[i] = s[j]; s[j] = c; } } /* The function itoa is not copyrighted. * * This is a standard integer to string converter. */ void itoa(int n, char *s) { int i, sign; if ((sign = n) < 0) n = -n; i = 0; do { s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); if (sign < 0) s[i++] = '-'; s[i] = '\0'; reverse(s); } /* This randomly selects the next piece. It also selects the current * piece, if it has not yet been set (rotation = -1). */ void new_piece(piece_t *npiece, piece_t *piece) { if (npiece->rotation == -1) { piece->type = (int)(random() % NUMBEROFPIECES); piece->rotation = 0; piece->row = 1; piece->column = MAXCOLUMN / 2; } else { piece->type = npiece->type; piece->rotation = npiece->rotation; piece->row = npiece->row; piece->column = npiece->column; } npiece->type = (int)(random() % NUMBEROFPIECES); npiece->rotation = 0; npiece->row = 1; npiece->column = MAXCOLUMN / 2; } /* This reads in the high score file. */ int read_high_scores(high_score_t high_scores[MAXHIGHSCORES]) { int i, j; FILE *high_score_file; char high_score_file_name[512]; char buffer[40]; strcpy(high_score_file_name,HIGHSCOREDIR); strcat(high_score_file_name,HIGHSCOREEXT); if ((high_score_file = fopen(high_score_file_name , "r")) == NULL) { fprintf(stderr,"xhextris: Can't open high score file.\n"); return 0; } for (i = 0; i < MAXHIGHSCORES; i++) { fread(high_scores[i].name,sizeof(char),MAXNAMELENGTH, high_score_file); fread(high_scores[i].userid,sizeof(char),MAXUSERIDLENGTH, high_score_file); fread(buffer,sizeof(char),40,high_score_file); high_scores[i].score = atoi(buffer); fread(buffer,sizeof(char),40,high_score_file); high_scores[i].rows = atoi(buffer); if (feof(high_score_file)) break; } for (j = i; j < MAXHIGHSCORES; j++) { strcpy(high_scores[j].name,"David Markley"); strcpy(high_scores[j].userid,"CMU"); high_scores[j].score = 0; high_scores[j].rows = 0; } fclose(high_score_file); return 1; } /* This writes the high score file. */ int write_high_scores(high_score_t high_scores[MAXHIGHSCORES], char *uniqueid) { int i; FILE *high_score_file; char tmp_high_score_file_name[512]; char high_score_file_name[512]; char buffer[40]; strcpy(tmp_high_score_file_name,HIGHSCOREDIR); strcat(tmp_high_score_file_name,uniqueid); strcpy(high_score_file_name,HIGHSCOREDIR); strcat(high_score_file_name,HIGHSCOREEXT); #ifdef AFS beGames(); #endif if ((high_score_file = fopen(tmp_high_score_file_name, "w")) == NULL) { fprintf(stderr,"xhextris: Can't open high score file.\n"); return 0; } for (i = 0; i < MAXHIGHSCORES; i++) { fwrite(high_scores[i].name,sizeof(char),MAXNAMELENGTH, high_score_file); fwrite(high_scores[i].userid,sizeof(char),MAXUSERIDLENGTH, high_score_file); itoa(high_scores[i].score,buffer); fwrite(buffer,sizeof(char),40,high_score_file); itoa(high_scores[i].rows,buffer); fwrite(buffer,sizeof(char),40,high_score_file); } fflush(high_score_file); fclose(high_score_file); rename(tmp_high_score_file_name,high_score_file_name); #ifdef AFS bePlayer(); #endif return 1; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.