ml@brumuc.muc.sub.org (Marc Laukien) (05/20/91)
Submitted-by: ml@brumuc.muc.sub.org Archive-name: UnixChess/part03 ---- Cut Here and feed the following to sh ---- #!/bin/sh # this is chess.03 (part 3 of UnixChess) # do not concatenate these parts, unpack them in order with /bin/sh # file ad/window.c continued # if test ! -r _shar_seq_.tmp; then echo 'Please unpack part 1 first!' exit 1 fi (read Scheck if test "$Scheck" != 3; then echo Please unpack part "$Scheck" next! exit 1 else exit 0 fi ) < _shar_seq_.tmp || exit 1 if test ! -f _shar_wnt_.tmp; then echo 'x - still skipping ad/window.c' else echo 'x - continuing file ad/window.c' sed 's/^X//' << 'SHAR_EOF' >> 'ad/window.c' && X beep(); X } X while(c!=str[0] && c!=str[1]); X X delwin(win); /* Fenster aus */ X win=(WINDOW *)0; X X move(23,79); X touchwin(stdscr); X wnoutrefresh(stdscr); X if(setupwin != (WINDOW *)0) X { X touchwin(setupwin); X wnoutrefresh(setupwin); X } X doupdate(); X X if(c==str[0]) /* ja ? */ X return(1); X else /* nein ? */ X return(0); } X X SHAR_EOF echo 'File ad/window.c is complete' && chmod 0644 ad/window.c || echo 'restore of ad/window.c failed' Wc_c="`wc -c < 'ad/window.c'`" test 6749 -eq "$Wc_c" || echo 'ad/window.c: original size 6749, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/move.c ============== if test -f 'ad/move.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/move.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/move.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/move.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Zug ausfuehren */ /* */ /****************************************************************/ X #include <curses.h> #include <string.h> #include "ad.h" X extern unsigned sleep(); X /****************************************************************/ /* Zug ausfuehren */ /****************************************************************/ X void ad_zug(ch) X char ch; /* Charakter */ { X char str[STRLEN]; /* String */ X int i; X X strcpy(str,"ziehe "); /* aufbereiten */ X X move(16,MPOS); /* in Position */ X addstr(domove); /* Meldung */ X addch(ch|A_UNDERLINE); /* ausgeben */ X sprintf(str+strlen(str),"%c",(char)ch); /* aufbereiten */ X refresh(); X l1: ad_read(0,&ch,1); /* einlesen */ X if(ch=='\b') /* zurueck ? */ X { X addstr("\b \b"); X str[strlen(str)-1]=0; X refresh(); X goto l5; X } X if(ch<(int)'1' || ch>(int)'8') X { X beep(); X goto l1; X } X addch(ch|A_UNDERLINE); /* ausgeben */ X sprintf(str+strlen(str),"%c ",(char)ch); /* aufbereiten */ X addch((int)'-'|A_UNDERLINE); X refresh(); X l2: ad_read(0,&ch,1); /* einlesen */ X if(ch=='\b') /* zurueck ? */ X { X addstr("\b \b"); X str[strlen(str)-1]=0; X addstr("\b \b"); X str[strlen(str)-1]=0; X refresh(); X goto l1; X } X if(ch<(int)'a' || ch>(int)'h') X { X beep(); X goto l2; X } X addch(ch|A_UNDERLINE); /* ausgeben */ X sprintf(str+strlen(str),"%c",(char)ch); /* aufbereiten */ X refresh(); X l3: ad_read(0,&ch,1); /* einlesen */ X if(ch=='\b') /* zurueck ? */ X { X addstr("\b \b"); X str[strlen(str)-1]=0; X refresh(); X goto l2; X } X if(ch<(int)'1' || ch>(int)'8') X { X beep(); X goto l3; X } X addch(ch|A_UNDERLINE); /* ausgeben */ X sprintf(str+strlen(str),"%c",(char)ch); /* aufbereiten */ X refresh(); X X schach(str,ptr); /* ziehen */ X if(ptr[0][0]!='?') /* zug ok ? */ X { X ad_brett(); X farbe= farbe=='w' ? 's':'w'; X /* naechste Farbe */ X } X else /* falscheingabe */ X beep(); X l5: move(16,MPOS); /* in Position */ X for(i=MPOS;i<79;i++) /* loschen */ X addstr(" "); X refresh(); X X if(TURNGEG()) X { X ad_lock(); X sprintf(str,"save %s",stdname); X schach(str,ptr); /* Speichern */ X ad_unlock(); X } } X /****************************************************************/ /* externen Zug ausfuehren */ /****************************************************************/ X void ad_extzug() { X char s[STRLEN]; X int i; X X sleep((unsigned)5); /* warten */ X X ad_lock(); X sprintf(s,"load %s",stdname); /* Pfad zum Laden */ X schach(s,ptr); /* Laden */ X ad_unlock(); X X if(ptr[0][0]=='?') /* Fehler ? */ X { X move(3,MPOS); X X if(W_IS_USER()) /* Schwarz gab auf */ X { X attrset(0); /* Alle Attribute aus */ X addstr(b_up); /* Meldung */ X X ende=S_AUFG; X } X X if(B_IS_USER()) /* Weiss gab auf */ X { X attrset(0); /* Alle Attribute aus */ X addstr(w_up); /* Meldung */ X X ende=W_AUFG; X } X X for(i=stdscr->_curx;i<79;i++) /* Rest der Zeile loeschen*/ X mvaddch(stdscr->_cury,i,(int)' '); X X } X else X { X ad_brett(); /* Brett aufbauen */ X X schach("info",ptr); /* Info holen */ X modus = atoi(ptr[9]); /* merken */ X farbe = ptr[0][0]; X level = atoi(ptr[6]); X X ad_menu(); X } } SHAR_EOF chmod 0644 ad/move.c || echo 'restore of ad/move.c failed' Wc_c="`wc -c < 'ad/move.c'`" test 3257 -eq "$Wc_c" || echo 'ad/move.c: original size 3257, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/interrupt.c ============== if test -f 'ad/interrupt.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/interrupt.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/interrupt.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/interrupt.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Interrupts */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <signal.h> #include "ad.h" X extern void exit(); X /****************************************************************/ /* Interrupt */ /****************************************************************/ X void ad_interrupt() X { X inter=1; X X ad_deinit(); /* Deinitialsieren */ X exit(1); /* Ende */ } X /****************************************************************/ /* Refresh (^ L) */ /****************************************************************/ X void ad_refresh() X { X WINDOW *dwin; /* neues Fenster */ X X signal(SIGUSR1,SIG_IGN); X signal(SIGALRM,SIG_IGN); X X inter=1; /* Interrupt merken */ X X dwin=newwin(LINES,COLS,0,0); X wnoutrefresh(dwin); /* ausgeben */ X delwin(dwin); /* Fenster aus */ X X touchwin(stdscr); /* Fenster ausgeben */ X wnoutrefresh(stdscr); X if(win != (WINDOW *)0) X { X touchwin(win); X wnoutrefresh(win); X } X X if(setupwin != (WINDOW *)0) X { X touchwin(setupwin); X wnoutrefresh(setupwin); X } X X doupdate(); X X move(23,79); X refresh(); X X signal(SIGUSR1,ad_refresh); } X /****************************************************************/ /* "Best so far" */ /****************************************************************/ X void ad_break() X { X extern int beende; /* aus ch_ma.c */ X X inter=1; /* Interrupt merken */ X X signal(SIGUSR2,SIG_IGN); X X if(UEBUNG()) X beende=1; /* beenden */ X X signal(SIGUSR2,ad_break); } X /****************************************************************/ /* Interrupt starten */ /****************************************************************/ X void ad_startint() { X signal(SIGINT,ad_interrupt); /* Interrupt aendern */ X signal(SIGTERM,ad_interrupt); X signal(SIGHUP,ad_interrupt); X X signal(SIGUSR1,ad_refresh); /* Bild neu aufb. (^ L) */ X signal(SIGUSR2,ad_break); /* "Best so far" */ } SHAR_EOF chmod 0644 ad/interrupt.c || echo 'restore of ad/interrupt.c failed' Wc_c="`wc -c < 'ad/interrupt.c'`" test 2103 -eq "$Wc_c" || echo 'ad/interrupt.c: original size 2103, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/load.c ============== if test -f 'ad/load.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/load.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/load.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/load.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Laden & Speichern & Neustart */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include "ad.h" X /****************************************************************/ /* Programm Laden */ /****************************************************************/ X void ad_load() X { X char str[STRLEN]; X char *s; X X if(TURNIER()) /* Turnierspiel ? */ X { X ad_error(not_allowed); X return; X } X X s=ad_name('f'); X if(s[strlen(s)-1] != '/') X if(ad_sure('s')) X { X sprintf(str,"load %s",s); X schach(str,ptr); X X if(ptr[0][0]=='?') /* Fehler ? */ X ad_error(""); X else X { X ad_brett(); X X schach("info",ptr);/* Info hol. */ X farbe=ptr[0][0];/* Farbe am Zug */ X if(farbe=='w') /* Farbe einst. */ X { X wei=0; X sch=1; X } X else X { X sch=0; X wei=1; X } X level=atoi(ptr[6]);/* Spielstufe*/ X modus=atoi(ptr[9]);/* Modus */ X ad_menu(); X } X } } X /****************************************************************/ /* Programm speichern */ /****************************************************************/ X void ad_save() X { X char str[STRLEN]; X char *s; X X if(TURNIER()) /* Turnierspiel ? */ X { X ad_error(not_allowed); X return; X } X X s=ad_name('f'); X if(s[strlen(s)-1] != '/') X { X sprintf(str,"save %s",s); X schach(str,ptr); X if(ptr[0][0]=='?') /* Fehler ? */ X ad_error(""); X } } X /****************************************************************/ /* Zurueck */ /****************************************************************/ X void ad_zurueck() X { X if(TURNIER()) /* Turnierspiel ? */ X { X ad_error(not_allowed); X return; X } X X schach("zurueck",ptr); X ad_brett(); X schach("info",ptr);/* Info hol. */ X farbe=ptr[0][0];/* Farbe am Zug */ X X if(farbe=='w') /* Farbe einst. */ X { X wei=0; X sch=1; X } X else X { X sch=0; X wei=1; X } X level=atoi(ptr[6]); /* Spielstufe */ X ad_menu(); } SHAR_EOF chmod 0644 ad/load.c || echo 'restore of ad/load.c failed' Wc_c="`wc -c < 'ad/load.c'`" test 2094 -eq "$Wc_c" || echo 'ad/load.c: original size 2094, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/menu.c ============== if test -f 'ad/menu.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/menu.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/menu.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/menu.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Spielmenue */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <ctype.h> #include <time.h> #include <sys/types.h> #include "ad.h" X /****************************************************************/ /* Spielmenue */ /****************************************************************/ X void ad_game() X { X char s[STRLEN]; /* String */ X X if(!UEBUNG()) /* Spiel gegen sich selbst ? */ X { X strcpy(s,ad_id(gegner)); X if(!strcmp(s,ad_id(getlogin()))) X return; X } X X if(!UEBUNG() && !strcmp(ad_id(gegner),"?")) X { /* Existiert Gegner ? */ X ad_error(no_user); X return; X } X X ad_game_screen(); /* Bildaufbau */ X X ad_new(); /* neues Spiel */ X X if(UEBUNG()) /* Training ? */ X ad_tr_game(); X else if(TURNGEG()) /* Turnier gegen Gegner ? */ X ad_tu_game(); X else /* Turnier gegen Computer ? */ X ad_tc_game(); } X /****************************************************************/ /* Menueeingabe */ /****************************************************************/ /* Return: 1: ok 0: Ende */ /* 2: Aufgeben */ /****************************************************************/ X int ad_domenu(ch) X char ch; { X if(ch<='h' && ch>='a' && !ende && /*** ziehen ***/ X ((farbe=='w' && W_IS_USER()) || (farbe=='s' && B_IS_USER()))) X ad_zug(ch); X else if(ch==menu[0][0]) /*** Level ***/ X { X char str[STRLEN]; X X if(TURNIER()) /* Turnierspiel */ X ad_error(not_allowed); X else X { X level++; X if(level >=10) X level=0; X ad_menu(); X X sprintf(str,"stufe %d",level); X schach(str,ptr); X } X } X else if(ch==menu[1][0]) /*** Weiss ***/ X { X if(TURNIER()) /* Turnierspiel ? */ X ad_error(not_allowed); X else X { X wei= W_IS_USER(); X ad_menu(); X } X } X else if(ch==menu[2][0]) /*** Schwarz ***/ X { X if(TURNIER()) /* Turnierspiel ? */ X ad_error(not_allowed); X else X { X sch= B_IS_USER(); X ad_menu(); X } X } X else if(ch==menu[3][0]) /*** Analyse ***/ X { X char str[STRLEN]; X X if(TURNGEG()) /* ext. Gegner */ X ad_error(not_allowed); X else X { X schach("info",ptr); /* Info hol. */ X modus=atoi(ptr[9]); /* Modus */ X modus ^= 128; /* aendern */ X sprintf(str,"modus %d",modus); X schach(str,ptr); /* setzen */ X if(!(modus & 128)) /* aus ? */ X ad_analyse(" a b c d e f g h"); X ad_menu(); X } X } X else if(ch==menu[4][0]) /*** Setup ***/ X ad_setup(); X else if(ch==menu[5][0]) /*** Zurueck ***/ X ad_zurueck(); X else if(ch==menu[6][0]) /*** Info ***/ X ad_info(); X else if(ch==menu[7][0]) /*** Neustart ***/ X { X return(2); X } X else if(ch==menu[8][0]) /*** ende ***/ X { X if(ad_sure('s')) X return(0); X } #ifdef EXT_ANALYSE /* gesperrt ! */ X else if(ch==(char)26) /*** ausf. Analyse ***/ X { /* ^ Z */ X char str[STRLEN]; X X schach("info",ptr); /* Info hol. */ X modus=atoi(ptr[9]); /* Modus */ X modus ^= 1; /* aendern */ X sprintf(str,"modus %d",modus); X schach(str,ptr); /* setzen */ X if(!(modus & 1)) /* aus ? */ X ad_analyse(" a b c d e f g h"); X } #endif X else if(ch!=' ') /* Space wird ignoriert */ X beep(); /*** Fehler ***/ X X return(1); } SHAR_EOF chmod 0644 ad/menu.c || echo 'restore of ad/menu.c failed' Wc_c="`wc -c < 'ad/menu.c'`" test 3404 -eq "$Wc_c" || echo 'ad/menu.c: original size 3404, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/lock.c ============== if test -f 'ad/lock.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/lock.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/lock.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/lock.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: File Locking */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <fcntl.h> #include "ad.h" X extern unsigned sleep(); X /****************************************************************/ /* File locken */ /****************************************************************/ X void ad_lock() X { X int fd; X char str[STRLEN]; X X if(!TURNGEG()) /* Computer = Gegner ? */ X return; /* Kein lock noetig */ X X sprintf(str,"%s.lock",stdname); /* Pfad aufbereiten */ X X while(1) X { X fd=open(str,O_WRONLY | O_CREAT | O_EXCL,0664); /* Lock holen */ X X if(fd!=-1) /* nicht locked ? */ X break; X X sleep((unsigned)2); X } X X close(fd); /* schliessen */ X X lock=1; } X /****************************************************************/ /* File unlocken */ /****************************************************************/ X void ad_unlock() X { X char str[STRLEN]; /* String fuer Pfad- und Dateinamen */ X X if(!TURNGEG()) /* Computer = Gegner ? */ X return; /* Kein lock noetig */ X X sprintf(str,"%s.lock",stdname); /* Pfad aufbereiten */ X if(unlink(str) == -1) /* loeschen */ X ad_error(""); X X lock=0; } X /****************************************************************/ /* Score locken */ /****************************************************************/ X void ad_locksc() X { X int fd; X static char *str="score.lock"; X X while(1) X { X fd=open(str,O_WRONLY | O_CREAT | O_EXCL,0664); /* Lock holen */ X X if(fd!=-1) /* nicht locked ? */ X break; X X sleep((unsigned)2); X } X X close(fd); /* schliessen */ X X lock=1; } X /****************************************************************/ /* Score unlocken */ /****************************************************************/ X void ad_unlocksc() X { X if(unlink("score.lock") == -1) /* loeschen */ X ad_error(""); X X lock=0; } X SHAR_EOF chmod 0644 ad/lock.c || echo 'restore of ad/lock.c failed' Wc_c="`wc -c < 'ad/lock.c'`" test 2071 -eq "$Wc_c" || echo 'ad/lock.c: original size 2071, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/admin.c ============== if test -f 'ad/admin.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/admin.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/admin.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/admin.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Administrationsmenue */ /* */ /****************************************************************/ X #include <sys/types.h> #include <dirent.h> #include <string.h> #include <curses.h> #include <stdio.h> #include <ctype.h> X #include "ad.h" X /****************************************************************/ /* Menueeingabe */ /****************************************************************/ X void ad_admin() X { X char ch; /* Zeichen zum Einlesen */ X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X X while(1) X { X ad_read(0,&ch,1); /* einlesen */ X if(isupper(ch)) /* gross ? */ X ch=tolower(ch); X X ad_flush(); /* restliche Zeichen wegwerfen */ X X X if(ch==amenu[0][0]) /*** Uebungsspiel ***/ X { X gegner[0]=0; /* Computer ist Gegner */ X ad_game(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[1][0]) /*** Trainingssp. zeigen ***/ X { X ad_uliste(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[2][0]) /*** Trainingssp. loeschen ***/ X { X char *s; X char str[STRLEN*2]; X X s=ad_name('f'); X X sprintf(str,"%s.ch",s); X if(unlink(str) == -1) /* loeschen */ X ad_error(""); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[3][0]) /*** Weiss gegen Comp. ***/ X { X strcpy(gegner,"~"); X wei=0; X sch=1; X ad_game(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[4][0]) /*** Schw. gegen Comp. ***/ X { X strcpy(gegner,"~"); X wei=1; X sch=0; X ad_game(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[5][0]) /*** Weiss gegen Spieler ***/ X { X strcpy(gegner,ad_name('g')); X if(gegner[0]=='\0') /* Kein Gegner ? */ X continue; X wei=0; X sch=1; X ad_game(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[6][0]) /*** Schw. gegen Spieler ***/ X { X strcpy(gegner,ad_name('g')); X if(gegner[0]=='\0') /* Kein Gegner ? */ X continue; X wei=1; X sch=0; X ad_game(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[7][0]) /*** Turniersp. zeigen ***/ X { X ad_tliste(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[8][0]) /*** Highscoreliste zeigen ***/ X { X ad_showscore(); X X ad_admin_screen(); /* Bildaufbau */ X ad_amenu(); X move(23,79); X refresh(); /* ausgeben */ X } X else if(ch==amenu[9][0]) /*** Ende ***/ X { X if(ad_sure('s')) X break; X } X else if(ch!=' ') /* Space wird ign. */ X beep(); /*** Fehler ***/ X } } X /****************************************************************/ /* Turnierspielliste */ /****************************************************************/ X void ad_tliste() X { X char c; X int i,j,y=2; X DIR *dir; /* Directory - Pointer */ X struct dirent *dp; /* Pointer auf Eintrag */ X char str[STRLEN],str2[STRLEN]; /* String */ X char *s[3]; X X ad_admin_screen(); /* Bildaufbau */ X attrset(A_UNDERLINE|A_BOLD); /* Unterstreichen und Hell */ X mvaddstr(y,1,tlist); X attrset(0); /* Attribute aus */ X X if( (dir=opendir("save"))==(DIR *)0 ) /* oeffnen */ X { X ad_error(""); /* Fehler */ X return; X } X X while( (dp=readdir(dir)) != (struct dirent *)0 ) /* Ende ? */ X { X strcpy(str,dp->d_name); /* kopieren */ X X i=0; X j=0; X s[j++]=str; X while(str[i]!='\0') /* String aufbereiten */ X { X if(str[i]=='.') X { X str[i++]='\0'; /* beenden */ X s[j++]=str+i; X } X X if(j>=3) X break; X X i++; X } X X if(j==3) /* Spiel gefunden ? */ X { X if(y==21) /* Bildschirmende ? */ X { X attrset(A_BOLD);/* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ X X ad_admin_screen(); /* Bildaufbau */ X X y=2; X attrset(A_UNDERLINE|A_BOLD); X mvaddstr(y,1,tlist); X attrset(0); /* Attribute aus */ X } X X if(!strcmp(ad_id(getlogin()),s[0])) X attrset(A_BOLD); /* Hell */ X else X attrset(0); /* Normal */ X mvaddstr(++y,ADM_RAND,ad_revid(s[0])); X /* ausgeben */ X X if(!strcmp(ad_id(getlogin()),s[1])) X attrset(A_BOLD); /* Hell */ X else X attrset(0); /* Normal */ X mvaddstr(y,ADM_RAND+15,ad_revid(s[1])); X /* ausgeben */ X X sprintf(str2,"loadinfo save/%s.%s",s[0],s[1]); X /* Kommandostring */ X schach(str2,ptr); /* Info anfordern */ X X if(!strcmp(ad_id(getlogin()),ptr[0][0]=='w' ? s[0]:s[1])) X attrset(A_BOLD|A_BLINK);/* Hell & Blink */ X else X attrset(0); /* Normal */ X X mvaddstr(y,ADM_RAND+30,ptr[1]); /* Zuege */ X /* Farbe */ X mvaddstr(y,ADM_RAND+45,ptr[0][0]=='w' ? white:black); X X refresh(); X } X } X X closedir(dir); X X attrset(A_BOLD); /* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ } X /****************************************************************/ /* Trainingsspielliste */ /****************************************************************/ X void ad_uliste() X { X char c; X int i,j,y=2; X DIR *dir; /* Directory - Pointer */ X struct dirent *dp; /* Pointer auf Eintrag */ X char str[STRLEN],str2[STRLEN]; /* String */ X char *s[3]; X X ad_admin_screen(); /* Bildaufbau */ X attrset(A_UNDERLINE|A_BOLD); /* Unterstreichen und Hell */ X mvaddstr(y,1,ulist); X attrset(0); /* Attribute aus */ X X if( (dir=opendir("training"))==(DIR *)0 ) /* oeffnen */ X { X ad_error(""); /* Fehler */ X return; X } X X while( (dp=readdir(dir)) != (struct dirent *)0 ) /* Ende ? */ X { X strcpy(str,dp->d_name); /* kopieren */ X X i=0; X j=0; X s[j++]=str; X while(str[i]!='\0') /* String aufbereiten */ X { X if(str[i]=='.') X { X str[i++]='\0'; /* beenden */ X s[j++]=str+i; X } X X if(j>=3) X break; X X i++; X } X X if(j==3) /* Spiel gefunden ? */ X { X if(y==21) /* Bildschirmende ? */ X { X attrset(A_BOLD);/* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ X X ad_admin_screen(); /* Bildaufbau */ X X y=2; X attrset(A_UNDERLINE|A_BOLD); X mvaddstr(y,1,ulist); X attrset(0); /* Attribute aus */ X } X X attrset(0); /* Attribute aus */ X X if(strcmp(s[0],ad_id(getlogin()))) X /* Anderer Spieler ? */ X continue; X X mvaddstr(++y,ADM_RAND,ad_revid(s[0])); X mvaddstr(y,ADM_RAND+15,s[1]); /* ausgeben */ X X sprintf(str2,"loadinfo training/%s.%s",s[0],s[1]); X /* Kommandostring */ X schach(str2,ptr); /* Info anfordern */ X X mvaddstr(y,ADM_RAND+30,ptr[1]); /* Zuege */ X /* Farbe */ X mvaddstr(y,ADM_RAND+45,ptr[0][0]=='w' ? white:black); X X refresh(); X } X } X X closedir(dir); X X attrset(A_BOLD); /* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ } X SHAR_EOF chmod 0644 ad/admin.c || echo 'restore of ad/admin.c failed' Wc_c="`wc -c < 'ad/admin.c'`" test 7463 -eq "$Wc_c" || echo 'ad/admin.c: original size 7463, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/screen.c ============== if test -f 'ad/screen.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/screen.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/screen.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/screen.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Bildschirmaufbau */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <ctype.h> X #include "ad.h" #include "patchlevel.h" X /****************************************************************/ /* Spielmenue-Screen */ /****************************************************************/ X void ad_game_screen() X { X int x,y; X int ch; X X attrset(0); /* Alle Attribute aus */ X erase(); /* loeschen */ X X for(x=0;x<8*5;x++) /* Alle Felder aufbauen */ X for(y=0;y<8*3;y++) X { /* schwarz oder weiss ? */ X if(y==0 || y==23) /* oberste o. unterste */ X { /* Reihe ? */ X if(!((x-2)%5)) /* Beschriftung ? */ X ch=(x+2)/5+(int)'a'|A_REVERSE; X else /* Keine Beschriftung */ X ch=(int)' '|A_REVERSE; X } X else X ch=(int)' '|A_BOLD; /* Normales Feld */ X X if(!((x/5)%2) ^ ((y/3)%2)) /* schw. Feld ? */ X ch |= A_REVERSE; X X mvaddch(y,x+1,ch); /* eintragen */ X } X X for(y=0;y<8*3;y++) /* Linie ziehen */ X { X if(!((y-1)%3)) /* Beschriftung ? */ X ch=7-(y+1)/3+(int)'1'|A_REVERSE; X else /* Keine Beschriftung */ X ch=(int)' '|A_REVERSE; X X mvaddch(y,8*5+1,ch); X mvaddch(y,0,ch); X } X X attrset(A_REVERSE); /* Invers ein */ X mvaddstr(0 ,2+5*8,"UNIX-Chess V2.7 (c) 1991 by M.Laukien "); X attrset(0); X X attrset(A_REVERSE); /* Invers ein */ X mvaddstr(18,2+5*8," "); X addstr(figlist); /* Geschlagene Figuren */ X for(x=stdscr->_curx;x<79;x++) X addstr(" "); X attrset(0); X X for(y=0;y<23;y++) /* Rand */ X mvaddch(y,79,(int)' '|A_REVERSE); X X for(x=2+5*8;x<79;x++) /* Rand */ X mvaddch(23,x,(int)' '|A_REVERSE); } X /****************************************************************/ /* Spielmenue ausgeben */ /****************************************************************/ X void ad_menu() X { X int y=4; /* Koordinaten */ X int x; X char str[STRLEN]; /* String */ X char c1=' ',c2=' '; X X attrset(0); /* Alle Attribute aus */ X X if(TURNIER()) /* Turnierspiel ? */ X c1='*'; X X sprintf(str,"%c%s%d",c1,menu[0]+1,level+1);/* LEVEL */ X mvaddstr(++y,MPOS-1,str); X for(x=stdscr->_curx;x<79;x++) /* Rest der Zeile loeschen */ X mvaddch(y,x,(int)' '); X sprintf(str,"%c%s%s",c1,menu[1]+1,wei ? X (TURNGEG() ? gegner:comp) :getlogin()); X mvaddstr(++y,MPOS-1,str); /* WEISS */ X for(x=stdscr->_curx;x<79;x++) /* Rest der Zeile loeschen */ X mvaddch(y,x,(int)' '); X sprintf(str,"%c%s%s",c1,menu[2]+1,sch ? X (TURNGEG() ? gegner:comp) :getlogin()); X mvaddstr(++y,MPOS-1,str); /* SCHWARZ */ X for(x=stdscr->_curx;x<79;x++) /* Rest der Zeile loeschen */ X mvaddch(y,x,(int)' '); X if(TURNGEG()) X sprintf(str,"%c%s%s",c1,menu[3]+1,modus & 128 ? ison:isoff); X else X sprintf(str,"%c%s%s%c",' ',menu[3]+1,modus & 128 ? ison:isoff,' '); X mvaddstr(++y,MPOS-1,str); /* ANALYSE */ X for(x=stdscr->_curx;x<79;x++) /* Rest der Zeile loeschen */ X mvaddch(y,x,(int)' '); X sprintf(str,"%c%s",c1,menu[4]+1); X mvaddstr(++y,MPOS-1,str); /* SETUP */ X sprintf(str,"%c%s",c1,menu[5]+1); X mvaddstr(++y,MPOS-1,str); /* ZURUECK */ X sprintf(str," %s ",menu[6]+1); X mvaddstr(++y,MPOS-1,str); /* INFO */ X sprintf(str," %s ",menu[7]+1); X mvaddstr(++y,MPOS-1,str); /* NEUSTART */ X sprintf(str," %s ",menu[8]+1); X mvaddstr(++y,MPOS-1,str); /* ENDE */ X sprintf(str,"%c%s",c1,menu[9]+1); X mvaddstr(++y,MPOS-1,str); /* BREAK */ X } X /****************************************************************/ /* Adm.-Menue-Screen */ /****************************************************************/ X void ad_admin_screen() X { X int x,y; X char *header1= "UNIX-Chess V2.7 PL%-2d (c) 1991 by Marc Laukien "; X char *header2= "Opening-Library (c) 1990 by Christoph Thommes"; X char str[STRLEN]; X X sprintf(str,header1,PATCHLEVEL);/* aufbereiten */ X X attrset(0); /* Alle Attribute aus */ X erase(); /* loeschen */ X X for(x=0;x<79;x++) /* Bildschirmrand aufb. */ X { X mvaddch(0,x,(int)' '|A_REVERSE); X mvaddch(1,x,(int)' '|A_REVERSE); X mvaddch(23,x,(int)' '|A_REVERSE); X } X X for(y=0;y<23;y++) /* Bildschirmrand aufb. */ X { X mvaddch(y,0,(int)' '|A_REVERSE); X mvaddch(y,79,(int)' '|A_REVERSE); X } X X attrset(A_REVERSE); /* Invers ein */ X mvaddstr(0 ,ADM_RAND,str); X mvaddstr(1 ,ADM_RAND,header2); } X /****************************************************************/ /* Adm.-Menue ausgeben */ /****************************************************************/ X void ad_amenu() X { X int x,y=3; /* Koordinaten */ X char str[STRLEN]; X X attrset(A_BOLD); /* Hell ein */ X X sprintf(str,"%s",amenu[0]+1); X mvaddstr(y,ADM_RAND,str); /* TRAINING */ X sprintf(str,"%s",amenu[1]+1); X mvaddstr(++y,ADM_RAND,str); /* ZEIGE TRAININGSSP. */ X sprintf(str,"%s",amenu[2]+1); X mvaddstr(++y,ADM_RAND,str); /* LOESCHE TRAININGSSP. */ X X attrset(A_NORMAL); /* Hell aus */ X X y+=2; X for(x=1;x<79;x++) /* Trennstrich aufb. */ X mvaddch(y,x,(int)'-'|A_NORMAL); X X attrset(A_BOLD); /* Hell ein */ X X sprintf(str,"%s",amenu[3]+1); X mvaddstr(y+=2,ADM_RAND,str); /* TURNIER WEISS COMP */ X sprintf(str,"%s",amenu[4]+1); X mvaddstr(++y,ADM_RAND,str); /* TURNIER SCHWARZ COMP */ X sprintf(str,"%s",amenu[5]+1); X mvaddstr(y+=2,ADM_RAND,str); /* TURNIER WEISS */ X sprintf(str,"%s",amenu[6]+1); X mvaddstr(++y,ADM_RAND,str); /* TURNIER SCHWARZ */ X sprintf(str,"%s",amenu[7]+1); X mvaddstr(y+=2,ADM_RAND,str); /* ZEIGE TURNIERSP. */ X sprintf(str,"%s",amenu[8]+1); X mvaddstr(++y,ADM_RAND,str); /* ZEIGE HIGHSCORE */ X X attrset(A_NORMAL); /* Hell aus */ X X y+=2; X for(x=1;x<79;x++) /* Trennstrich aufb. */ X mvaddch(y,x,(int)'-'|A_NORMAL); X X attrset(A_BOLD); /* Hell ein */ X X sprintf(str,"%s",amenu[9]+1); X mvaddstr(y+=2,ADM_RAND,str); /* ENDE */ } X X SHAR_EOF chmod 0644 ad/screen.c || echo 'restore of ad/screen.c failed' Wc_c="`wc -c < 'ad/screen.c'`" test 5856 -eq "$Wc_c" || echo 'ad/screen.c: original size 5856, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/id.c ============== if test -f 'ad/id.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/id.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/id.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/id.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Spieler-ID liefern */ /* */ /****************************************************************/ X #include <curses.h> #include <pwd.h> #include "ad.h" X /****************************************************************/ /* String mit ID zu Username liefern */ /****************************************************************/ /* Return: String mit ID */ /****************************************************************/ X char *ad_id(name) X char *name; { X static char id[STRLEN]; X struct passwd *pwd; X X if(name[0]=='~' || strcmp(name,comp)==0) /* Rechner ? */ X return("~"); X X pwd=getpwnam(name); /* Passwordeintrag holen */ X X if(pwd!=(struct passwd *)0) /* Kein 0-Pointer ? */ X sprintf(id,"%d",pwd->pw_uid); X else X strcpy(id,"?"); X X return(id); } X /****************************************************************/ /* String mit Username zu ID liefern */ /****************************************************************/ /* Return: String mit Username */ /****************************************************************/ X char *ad_revid(id) X char *id; { X static char name[STRLEN]; X struct passwd *pwd; X X if(id[0]=='~') /* Rechner ? */ X return(comp); X X pwd=getpwuid(atoi(id)); /* Passwordeintrag holen */ X X if(pwd!=(struct passwd *)0) /* Kein 0-Pointer ? */ X sprintf(name,"%s",pwd->pw_name); X else X sprintf(name,"%s",id); X X return(name); } X X SHAR_EOF chmod 0644 ad/id.c || echo 'restore of ad/id.c failed' Wc_c="`wc -c < 'ad/id.c'`" test 1569 -eq "$Wc_c" || echo 'ad/id.c: original size 1569, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/score.c ============== if test -f 'ad/score.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/score.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/score.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/score.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Highscore */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <memory.h> #include "ad.h" X /****************************************************************/ /* Highscoreeintrag anhaengen */ /****************************************************************/ X void ad_addscore(stat) X char stat; /* Status */ { X FILE *fp; X long ti; X X ad_locksc(); /* locken */ X X if((fp=fopen("score.list","a"))==(FILE *)0) /* oeffnen */ X { X ad_error(""); X return; X } X X ti=time((long *)0); X X fprintf(fp,"%c %s ", X stat, X wei==0 ? ad_id(getlogin()):ad_id(gegner)); X X fprintf(fp,"%s ", X sch==0 ? ad_id(getlogin()):ad_id(gegner)); X X fprintf(fp,"# %s vs. %s %s", X wei==0 ? getlogin(): gegner[0]=='~' ? comp:gegner, X sch==0 ? getlogin(): gegner[0]=='~' ? comp:gegner, X ctime(&ti)); /* Datum */ X X fclose(fp); /* schliessen */ X X ad_unlocksc(); /* unlocken */ } X /****************************************************************/ /* Highscoreeintrag anhaengen fuer expire */ /****************************************************************/ X void ad_addscore_expire(stat,white,black) X char stat; /* Status */ char *white,*black; /* Spieler */ { X FILE *fp; X long ti; X X ad_locksc(); /* locken */ X X if((fp=fopen("score.list","a"))==(FILE *)0) /* oeffnen */ X { X ad_error(""); X return; X } X X ti=time((long *)0); X X fprintf(fp,"%c %s ",stat,ad_id(white)); X fprintf(fp,"%s ",ad_id(black)); X X fprintf(fp,"# (exp) %s vs. %s %s",white,black,ctime(&ti)); X /* Kommentar */ X X fclose(fp); /* schliessen */ X X ad_unlocksc(); /* unlocken */ } X /****************************************************************/ /* Highscore ausgeben */ /****************************************************************/ X void ad_showscore() X { X FILE *fp; X char c,s1[STRLEN],s2[STRLEN],str[STRLEN]; X int i,j,y=2,nr=0; X char *my_id; X X struct X { X char id[7]; /* User-ID */ X double score; /* Punkte */ X int nr; /* Anzahl der Spiele */ X int comp; /* Davon gegen den Computer */ X } score[1000],copy; X X if((fp=fopen("score.list","r"))==(FILE *)0) /* oeffnen */ X { X ad_error(""); X return; X } X X while(!feof(fp) && nr<1000) /* Dateiende ? */ X { X if(fgets(str,STRLEN,fp)==(char *)0) /* einlesen */ X continue; X sscanf(str,"%c %s %s",&c,s1,s2); X X for(i=0;i<nr;i++) /* Spieler 1 suchen */ X if(!strcmp(score[i].id,s1)) X break; X X if(i==nr) /* Neueintrag ? */ X { X strcpy(score[i].id,s1); /* Name kopieren */ X score[i].score=1000.0; /* Punkte */ X score[i].nr=0; X score[i].comp=0; X nr++; X } X X for(j=0;j<nr;j++) /* Spieler 2 suchen */ X if(!strcmp(score[j].id,s2)) X break; X X if(j==nr) /* Neueintrag ? */ X { X strcpy(score[j].id,s2); /* Name kopieren */ X score[j].score=1000.0; /* Punkte */ X score[j].nr=0; X score[j].comp=0; X nr++; X } X X score[i].nr++; /* Ein Spiel mehr */ X score[j].nr++; X X if(s1[0] == '~') /* Computer ? */ X score[j].comp++; X if(s2[0] == '~') X score[i].comp++; X X switch(c) /* Score veraendern */ X { X case 'w': /* Gewinn Weiss */ X case 'W': X score[i].score += score[j].score/4; X score[j].score -= score[j].score/4; X break; X X case 'b': /* Gewinn Schwarz */ X case 'B': X score[j].score += score[i].score/4; X score[i].score -= score[i].score/4; X break; X } X } X X fclose(fp); X X ad_admin_screen(); /* Bildaufbau */ X attrset(A_UNDERLINE|A_BOLD); /* Unterstreichen und Hell */ X mvaddstr(y,1,scorelist); X attrset(0); /* Attribute aus */ X X for(i=0 ;i<nr-1;i++) /* sortieren */ X for(j=i+1;j<nr ;j++) X if(score[i].score < score[j].score) X { X memcpy((char *)©,(char *)&score[i],sizeof(copy)); X memcpy((char *)&score[i],(char *)&score[j],sizeof(copy)); X memcpy((char *)&score[j],(char *)©,sizeof(copy)); X } X X my_id=ad_id(getlogin()); /* ID des Benutzers */ X X for(i=0;i<nr;i++) X { X if(y==21) /* Bildschirmende ? */ X { X attrset(A_BOLD);/* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ X X ad_admin_screen(); /* Bildaufbau */ X X y=2; X attrset(A_UNDERLINE|A_BOLD); X mvaddstr(y,1,scorelist); X attrset(0); /* Attribute aus */ X } X X sprintf(s1,"%6.0lf",score[i].score); X sprintf(s2,"%d",score[i].nr); X sprintf(str,"%d",score[i].comp); X X if(!strcmp(my_id,score[i].id)) X attrset(A_BLINK); /* Blinken */ X else if(i<3) /* Top 3 ? */ X attrset(A_BOLD); /* Hell */ X else X attrset(0); /* Normal */ X X mvaddstr(++y,ADM_RAND,ad_revid(score[i].id)); X mvaddstr(y,ADM_RAND+15,s2); X mvaddstr(y,ADM_RAND+30,str); X mvaddstr(y,ADM_RAND+45,s1); /* ausgeben */ X } X X fclose(fp); X X attrset(A_BOLD); /* Hell */ X mvaddstr(++y,ADM_RAND,press_key); /* TASTE */ X move(23,79); X refresh(); /* ausgeben */ X X ad_read(0,&c,1); /* auf Taste warten */ } X SHAR_EOF chmod 0644 ad/score.c || echo 'restore of ad/score.c failed' Wc_c="`wc -c < 'ad/score.c'`" test 5003 -eq "$Wc_c" || echo 'ad/score.c: original size 5003, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/training.c ============== if test -f 'ad/training.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/training.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/training.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/training.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Uebungsspiel */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <ctype.h> #include <sys/types.h> #include "ad.h" X /****************************************************************/ /* Uebungsspiel */ /****************************************************************/ X void ad_tr_game() X { X char ch='\0'; /* Eingabe */ X char s[STRLEN]; /* String */ X int ret; /* Return von domenu */ X X sprintf(stdname,"training/%s.std",ad_id(getlogin())); X X ad_lock(); X sprintf(s,"load %s",stdname); X schach(s,ptr); /* Laden */ X ad_unlock(); X X schach("info",ptr); /* Info holen */ X modus = atoi(ptr[9]); /* merken */ X farbe = ptr[0][0]; X level = atoi(ptr[6]); X X if(farbe=='w') /* Farbe einst. */ X { X wei=0; X sch=1; X } X else X { X sch=0; X wei=1; X } X X ad_menu(); /* Menue ausgeben */ X ad_brett(); /* Brett aufbauen */ X refresh(); /* ausgeben */ X X while(1) X { X /*--- Computer -----------------------------------------*/ X if(!ende && ((farbe=='w' && wei) || (farbe=='s' && sch))) X { /* Computerzug */ X int x; X X mvaddstr(2,MPOS,thinking);/* Status ausgeben */ X move(23,79); X refresh(); X X schach("comp",ptr); /* Zug holen */ X X ad_brett(); /* Brett aufbauen */ X X schach("info",ptr); /* Info holen */ X farbe=ptr[0][0]; /* Farbe am Zug */ X X move(2,MPOS); /* Meldung loeschen */ X for(x=stdscr->_curx;x<79;x++) /* loeschen */ X mvaddch(stdscr->_cury,x,(int)' '); X } X else X /*--- Spieler ------------------------------------------*/ X { X if(ch=='\0') X ad_read(0,&ch,1);/* einlesen */ X X if(isupper(ch)) /* gross ? */ X ch=tolower(ch); X X ad_flush(); /* restliche Zeichen wegwerfen */ X X ret=ad_domenu(ch); /* auswerten */ X X if(ret==0) /* Ende ? */ X { X ad_lock(); X sprintf(s,"save %s",stdname); X schach(s,ptr); /* Speichern */ X ad_unlock(); X break; X } X else if(ret==2) /* Neustart ? */ X { X if(ad_sure('s')) X ad_new(); X } X } X X ch='\0'; X X /*--- Abbruch der Demo ---------------------------------*/ X X if(wei && sch) /* Demo ? */ X { X int flags; /* Flags fuer ad_read() */ X int ret; X X flags=fcntl(0,F_GETFL,0); /* flags retten */ X X fcntl(0,F_SETFL,flags | O_NDELAY); /* block aus */ X ret=ad_read(0,&ch,1); /* einlesen */ X fcntl(0,F_SETFL,flags & ~O_NDELAY);/* block ein */ X X ad_flush(); /* restliche Zeichen wegwerfen */ X if(ret>0 || ende) /* stopp ? */ X { X if(farbe=='w') X wei=0; X else X sch=0; X X ad_menu(); X } X else X ch='\0'; X } X X /*--- alles ausgeben ---------------------------*/ X X move(23,79); /* Cursor weg */ X refresh(); /* ausgeben */ X } X X stdname[0]='\0'; /* Kein Standardname */ } SHAR_EOF chmod 0644 ad/training.c || echo 'restore of ad/training.c failed' Wc_c="`wc -c < 'ad/training.c'`" test 2942 -eq "$Wc_c" || echo 'ad/training.c: original size 2942, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/tour_user.c ============== if test -f 'ad/tour_user.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/tour_user.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/tour_user.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/tour_user.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Spielmenue */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <ctype.h> #include <time.h> #include <sys/types.h> X #include "ad.h" X /****************************************************************/ /* Turnierspiel gegen ext. Gegner */ /****************************************************************/ X void ad_tu_game() X { X char ch='\0'; /* Eingabe */ X char s[STRLEN]; /* String */ X int ret; /* Return von domenu */ X X /* Pfad zum Speichern */ X sprintf(stdname,"save/%s",wei==0 ? ad_id(getlogin()): X ad_id(gegner)); X sprintf(stdname+strlen(stdname),".%s", sch==0 ? X ad_id(getlogin()):ad_id(gegner)); X X ad_lock(); X sprintf(s,"load %s",stdname); X schach(s,ptr); /* Laden */ X X if(ptr[0][0]=='?') /* existiert noch nicht ? */ X { X sprintf(s,"save %s",stdname); X schach(s,ptr); /* Laden */ X } X X ad_unlock(); X X schach("info",ptr); /* Info holen */ X modus = atoi(ptr[9]); /* merken */ X farbe = ptr[0][0]; X level = atoi(ptr[6]); X X ad_menu(); /* Menue ausgeben */ X ad_brett(); /* Brett aufbauen */ X refresh(); /* ausgeben */ X X while(1) X { X /*--- Spielendeueberpruefung ---------------------------*/ X if(ende) /* Spiel zu Ende ? */ X { X switch(ende) X { X case W_AUFG: /* Weiss gibt auf */ X case W_MATT: /* Weiss ist matt */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X X if((farbe=='w' && W_IS_USER()) X || (farbe=='s' && B_IS_USER())) X { /* wer am Zug ist, traegt ein */ X ad_remove(); X ad_addscore('B');/* Score */ X } X X break; X X case S_AUFG: /* Schwarz gibt auf */ X case S_MATT: /* Schwarz ist matt */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X X if((farbe=='w' && W_IS_USER()) X || (farbe=='s' && B_IS_USER())) X { /* wer am Zug ist, traegt ein */ X ad_remove(); X ad_addscore('W');/* Score */ X } X X break; X X case PATT: /* Unentschieden */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X X if((farbe=='w' && W_IS_USER()) X || (farbe=='s' && B_IS_USER())) X { /* wer am Zug ist, traegt ein */ X ad_remove(); X ad_addscore('-');/* Score */ X } X X break; X } X X break; /* Ende */ X } X /*--- Externer Gegner -----------------------------------*/ X else if((farbe=='w' && W_IS_OPP()) X || (farbe=='s' && B_IS_OPP())) X { X int flags; /* Flags fuer ad_read() */ X int ret; X int x; X char str[STRLEN]; X X sprintf(str,"%s %s",gegner,is_thinking); X mvaddstr(2,MPOS,str); /* Status ausgeben*/ X move(23,79); X refresh(); X ad_extzug(); X X move(2,MPOS); /* Meldung loeschen */ X for(x=stdscr->_curx;x<79;x++) /* loeschen*/ X mvaddch(stdscr->_cury,x,(int)' '); X X move(23,79); X refresh(); X X /*--- Benutzereingabe 1 ----------------*/ X X flags=fcntl(0,F_GETFL,0);/* flags retten */ X X fcntl(0,F_SETFL,flags | O_NDELAY); X ret=ad_read(0,&ch,1); /* einlesen */ X fcntl(0,F_SETFL,flags & ~O_NDELAY); X X if(ret==0) X ch=' '; X } X X /*--- Benutzereingabe 2 ------------------------*/ X { X if(ch=='\0') X ad_read(0,&ch,1);/* einlesen */ X X if(isupper(ch)) /* gross ? */ X ch=tolower(ch); X X ad_flush(); /* restliche Zeichen wegwerfen */ X X ret=ad_domenu(ch); /* auswerten */ X X if(ret==0) /* Ende ? */ X break; X else if(ret==2) X { X if((farbe=='w' && wei) || (farbe=='s' && sch)) X ad_error(not_allowed); X else if(ad_sure('a')) X { X move(3,MPOS); X X addstr(wei==0 ? w_up:b_up); X ende = wei==0 ? W_AUFG:S_AUFG; X } X } X } X X ch='\0'; X X /*--- alles ausgeben ---------------------------*/ X X move(23,79); /* Cursor weg */ X refresh(); /* ausgeben */ X } X X stdname[0]='\0'; /* Kein Standardname */ } SHAR_EOF chmod 0644 ad/tour_user.c || echo 'restore of ad/tour_user.c failed' Wc_c="`wc -c < 'ad/tour_user.c'`" test 4036 -eq "$Wc_c" || echo 'ad/tour_user.c: original size 4036, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= ad/tour_comp.c ============== if test -f 'ad/tour_comp.c' -a X"$1" != X"-c"; then echo 'x - skipping ad/tour_comp.c (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting ad/tour_comp.c (Text)' sed 's/^X//' << 'SHAR_EOF' > 'ad/tour_comp.c' && /****************************************************************/ /* */ /* XChess V2.7 Adapter: Curses */ /* */ /* (c) 1991 by Marc Laukien */ /* */ /* Programmteil: Turnierspiel gegen Computer */ /* */ /****************************************************************/ X #include <curses.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <ctype.h> #include <time.h> #include <sys/types.h> #include "ad.h" X /****************************************************************/ /* Turnierspiel gegen Computer */ /****************************************************************/ X void ad_tc_game() X { X char ch; /* Eingabe */ X char s[STRLEN]; /* String */ X int ret; /* return von domenu */ X X /* Pfad zum Speichern */ X sprintf(stdname,"save/%s",wei==0 ? ad_id(getlogin()): X ad_id(gegner)); X sprintf(stdname+strlen(stdname),".%s", sch==0 ? X ad_id(getlogin()):ad_id(gegner)); X X ad_lock(); X sprintf(s,"load %s",stdname); X schach(s,ptr); /* Laden */ X ad_unlock(); X X schach("info",ptr); /* Info holen */ X modus = atoi(ptr[9]); /* merken */ X farbe = ptr[0][0]; X level = atoi(ptr[6]); X X old_moves = atoi(ptr[1]); /* Anzahl der Zuege */ X X ad_menu(); /* Menue ausgeben */ X ad_brett(); /* Brett aufbauen */ X refresh(); /* ausgeben */ X X while(1) X { X /*--- Spielendeueberpruefung ---------------------------*/ X if(ende) /* Spiel zu Ende ? */ X { X switch(ende) X { X case W_AUFG: /* Weiss gibt auf */ X case W_MATT: /* Weiss ist matt */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X ad_remove(); X ad_addscore('B');/* Score */ X break; X X case S_AUFG: /* Schwarz gibt auf */ X case S_MATT: /* Schwarz ist matt */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X ad_remove(); X ad_addscore('W');/* Score */ X break; X X case PATT: /* Unentschieden */ X mvaddstr(2,MPOS,press_key); X move(23,79); X refresh(); X ad_read(0,&ch,1);/* einlesen */ X ad_remove(); X ad_addscore('-');/* Score */ X break; X } X X break; /* Ende */ X } X /*--- Computer -----------------------------------------*/ SHAR_EOF true || echo 'restore of ad/tour_comp.c failed' fi echo 'End of UnixChess part 3' echo 'File ad/tour_comp.c is continued in part 4' echo 4 > _shar_seq_.tmp exit 0 -- / | -: Marc Laukien :- | /__ | | _ _ __ / \ /_ / / | ml@brumuc.muc.sub.org | / \/ | / / / /____/ / /__/ | sigma@salyko.doit.sub.org | / | /__/ /__