Mercurial > hg > early-roguelike
comparison rogue4/state.c @ 279:d3968e9cb98d
Use C stdio functions for score files and save files.
Switching from Unix file descriptor operations to C standard FILE*
functions will reduce portability problems.
| author | John "Elwin" Edwards |
|---|---|
| date | Fri, 15 Sep 2017 19:57:54 -0400 |
| parents | b49d8b963df3 |
| children | e52a8a7ad4c5 |
comparison
equal
deleted
inserted
replaced
| 278:c222f9d56776 | 279:d3968e9cb98d |
|---|---|
| 69 | 69 |
| 70 #define READSTAT ((format_error == 0) && (read_error == 0)) | 70 #define READSTAT ((format_error == 0) && (read_error == 0)) |
| 71 #define WRITESTAT (write_error == 0) | 71 #define WRITESTAT (write_error == 0) |
| 72 | 72 |
| 73 int rs_write_int(FILE *savef, int c); | 73 int rs_write_int(FILE *savef, int c); |
| 74 int rs_read_int(int inf, int *i); | 74 int rs_read_int(FILE *inf, int *i); |
| 75 | 75 |
| 76 int read_error = FALSE; | 76 int read_error = FALSE; |
| 77 int write_error = FALSE; | 77 int write_error = FALSE; |
| 78 int format_error = FALSE; | 78 int format_error = FALSE; |
| 79 int end_of_file = FALSE; | 79 int end_of_file = FALSE; |
| 419 | 419 |
| 420 return(WRITESTAT); | 420 return(WRITESTAT); |
| 421 } | 421 } |
| 422 | 422 |
| 423 int | 423 int |
| 424 rs_read(int inf, void *ptr, int size) | 424 rs_read(FILE *inf, void *ptr, int size) |
| 425 { | 425 { |
| 426 int actual; | 426 int actual; |
| 427 | 427 |
| 428 end_of_file = FALSE; | 428 end_of_file = FALSE; |
| 429 | 429 |
| 449 | 449 |
| 450 return(READSTAT); | 450 return(READSTAT); |
| 451 } | 451 } |
| 452 | 452 |
| 453 int | 453 int |
| 454 rs_read_char(int inf, char *c) | 454 rs_read_char(FILE *inf, char *c) |
| 455 { | 455 { |
| 456 rs_read(inf, c, 1); | 456 rs_read(inf, c, 1); |
| 457 | 457 |
| 458 return(READSTAT); | 458 return(READSTAT); |
| 459 } | 459 } |
| 460 int | 460 int |
| 461 rs_read_uchar(int inf, unsigned char *c) | 461 rs_read_uchar(FILE *inf, unsigned char *c) |
| 462 { | 462 { |
| 463 rs_read(inf, c, 1); | 463 rs_read(inf, c, 1); |
| 464 | 464 |
| 465 return(READSTAT); | 465 return(READSTAT); |
| 466 } | 466 } |
| 467 | 467 |
| 468 int | 468 int |
| 469 rs_read_boolean(int inf, bool *i) | 469 rs_read_boolean(FILE *inf, bool *i) |
| 470 { | 470 { |
| 471 unsigned char buf; | 471 unsigned char buf; |
| 472 | 472 |
| 473 rs_read(inf, &buf, 1); | 473 rs_read(inf, &buf, 1); |
| 474 | 474 |
| 476 | 476 |
| 477 return(READSTAT); | 477 return(READSTAT); |
| 478 } | 478 } |
| 479 | 479 |
| 480 int | 480 int |
| 481 rs_read_booleans(int inf, bool *i, int count) | 481 rs_read_booleans(FILE *inf, bool *i, int count) |
| 482 { | 482 { |
| 483 int n = 0, value = 0; | 483 int n = 0, value = 0; |
| 484 | 484 |
| 485 if (rs_read_int(inf,&value) != 0) | 485 if (rs_read_int(inf,&value) != 0) |
| 486 { | 486 { |
| 498 | 498 |
| 499 return(READSTAT); | 499 return(READSTAT); |
| 500 } | 500 } |
| 501 | 501 |
| 502 int | 502 int |
| 503 rs_read_shint(int inf, shint *i) | 503 rs_read_shint(FILE *inf, shint *i) |
| 504 { | 504 { |
| 505 unsigned char buf; | 505 unsigned char buf; |
| 506 | 506 |
| 507 rs_read(inf, &buf, 1); | 507 rs_read(inf, &buf, 1); |
| 508 | 508 |
| 510 | 510 |
| 511 return(READSTAT); | 511 return(READSTAT); |
| 512 } | 512 } |
| 513 | 513 |
| 514 int | 514 int |
| 515 rs_read_short(int inf, short *i) | 515 rs_read_short(FILE *inf, short *i) |
| 516 { | 516 { |
| 517 unsigned char bytes[2]; | 517 unsigned char bytes[2]; |
| 518 short input; | 518 short input; |
| 519 unsigned char *buf = (unsigned char *)&input; | 519 unsigned char *buf = (unsigned char *)&input; |
| 520 | 520 |
| 531 | 531 |
| 532 return(READSTAT); | 532 return(READSTAT); |
| 533 } | 533 } |
| 534 | 534 |
| 535 int | 535 int |
| 536 rs_read_shorts(int inf, short *i, int count) | 536 rs_read_shorts(FILE *inf, short *i, int count) |
| 537 { | 537 { |
| 538 int n = 0, value = 0; | 538 int n = 0, value = 0; |
| 539 | 539 |
| 540 if (rs_read_int(inf,&value) != 0) | 540 if (rs_read_int(inf,&value) != 0) |
| 541 { | 541 { |
| 550 | 550 |
| 551 return(READSTAT); | 551 return(READSTAT); |
| 552 } | 552 } |
| 553 | 553 |
| 554 int | 554 int |
| 555 rs_read_ushort(int inf, unsigned short *i) | 555 rs_read_ushort(FILE *inf, unsigned short *i) |
| 556 { | 556 { |
| 557 unsigned char bytes[2]; | 557 unsigned char bytes[2]; |
| 558 unsigned short input; | 558 unsigned short input; |
| 559 unsigned char *buf = (unsigned char *)&input; | 559 unsigned char *buf = (unsigned char *)&input; |
| 560 | 560 |
| 571 | 571 |
| 572 return(READSTAT); | 572 return(READSTAT); |
| 573 } | 573 } |
| 574 | 574 |
| 575 int | 575 int |
| 576 rs_read_int(int inf, int *i) | 576 rs_read_int(FILE *inf, int *i) |
| 577 { | 577 { |
| 578 unsigned char bytes[4]; | 578 unsigned char bytes[4]; |
| 579 int input; | 579 int input; |
| 580 unsigned char *buf = (unsigned char *)&input; | 580 unsigned char *buf = (unsigned char *)&input; |
| 581 | 581 |
| 594 | 594 |
| 595 return(READSTAT); | 595 return(READSTAT); |
| 596 } | 596 } |
| 597 | 597 |
| 598 int | 598 int |
| 599 rs_read_ints(int inf, int *i, int count) | 599 rs_read_ints(FILE *inf, int *i, int count) |
| 600 { | 600 { |
| 601 int n = 0, value = 0; | 601 int n = 0, value = 0; |
| 602 | 602 |
| 603 if (rs_read_int(inf,&value) != 0) | 603 if (rs_read_int(inf,&value) != 0) |
| 604 { | 604 { |
| 613 | 613 |
| 614 return(READSTAT); | 614 return(READSTAT); |
| 615 } | 615 } |
| 616 | 616 |
| 617 int | 617 int |
| 618 rs_read_uint(int inf, unsigned int *i) | 618 rs_read_uint(FILE *inf, unsigned int *i) |
| 619 { | 619 { |
| 620 unsigned char bytes[4]; | 620 unsigned char bytes[4]; |
| 621 int input; | 621 int input; |
| 622 unsigned char *buf = (unsigned char *)&input; | 622 unsigned char *buf = (unsigned char *)&input; |
| 623 | 623 |
| 636 | 636 |
| 637 return(READSTAT); | 637 return(READSTAT); |
| 638 } | 638 } |
| 639 | 639 |
| 640 int | 640 int |
| 641 rs_read_long(int inf, long *i) | 641 rs_read_long(FILE *inf, long *i) |
| 642 { | 642 { |
| 643 unsigned char bytes[4]; | 643 unsigned char bytes[4]; |
| 644 long input; | 644 long input; |
| 645 unsigned char *buf = (unsigned char *) &input; | 645 unsigned char *buf = (unsigned char *) &input; |
| 646 | 646 |
| 659 | 659 |
| 660 return(READSTAT); | 660 return(READSTAT); |
| 661 } | 661 } |
| 662 | 662 |
| 663 int | 663 int |
| 664 rs_read_longs(int inf, long *i, int count) | 664 rs_read_longs(FILE *inf, long *i, int count) |
| 665 { | 665 { |
| 666 int n = 0, value = 0; | 666 int n = 0, value = 0; |
| 667 | 667 |
| 668 if (rs_read_int(inf,&value) != 0) | 668 if (rs_read_int(inf,&value) != 0) |
| 669 { | 669 { |
| 678 | 678 |
| 679 return(READSTAT); | 679 return(READSTAT); |
| 680 } | 680 } |
| 681 | 681 |
| 682 int | 682 int |
| 683 rs_read_ulong(int inf, unsigned long *i) | 683 rs_read_ulong(FILE *inf, unsigned long *i) |
| 684 { | 684 { |
| 685 unsigned char bytes[4]; | 685 unsigned char bytes[4]; |
| 686 unsigned long input; | 686 unsigned long input; |
| 687 unsigned char *buf = (unsigned char *) &input; | 687 unsigned char *buf = (unsigned char *) &input; |
| 688 | 688 |
| 701 | 701 |
| 702 return(READSTAT); | 702 return(READSTAT); |
| 703 } | 703 } |
| 704 | 704 |
| 705 int | 705 int |
| 706 rs_read_ulongs(int inf, unsigned long *i, int count) | 706 rs_read_ulongs(FILE *inf, unsigned long *i, int count) |
| 707 { | 707 { |
| 708 int n = 0, value = 0; | 708 int n = 0, value = 0; |
| 709 | 709 |
| 710 if (rs_read_int(inf,&value) != 0) | 710 if (rs_read_int(inf,&value) != 0) |
| 711 { | 711 { |
| 720 | 720 |
| 721 return(READSTAT); | 721 return(READSTAT); |
| 722 } | 722 } |
| 723 | 723 |
| 724 int | 724 int |
| 725 rs_read_string(int inf, char *s, int max) | 725 rs_read_string(FILE *inf, char *s, int max) |
| 726 { | 726 { |
| 727 int len = 0; | 727 int len = 0; |
| 728 | 728 |
| 729 if (rs_read_int(inf, &len) != FALSE) | 729 if (rs_read_int(inf, &len) != FALSE) |
| 730 { | 730 { |
| 740 | 740 |
| 741 return(READSTAT); | 741 return(READSTAT); |
| 742 } | 742 } |
| 743 | 743 |
| 744 int | 744 int |
| 745 rs_read_new_string(int inf, char **s) | 745 rs_read_new_string(FILE *inf, char **s) |
| 746 { | 746 { |
| 747 int len=0; | 747 int len=0; |
| 748 char *buf=0; | 748 char *buf=0; |
| 749 | 749 |
| 750 if (rs_read_int(inf, &len) != 0) | 750 if (rs_read_int(inf, &len) != 0) |
| 767 | 767 |
| 768 return(READSTAT); | 768 return(READSTAT); |
| 769 } | 769 } |
| 770 | 770 |
| 771 int | 771 int |
| 772 rs_read_string_index(int inf, const char *master[], int maxindex, | 772 rs_read_string_index(FILE *inf, const char *master[], int maxindex, |
| 773 const char **str) | 773 const char **str) |
| 774 { | 774 { |
| 775 int i; | 775 int i; |
| 776 | 776 |
| 777 if (rs_read_int(inf,&i) != 0) | 777 if (rs_read_int(inf,&i) != 0) |
| 790 | 790 |
| 791 return(READSTAT); | 791 return(READSTAT); |
| 792 } | 792 } |
| 793 | 793 |
| 794 int | 794 int |
| 795 rs_read_strings(int inf, char **s, int count, int max) | 795 rs_read_strings(FILE *inf, char **s, int count, int max) |
| 796 { | 796 { |
| 797 int n = 0; | 797 int n = 0; |
| 798 int value = 0; | 798 int value = 0; |
| 799 | 799 |
| 800 if (rs_read_int(inf,&value) != 0) | 800 if (rs_read_int(inf,&value) != 0) |
| 817 | 817 |
| 818 return(READSTAT); | 818 return(READSTAT); |
| 819 } | 819 } |
| 820 | 820 |
| 821 int | 821 int |
| 822 rs_read_new_strings(int inf, char **s, int count) | 822 rs_read_new_strings(FILE *inf, char **s, int count) |
| 823 { | 823 { |
| 824 int len = 0; | 824 int len = 0; |
| 825 int n = 0; | 825 int n = 0; |
| 826 int value = 0; | 826 int value = 0; |
| 827 | 827 |
| 861 | 861 |
| 862 return(WRITESTAT); | 862 return(WRITESTAT); |
| 863 } | 863 } |
| 864 | 864 |
| 865 int | 865 int |
| 866 rs_read_str_t(int inf, str_t *st) | 866 rs_read_str_t(FILE *inf, str_t *st) |
| 867 { | 867 { |
| 868 rs_read_uint(inf,st); | 868 rs_read_uint(inf,st); |
| 869 | 869 |
| 870 return(READSTAT); | 870 return(READSTAT); |
| 871 } | 871 } |
| 878 | 878 |
| 879 return(WRITESTAT); | 879 return(WRITESTAT); |
| 880 } | 880 } |
| 881 | 881 |
| 882 int | 882 int |
| 883 rs_read_coord(int inf, coord *c) | 883 rs_read_coord(FILE *inf, coord *c) |
| 884 { | 884 { |
| 885 rs_read_shint(inf,&c->x); | 885 rs_read_shint(inf,&c->x); |
| 886 rs_read_shint(inf,&c->y); | 886 rs_read_shint(inf,&c->y); |
| 887 | 887 |
| 888 return(READSTAT); | 888 return(READSTAT); |
| 905 | 905 |
| 906 return(WRITESTAT); | 906 return(WRITESTAT); |
| 907 } | 907 } |
| 908 | 908 |
| 909 int | 909 int |
| 910 rs_read_window(int inf, WINDOW *win) | 910 rs_read_window(FILE *inf, WINDOW *win) |
| 911 { | 911 { |
| 912 int id,row,col,maxlines,maxcols,value,width,height; | 912 int id,row,col,maxlines,maxcols,value,width,height; |
| 913 | 913 |
| 914 width = getmaxx(win); | 914 width = getmaxx(win); |
| 915 height = getmaxy(win); | 915 height = getmaxy(win); |
| 985 | 985 |
| 986 return(WRITESTAT); | 986 return(WRITESTAT); |
| 987 } | 987 } |
| 988 | 988 |
| 989 int | 989 int |
| 990 rs_read_daemons(int inf, struct delayed_action *d_list, int count) | 990 rs_read_daemons(FILE *inf, struct delayed_action *d_list, int count) |
| 991 { | 991 { |
| 992 int i = 0; | 992 int i = 0; |
| 993 int func = 0; | 993 int func = 0; |
| 994 int value = 0; | 994 int value = 0; |
| 995 int id = 0; | 995 int id = 0; |
| 1081 | 1081 |
| 1082 return(WRITESTAT); | 1082 return(WRITESTAT); |
| 1083 } | 1083 } |
| 1084 | 1084 |
| 1085 int | 1085 int |
| 1086 rs_read_magic_items(int inf, struct magic_item *mi, int count) | 1086 rs_read_magic_items(FILE *inf, struct magic_item *mi, int count) |
| 1087 { | 1087 { |
| 1088 int id; | 1088 int id; |
| 1089 int n; | 1089 int n; |
| 1090 int value; | 1090 int value; |
| 1091 | 1091 |
| 1159 | 1159 |
| 1160 return(WRITESTAT); | 1160 return(WRITESTAT); |
| 1161 } | 1161 } |
| 1162 | 1162 |
| 1163 int | 1163 int |
| 1164 rs_read_room(int inf, struct room *r) | 1164 rs_read_room(FILE *inf, struct room *r) |
| 1165 { | 1165 { |
| 1166 rs_read_coord(inf,&r->r_pos); | 1166 rs_read_coord(inf,&r->r_pos); |
| 1167 rs_read_coord(inf,&r->r_max); | 1167 rs_read_coord(inf,&r->r_max); |
| 1168 rs_read_coord(inf,&r->r_gold); | 1168 rs_read_coord(inf,&r->r_gold); |
| 1169 rs_read_int(inf,&r->r_goldval); | 1169 rs_read_int(inf,&r->r_goldval); |
| 1184 | 1184 |
| 1185 return(READSTAT); | 1185 return(READSTAT); |
| 1186 } | 1186 } |
| 1187 | 1187 |
| 1188 int | 1188 int |
| 1189 rs_read_rooms(int inf, struct room *r, int count) | 1189 rs_read_rooms(FILE *inf, struct room *r, int count) |
| 1190 { | 1190 { |
| 1191 int value = 0, n = 0; | 1191 int value = 0, n = 0; |
| 1192 | 1192 |
| 1193 if (rs_read_int(inf,&value) != 0) | 1193 if (rs_read_int(inf,&value) != 0) |
| 1194 { | 1194 { |
| 1220 | 1220 |
| 1221 return(WRITESTAT); | 1221 return(WRITESTAT); |
| 1222 } | 1222 } |
| 1223 | 1223 |
| 1224 int | 1224 int |
| 1225 rs_read_room_reference(int inf, struct room **rp) | 1225 rs_read_room_reference(FILE *inf, struct room **rp) |
| 1226 { | 1226 { |
| 1227 int i; | 1227 int i; |
| 1228 | 1228 |
| 1229 rs_read_int(inf, &i); | 1229 rs_read_int(inf, &i); |
| 1230 | 1230 |
| 1250 | 1250 |
| 1251 return(WRITESTAT); | 1251 return(WRITESTAT); |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 int | 1254 int |
| 1255 rs_read_stats(int inf, struct stats *s) | 1255 rs_read_stats(FILE *inf, struct stats *s) |
| 1256 { | 1256 { |
| 1257 int id; | 1257 int id; |
| 1258 | 1258 |
| 1259 rs_read_int(inf, &id); | 1259 rs_read_int(inf, &id); |
| 1260 | 1260 |
| 1288 | 1288 |
| 1289 return(WRITESTAT); | 1289 return(WRITESTAT); |
| 1290 } | 1290 } |
