Annotation of 42BSD/games/backgammon/save.c, revision 1.1.1.1

1.1       root        1: static char    sccsid[] = "    save.c  4.2     82/11/27        ";
                      2: 
                      3: #include "back.h"
                      4: 
                      5: extern int     errno;
                      6: 
                      7: static char    confirm[] = "Are you sure you want to leave now?";
                      8: static char    prompt[] = "Enter a file name:  ";
                      9: static char    exist1[] = "The file '";
                     10: static char    exist2[] =
                     11:        "' already exists.\nAre you sure you want to use this file?";
                     12: static char    cantuse[] = "\nCan't use ";
                     13: static char    saved[] = "This game has been saved on the file '";
                     14: static char    type[] = "'.\nType \"backgammon ";
                     15: static char    rec[] = "\" to recover your game.\n\n";
                     16: static char    cantrec[] = "Can't recover file:  ";
                     17: 
                     18: save (n)
                     19: register int   n;
                     20: 
                     21: {
                     22:        register int    fdesc;
                     23:        register char   *fs;
                     24:        char            fname[50];
                     25: 
                     26:        if (n)  {
                     27:                if (tflag)  {
                     28:                        curmove (20,0);
                     29:                        clend();
                     30:                } else
                     31:                        writec ('\n');
                     32:                writel (confirm);
                     33:                if (! yorn(0))
                     34:                        return;
                     35:        }
                     36:        cflag = 1;
                     37:        for (;;)  {
                     38:                writel (prompt);
                     39:                fs = fname;
                     40:                while ((*fs = readc()) != '\n')  {
                     41:                        if (*fs == tty.sg_erase)  {
                     42:                                if (fs > fname)  {
                     43:                                        fs--;
                     44:                                        if (tflag)
                     45:                                                curmove (curr,curc-1);
                     46:                                        else
                     47:                                                writec (*fs);
                     48:                                } else
                     49:                                        writec ('\007');
                     50:                                continue;
                     51:                        }
                     52:                        writec (*fs++);
                     53:                }
                     54:                *fs = '\0';
                     55:                if ((fdesc = open(fname,2)) == -1 && errno == 2)  {
                     56:                        if ((fdesc = creat (fname,0700)) != -1)
                     57:                        break;
                     58:                }
                     59:                if (fdesc != -1)  {
                     60:                        if (tflag)  {
                     61:                                curmove (18,0);
                     62:                                clend();
                     63:                        } else
                     64:                                writec ('\n');
                     65:                        writel (exist1);
                     66:                        writel (fname);
                     67:                        writel (exist2);
                     68:                        cflag = 0;
                     69:                        close (fdesc);
                     70:                        if (yorn (0))  {
                     71:                                unlink (fname);
                     72:                                fdesc = creat (fname,0700);
                     73:                                break;
                     74:                        } else  {
                     75:                                cflag = 1;
                     76:                                continue;
                     77:                        }
                     78:                }
                     79:                writel (cantuse);
                     80:                writel (fname);
                     81:                writel (".\n");
                     82:                close (fdesc);
                     83:                cflag = 1;
                     84:        }
                     85:        write (fdesc,board,sizeof board);
                     86:        write (fdesc,off,sizeof off);
                     87:        write (fdesc,in,sizeof in);
                     88:        write (fdesc,dice,sizeof dice);
                     89:        write (fdesc,&cturn,sizeof cturn);
                     90:        write (fdesc,&dlast,sizeof dlast);
                     91:        write (fdesc,&pnum,sizeof pnum);
                     92:        write (fdesc,&rscore,sizeof rscore);
                     93:        write (fdesc,&wscore,sizeof wscore);
                     94:        write (fdesc,&gvalue,sizeof gvalue);
                     95:        write (fdesc,&raflag,sizeof raflag);
                     96:        close (fdesc);
                     97:        if (tflag)
                     98:                curmove (18,0);
                     99:        writel (saved);
                    100:        writel (fname);
                    101:        writel (type);
                    102:        writel (fname);
                    103:        writel (rec);
                    104:        if (tflag)
                    105:                clend();
                    106:        getout ();
                    107: }
                    108: 
                    109: recover (s)
                    110: char   *s;
                    111: 
                    112: {
                    113:        register int    i;
                    114:        int             fdesc;
                    115: 
                    116:        if ((fdesc = open (s,0)) == -1)
                    117:                norec (s);
                    118:        read (fdesc,board,sizeof board);
                    119:        read (fdesc,off,sizeof off);
                    120:        read (fdesc,in,sizeof in);
                    121:        read (fdesc,dice,sizeof dice);
                    122:        read (fdesc,&cturn,sizeof cturn);
                    123:        read (fdesc,&dlast,sizeof dlast);
                    124:        read (fdesc,&pnum,sizeof pnum);
                    125:        read (fdesc,&rscore,sizeof rscore);
                    126:        read (fdesc,&wscore,sizeof wscore);
                    127:        read (fdesc,&gvalue,sizeof gvalue);
                    128:        read (fdesc,&raflag,sizeof raflag);
                    129:        close (fdesc);
                    130:        rflag = 1;
                    131: }
                    132: 
                    133: norec (s)
                    134: register char  *s;
                    135: 
                    136: {
                    137:        register char   *c;
                    138: 
                    139:        tflag = 0;
                    140:        writel (cantrec);
                    141:        c = s;
                    142:        while (*c != '\0')
                    143:                writec (*c++);
                    144:        getout ();
                    145: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.