Overview
Comment: | Split out the code for making a new puzzle set into a separate subroutine, and do not add user cache entries for them until they are loaded the first time. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a36346d28ec5b00f8ed0ae692ed14707 |
User & Date: | user on 2022-06-13 23:08:14 |
Other Links: | manifest | tags |
Context
2022-06-13
| ||
23:57 | Implement MD5 hash algorithm. (This is not used in Free Hero Mesh, but may be used in other programs e.g. to compute the Z card in Fossil decks.) check-in: 2e44cdb36f user: user tags: trunk | |
23:08 | Split out the code for making a new puzzle set into a separate subroutine, and do not add user cache entries for them until they are loaded the first time. check-in: a36346d28e user: user tags: trunk | |
2022-06-08
| ||
04:39 | Fix a problem with the level importing and implement the F record in level importing. check-in: 78faa91e26 user: user tags: trunk | |
Changes
Modified main.c from [97954d3e50] to [f8cd0b8bae].
︙ | ︙ | |||
637 638 639 640 641 642 643 | char*nam3; struct stat fst; fprintf(stderr,"Initializing user cache...\n"); if(z=sqlite3_exec(userdb,"BEGIN;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); if(z=sqlite3_prepare_v2(userdb,"SELECT `ID`, `TIME` FROM `USERCACHEINDEX` WHERE `NAME` = ?1;",-1,&st,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); nam1=sqlite3_mprintf("%s.level",basefilename); if(!nam1) fatal("Allocation failed\n"); | | | < | | | 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 | char*nam3; struct stat fst; fprintf(stderr,"Initializing user cache...\n"); if(z=sqlite3_exec(userdb,"BEGIN;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); if(z=sqlite3_prepare_v2(userdb,"SELECT `ID`, `TIME` FROM `USERCACHEINDEX` WHERE `NAME` = ?1;",-1,&st,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); nam1=sqlite3_mprintf("%s.level",basefilename); if(!nam1) fatal("Allocation failed\n"); nam2=realpath(nam1,0); if(!nam2) fatal("Cannot find real path of '%s': %m\n",nam1); levelfp=fopen(nam2,main_options['r']?"r":"r+"); if(!levelfp) fatal("Cannot open '%s' for reading%s: %m\n",nam2,main_options['r']?"":"/writing"); sqlite3_free(nam1); sqlite3_bind_text(st,1,nam2,-1,0); z=sqlite3_step(st); if(z==SQLITE_ROW) { leveluc=sqlite3_column_int64(st,0); t1=sqlite3_column_int64(st,1); } else if(z==SQLITE_DONE) { leveluc=t1=-1; } else { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } sqlite3_reset(st); nam1=sqlite3_mprintf("%s.solution",basefilename); if(!nam1) fatal("Allocation failed\n"); nam3=realpath(nam1,0); if(!nam3) fatal("Cannot find real path of '%s': %m\n",nam1); if(!strcmp(nam2,nam3)) fatal("Level and solution files seem to be the same file\n"); solutionfp=fopen(nam3,main_options['r']?"r":"r+"); if(!solutionfp) fatal("Cannot open '%s' for reading%s: %m\n",nam3,main_options['r']?"":"/writing"); sqlite3_free(nam1); sqlite3_bind_text(st,1,nam3,-1,0); z=sqlite3_step(st); if(z==SQLITE_ROW) { solutionuc=sqlite3_column_int64(st,0); t2=sqlite3_column_int64(st,1); |
︙ | ︙ | |||
687 688 689 690 691 692 693 694 695 696 697 698 699 700 | if(z=sqlite3_prepare_v3(userdb,"SELECT `OFFSET`, CASE WHEN ?3 THEN `USERSTATE` ELSE `DATA` END " "FROM `USERCACHEDATA` WHERE `FILE` = ?1 AND `LEVEL` = ?2;",-1,SQLITE_PREPARE_PERSISTENT,&readusercachest,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } if(z=sqlite3_exec(userdb,"COMMIT;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fprintf(stderr,"Done\n"); } static void init_sql(void) { char*s; char*p; const char*v; int z; sqlite3_config(SQLITE_CONFIG_URI,0); | > > > > > > > > > > > > > > > > | 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 | if(z=sqlite3_prepare_v3(userdb,"SELECT `OFFSET`, CASE WHEN ?3 THEN `USERSTATE` ELSE `DATA` END " "FROM `USERCACHEDATA` WHERE `FILE` = ?1 AND `LEVEL` = ?2;",-1,SQLITE_PREPARE_PERSISTENT,&readusercachest,0)) { fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); } if(z=sqlite3_exec(userdb,"COMMIT;",0,0,0)) fatal("SQL error (%d): %s\n",z,sqlite3_errmsg(userdb)); fprintf(stderr,"Done\n"); } static void new_puzzle_set(void) { char*nam1; char*nam2; nam1=sqlite3_mprintf("%s.level",basefilename); if(!nam1) fatal("Allocation failed\n"); levelfp=fopen(nam1,"w+x"); if(!levelfp) fatal("Cannot open '%s' for reading/writing: %m\n",nam1); write_empty_level_set(levelfp); nam2=sqlite3_mprintf("%s.solution",basefilename); if(!nam2) fatal("Allocation failed\n"); solutionfp=fopen(nam2,"w+x"); if(!solutionfp) fatal("Cannot open '%s' for reading/writing: %m\n",nam2); fclose(levelfp); fclose(solutionfp); } static void init_sql(void) { char*s; char*p; const char*v; int z; sqlite3_config(SQLITE_CONFIG_URI,0); |
︙ | ︙ | |||
1117 1118 1119 1120 1121 1122 1123 1124 1125 | if(main_options['z']) init_composite(); load_pictures(); if(main_options['T']) { printf("argv[0] = %s\n",argv[0]); init_sound(); test_mode(); return 0; } if(!main_options['z']) init_usercache(); | > > > > < | 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 | if(main_options['z']) init_composite(); load_pictures(); if(main_options['T']) { printf("argv[0] = %s\n",argv[0]); init_sound(); test_mode(); return 0; } if(main_options['n']) { new_puzzle_set(); return 0; } if(!main_options['z']) init_usercache(); if(screen) init_sound(); load_classes(); load_key_bindings(); load_level_index(); optionquery[1]=Q_maxObjects; max_objects=strtoll(xrm_get_resource(resourcedb,optionquery,optionquery,2)?:"",0,0)?:0xFFFF0000L; set_tracing(); |
︙ | ︙ |