queen_wrap.ch
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. % This file is part of the Stanford GraphBase (c) Stanford University 1993
  2. It's a demonstration "change file", which converts the demonstration program
  3. called "queen" into a similar demonstration program called "queen_wrap".
  4. Change files make it easy to modify CWEB source programs without
  5. touching the master files, thereby remaining totally compatible with
  6. all other users. Anybody can make whatever modifications they like
  7. in change files, but everybody is supposed to leave the master files
  8. intact. Please also leave the present file intact, so that it remains
  9. as a useful demonstration of the change-file idea.
  10. The format of change files is simple: First comes a line that begins with @x,
  11. then comes a line that is a verbatim copy of some line from the master file,
  12. followed by zero or more additional lines that should match the subsequent
  13. lines of the master file. Then you say @y, and then you give replacement
  14. lines for everything between @x and @y in the master file. Then you say @z.
  15. All changes must occur in the order of replaced text in the master file,
  16. and must be uniquely identifiable by the first line that follows @x.
  17. Optional comments may follow @x, @y, or @z on a line, and may occur outside
  18. of @x-@y-@z groups. In fact, you are now reading such an optional comment.
  19. @x replace the copyright notice by a change notice
  20. @i boilerplate.w %<< legal stuff: PLEASE READ IT BEFORE MAKING ANY CHANGES!
  21. @y
  22. letmaybe=iffalse % tell CWEB to print only sections that change
  23. defprerequisite#1{} defprerequisites#1#2{} % disable boilerplate macros
  24. defbotofcontents{vskip 0pt plus 1filll parskip=0pt
  25.   This program was obtained by modifying {sc QUEEN} in the Stanford
  26.   GraphBase.par   Only sections that have changed are listed here.par}
  27. @z
  28. @x change the program title
  29. deftitle{QUEEN}
  30. @y
  31. deftitle{QUEEN_WRAP}
  32. @z
  33. @x now we modify the introductory remarks of section 1
  34. An ASCII file called .{queen.gb} is also produced. Other programs
  35. can obtain a copy of the queen graph by calling |restore_graph("queen.gb")|.
  36. You might find it interesting to compare the output of {sc QUEEN} with
  37. the contents of .{queen.gb}; the former is intended to be readable
  38. by human beings, the latter by computers.
  39. @y
  40. Unlike an ordinary chessboard, the board considered here ``wraps around''
  41. at the left and right edges, so that it is essentially a cylinder.
  42. It does not, however, wrap around at the top and bottom; double wrapping
  43. would actually allow a lowly bishop to move from any given cell to any other,
  44. in two different ways.
  45. An ASCII file called .{queen_wrap.gb} is also produced. Other programs
  46. can obtain a copy of the graph by calling |restore_graph("queen_wrap.gb")|.
  47. You might find it interesting to compare the output of {sc QUEEN_WRAP} with
  48. the contents of .{queen_wrap.gb}; the former is intended to be readable
  49. by human beings, the latter by computers.
  50. @z
  51. @x changes to the code of section 1
  52.   g=board(3L,4L,0L,0L,-1L,0L,0L); /* a graph with rook moves */
  53.   gg=board(3L,4L,0L,0L,-2L,0L,0L); /* a graph with bishop moves */
  54.   ggg=gunion(g,gg,0L,0L); /* a graph with queen moves */
  55.   save_graph(ggg,"queen.gb"); /* generate an ASCII file for |ggg| */
  56. @y we add wraparound
  57.   g=board(3L,4L,0L,0L,-1L,2L,0L); /* a graph with rook moves and wrapping */
  58.     /* we set |wrap=2| because only the second coordinate wraps */
  59.   gg=board(3L,4L,0L,0L,-2L,2L,0L); /* a graph with bishop moves and wrapping */
  60.   ggg=gunion(g,gg,0L,0L); /* a graph with queen moves and wrapping */
  61.   save_graph(ggg,"queen_wrap.gb"); /* generate an ASCII file for |ggg| */
  62. @z
  63. @x change to the code of section 2
  64.   printf("Queen Moves on a 3x4 Boardnn");
  65. @y
  66.   printf("Queen Moves on a Cylindrical 3x4 Boardnn");
  67. @z
  68. A change file is usually much shorter than the master file, but the
  69. present one is an exception because the master file itself is short.
  70. You can use many different change files with the same master file.
  71. To run the queen_wrap program on a UNIX system, you can say
  72.   ctangle queen.w queen_wrap.ch queen_wrap.c
  73. and then compile and go. (The .w is optional in the first argument to ctangle;
  74. the .ch is optional in the second; the .c is optional in the third.)
  75. The C compiler and debugger will refer to appropriate lines of the original
  76. source file queen.w and/or the change file queen_wrap.ch when you are
  77. troubleshooting. You need never look at the file queen_wrap.c that was
  78. output by ctangle, although the compiler and debugger will want to see it.
  79. To obtain a TeXed documentation, you can say
  80.   cweave queen queen_wrap
  81.   tex queen
  82.   rm queen.tex
  83. after which you print the file queen.dvi output by TeX.