About: Source:Hack 1.0/hack.save.c   Sponge Permalink

An Entity of Type : owl:Thing, within Data Space : 134.155.108.49:8890 associated with source dataset(s)

Below is the full text to hack.save.c from the source code of Hack 1.0. To link to a particular line, write [[Hack 1.0/hack.save.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code

AttributesValues
rdfs:label
  • Source:Hack 1.0/hack.save.c
rdfs:comment
  • Below is the full text to hack.save.c from the source code of Hack 1.0. To link to a particular line, write [[Hack 1.0/hack.save.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code
dcterms:subject
dbkwik:nethack/pro...iPageUsesTemplate
abstract
  • Below is the full text to hack.save.c from the source code of Hack 1.0. To link to a particular line, write [[Hack 1.0/hack.save.c#line123]], for example. Warning! This is the source code from an old release. For the latest release, see Source code 1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */ 2. 3. #include "hack.h" 4. extern char genocided[60]; /* defined in Decl.c */ 5. extern char fut_geno[60]; /* idem */ 6. #include 7. 8. extern char SAVEF[], nul[]; 9. extern char pl_character[PL_CSIZ]; 10. extern long lseek(); 11. extern struct obj *restobjchn(); 12. extern struct monst *restmonchn(); 13. 14. dosave(){ 15. if(dosave0(0)) { 16. settty("Be seeing you ... "); 17. exit(0); 18. } 19. #ifdef lint 20. return(0); 21. #endif lint 22. } 23. 24. #ifndef NOSAVEONHANGUP 25. hangup(){ 26. (void) dosave0(1); 27. exit(1); 28. } 29. #endif NOSAVEONHANGUP 30. 31. /* returns 1 if save successful */ 32. dosave0(hu) int hu; { 33. register fd, ofd; 34. int tmp; /* not register ! */ 35. 36. (void) signal(SIGHUP, SIG_IGN); 37. (void) signal(SIGINT, SIG_IGN); 38. if((fd = creat(SAVEF, FMASK)) < 0) { 39. if(!hu) pline("Cannot open save file. (Continue or Quit)"); 40. return(0); 41. } 42. savelev(fd); 43. saveobjchn(fd, invent); 44. saveobjchn(fd, fcobj); 45. savemonchn(fd, fallen_down); 46. bwrite(fd, (char *) &flags, sizeof(struct flag)); 47. bwrite(fd, (char *) &dlevel, sizeof dlevel); 48. bwrite(fd, (char *) &maxdlevel, sizeof maxdlevel); 49. bwrite(fd, (char *) &moves, sizeof moves); 50. bwrite(fd, (char *) &u, sizeof(struct you)); 51. bwrite(fd, (char *) pl_character, sizeof pl_character); 52. bwrite(fd, (char *) genocided, sizeof genocided); 53. bwrite(fd, (char *) fut_geno, sizeof fut_geno); 54. savenames(fd); 55. for(tmp = 1; tmp <= maxdlevel; tmp++) { 56. glo(tmp); 57. if((ofd = open(lock, 0)) < 0) 58. continue; 59. (void) getlev(ofd); 60. (void) close(ofd); 61. bwrite(fd, (char *) &tmp, sizeof tmp); /* level number */ 62. savelev(fd); /* actual level */ 63. (void) unlink(lock); 64. } 65. (void) close(fd); 66. (*index(lock, '.')) = 0; 67. (void) unlink(lock); 68. return(1); 69. } 70. 71. dorecover(fd) 72. register fd; 73. { 74. register nfd; 75. int tmp; /* not a register ! */ 76. struct obj *otmp; 77. 78. (void) getlev(fd); 79. invent = restobjchn(fd); 80. for(otmp = invent; otmp; otmp = otmp->nobj) 81. if(otmp->owornmask) 82. setworn(otmp, otmp->owornmask); 83. fcobj = restobjchn(fd); 84. fallen_down = restmonchn(fd); 85. mread(fd, (char *) &flags, sizeof(struct flag)); 86. mread(fd, (char *) &dlevel, sizeof dlevel); 87. mread(fd, (char *) &maxdlevel, sizeof maxdlevel); 88. mread(fd, (char *) &moves, sizeof moves); 89. mread(fd, (char *) &u, sizeof(struct you)); 90. mread(fd, (char *) pl_character, sizeof pl_character); 91. mread(fd, (char *) genocided, sizeof genocided); 92. mread(fd, (char *) fut_geno, sizeof fut_geno); 93. restnames(fd); 94. while(1) { 95. if(read(fd, (char *) &tmp, sizeof tmp) != sizeof tmp) 96. break; 97. if(getlev(fd)) 98. break; /* this is actually an error */ 99. glo(tmp); 100. if((nfd = creat(lock, FMASK)) < 0) 101. panic("Cannot open temp file %s! ", lock); 102. savelev(nfd); 103. (void) close(nfd); 104. } 105. (void) lseek(fd, 0L, 0); 106. (void) getlev(fd); 107. (void) close(fd); 108. (void) unlink(SAVEF); 109. if(Punished) { 110. for(otmp = fobj; otmp; otmp = otmp->nobj) 111. if(otmp->olet == CHAIN_SYM) goto chainfnd; 112. panic("Cannot find the iron chain?"); 113. chainfnd: 114. uchain = otmp; 115. if(!uball){ 116. for(otmp = fobj; otmp; otmp = otmp->nobj) 117. if(otmp->olet == BALL_SYM && otmp->spe) 118. goto ballfnd; 119. panic("Cannot find the iron ball?"); 120. ballfnd: 121. uball = otmp; 122. } 123. } 124. #ifndef QUEST 125. setsee(); /* only to recompute seelx etc. - these weren't saved */ 126. #endif QUEST 127. docrt(); 128. } 129. 130. struct obj * 131. restobjchn(fd) 132. register fd; 133. { 134. register struct obj *otmp, *otmp2; 135. register struct obj *first = 0; 136. int xl; 137. #ifdef lint 138. /* suppress "used before set" warning from lint */ 139. otmp2 = 0; 140. #endif lint 141. while(1) { 142. mread(fd, (char *) &xl, sizeof(xl)); 143. if(xl == -1) break; 144. otmp = newobj(xl); 145. if(!first) first = otmp; 146. else otmp2->nobj = otmp; 147. mread(fd, (char *) otmp, (unsigned) xl + sizeof(struct obj)); 148. if(!otmp->o_id) /* from MKLEV */ 149. otmp->o_id = flags.ident++; 150. otmp2 = otmp; 151. } 152. if(first && otmp2->nobj){ 153. pline("Restobjchn: error reading objchn."); 154. impossible(); 155. otmp2->nobj = 0; 156. } 157. return(first); 158. } 159. 160. struct monst * 161. restmonchn(fd) 162. register fd; 163. { 164. register struct monst *mtmp, *mtmp2; 165. register struct monst *first = 0; 166. int xl; 167. 168. struct permonst *monbegin; 169. long differ; 170. 171. mread(fd, (char *)&monbegin, sizeof(monbegin)); 172. differ = (char *)(&mons[0]) - (char *)(monbegin); 173. 174. #ifdef lint 175. /* suppress "used before set" warning from lint */ 176. mtmp2 = 0; 177. #endif lint 178. while(1) { 179. mread(fd, (char *) &xl, sizeof(xl)); 180. if(xl == -1) break; 181. mtmp = newmonst(xl); 182. if(!first) first = mtmp; 183. else mtmp2->nmon = mtmp; 184. mread(fd, (char *) mtmp, (unsigned) xl + sizeof(struct monst)); 185. mtmp->data = (struct permonst *) 186. ((char *) mtmp->data + differ); 187. if(!mtmp->m_id) { /* from MKLEV */ 188. mtmp->m_id = flags.ident++; 189. #ifndef NOWORM 190. if(mtmp->data->mlet == 'w' && getwn(mtmp)){ 191. initworm(mtmp); 192. mtmp->msleep = 0; 193. } 194. #endif NOWORM 195. } 196. if(mtmp->minvent) 197. mtmp->minvent = restobjchn(fd); 198. mtmp2 = mtmp; 199. } 200. if(first && mtmp2->nmon){ 201. pline("Restmonchn: error reading monchn."); 202. impossible(); 203. mtmp2->nmon = 0; 204. } 205. return(first); 206. }
Alternative Linked Data Views: ODE     Raw Data in: CXML | CSV | RDF ( N-Triples N3/Turtle JSON XML ) | OData ( Atom JSON ) | Microdata ( JSON HTML) | JSON-LD    About   
This material is Open Knowledge   W3C Semantic Web Technology [RDF Data] Valid XHTML + RDFa
OpenLink Virtuoso version 07.20.3217, on Linux (x86_64-pc-linux-gnu), Standard Edition
Data on this page belongs to its respective rights holders.
Virtuoso Faceted Browser Copyright © 2009-2012 OpenLink Software