home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / mac / hypercrd / xcmd / prctclxf.sit / DemoStack / card_4530.txt < prev    next >
Text File  |  1990-08-28  |  20KB  |  705 lines

  1. -- card: 4530 from stack: in
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 2685
  5. -- name: Array
  6. ----- HyperTalk script -----
  7. on openCard
  8.   if (debugging() = true) then pass openCard
  9.   set cursor to watch
  10.   get Init2D()
  11.   if (it = empty) then get NewArray()
  12.   if (it = empty) then get SetArray()
  13.   if (it Γëá empty) then answer "openCard: " & errorstring(it)
  14.   pass openCard
  15. end openCard
  16.  
  17. on closeCard
  18.   if (debugging() = true) then pass closeCard
  19.   set cursor to watch
  20.   get DisposeArray()
  21.   get End2D()
  22.   if (it Γëá empty) then answer "closeCard: " & errorstring(it)
  23.   pass closeCard
  24. end closeCard
  25.  
  26. on changeSize theRect, theItem, itemDiff, countDiff, count, separator
  27.   repeat forever
  28.     put countDiff & "," & count
  29.     if (countDiff < 0 and count <= countDiff) then exit repeat
  30.     else if (countDiff > 0 and count > 20) then exit repeat
  31.     add countDiff to count
  32.     put separator & count after cd fld "ArrayRows"
  33.     add itemDiff to item theItem of theRect
  34.     set the rect of cd fld "ArrayRows" to theRect
  35.     if (mouse() Γëá down) then exit repeat
  36.   end repeat
  37. end changeSize
  38.  
  39. --------------------------------------------------------------------
  40. -- Handlers demonstrating a two-dimensional array using
  41. -- ArrayList. The global "arrayName" contains the name of
  42. -- the field used for the demonstration.
  43. -- NewArray       Creates the array
  44. -- DisposeArray   Disposes of the array
  45. -- DisplayArray   Dumps the array to the array display field
  46. -- SetArray       Read the array from the array display field
  47. -- RandomizeArray Fills array with random numbers
  48. -- SortArray      Sorts array
  49. --------------------------------------------------------------------
  50.  
  51. function arrayName value
  52. return "Array"
  53. end arrayName
  54.  
  55. -- return number of rows
  56. function arrayRows
  57. put textHeight of cd fld "arrayRows" into txtHt
  58. put height of cd fld "arrayRows" into fldHt
  59. return (fldHt / txtHt)
  60. end arrayRows
  61.  
  62. -- return number of columns
  63. function arrayCols
  64. put textSize of cd fld "arrayCols" into txtWidth
  65. put width of cd fld "arrayCols" into fldWidth
  66. return (fldWidth div txtWidth div 2)
  67. end arrayCols
  68.  
  69. function NewArray
  70. return New2D(arrayName(), arrayRows(), arrayCols())
  71. end NewArray
  72.  
  73. function DisposeArray
  74. return Dispose2D(arrayName())
  75. end DisposeArray
  76.  
  77. function SizeArray
  78. put empty into cd fld arrayName()
  79. get DisposeArray()
  80. get NewArray()
  81. get SetArray()
  82. end SizeArray
  83.  
  84. function DisplayArray
  85. put alist(get, arrayName(), space) into cd fld arrayName()
  86. return alist(error)
  87. end DisplayArray
  88.  
  89. function SetArray
  90. get alist(set, arrayName(), cd fld arrayName(), space)
  91. return it
  92. end SetArray
  93.  
  94. -- Fill array with random data
  95. function RandomizeArray
  96. set cursor to watch
  97. put Get2DDimensions(arrayName()) into dim
  98. if (dim = empty) then exit RandomizeArray
  99. put (item 1 of dim) * (item 2 of dim) into size
  100. repeat with i=1 to size
  101.   put random(100)-1 into rand
  102.   if (rand < 10) then put "0" before rand
  103.   put rand & " " after data
  104. end repeat
  105. delete last char of data
  106. put data into card field arrayName()
  107. return SetArray()
  108. end RandomizeArray
  109.  
  110. -- Sort the array
  111. function SortArray
  112. set cursor to watch
  113. get alist(sort, arrayName())
  114. if (it Γëá empty) then return it
  115. return DisplayArray()
  116. end SortArray
  117.  
  118. --------------------------------------------------------------------
  119. -- Handlers implementing a two-dimensional array using ArrayList.
  120. -- Init2D     Call before using any 2D routines.
  121. -- End2D      Call when completely finished using 2D routines.
  122. -- New2D      Create a new two-dimensional array with given dimensions.
  123. -- Dispose2D  Dispose of a two-dimensional array.
  124. -- Get2D      Return value of indexed item of array.
  125. -- Set2D      Set value of indexed item of array.
  126. -- Get2DIndex Return real index into the array list that stores the
  127. --            two-dimensional array.
  128. -- Get2DDimensions Return dimensions of an array
  129. --------------------------------------------------------------------
  130.  
  131. function arrayIndex
  132. return("_arrayIndex")
  133. end arrayIndex
  134.  
  135. function arrayDimen
  136. return("_arrayDimen")
  137. end arrayDimen
  138.  
  139. function Init2D
  140. -- create private lists of arrays
  141. get alist(dispose, arrayIndex())
  142. get alist(dispose, arrayDimen())
  143. get alist(new, arrayIndex())
  144. if (it = empty) then get alist(new, arrayDimen())
  145. if (it = empty) then get alist(setattribute, arrayIndex(), compare, ignorecase)
  146. if (it = empty) then get alist(setattribute, arrayIndex(), sorted, true)
  147. return it
  148. end Init2D
  149.  
  150. function End2D
  151. -- dispose of every two-dimensional array
  152. put alist(get, arrayIndex()) into list
  153. put empty into it
  154. repeat with i=1 to the number of items in list
  155.   get alist(dispose, item i of list)
  156.   if (it Γëá empty) then exit repeat
  157. end repeat
  158. -- dispose of master lists
  159. if (it = empty) then get alist(dispose, arrayIndex())
  160. if (it = empty) then get alist(dispose, arrayDimen())
  161. return it
  162. end End2D
  163.  
  164. -- Create a new array with dimensions rows by cols.
  165. function New2D name, rows, cols
  166. get alist(dispose, name)
  167.  
  168. -- create the group to hold the array
  169. get alist(new, name & "[" & rows * cols & "]")
  170. if (it Γëá empty) then return it
  171.  
  172. -- Add name to list of arrays and add dimensions to corresponding list.
  173. get alist(add, arrayIndex(), name)
  174. if (it Γëá empty) then return it
  175. put alist(search, arrayIndex(), name) into index
  176. get alist(insert, arrayDimen()&"["&index&"]", rows & "," & cols)
  177. if (it Γëá empty) then return it
  178.  
  179. end New2D
  180.  
  181. -- Completely dispose of the two-dimensional array and all of its
  182. -- contents. Call this when you're completely finished with the array.
  183. function Dispose2D name
  184. put alist(search, arrayIndex(), name) into index
  185. if (index Γëá empty) then
  186.   get alist(delete, arrayIndex() & "[" & index & "]")
  187.   if (it = empty) then get alist(delete, arrayDimen() & "[" & index & "]")
  188.   if (it = empty) then get alist(dispose, name)
  189.   return it
  190. end if
  191. end Dispose2D
  192.  
  193. -- Return string contained in item i, j of the two-dimensional array.
  194. function Get2D name, i, j
  195. return alist(get, name & Get2DIndex(name, i, j))
  196. end Get2D
  197.  
  198. -- Set string contained in item i, j of the two-dimensional array.
  199. -- Returns empty if succesful, otherwise an error string.
  200. function Set2D name, i, j, value
  201. get alist(set, name&Get2DIndex(name, i, j), value)
  202. return it
  203. end Set2D
  204.  
  205. -- Return index to item i, j from named two-dimensional array
  206. -- If array doesn't exists then it is created with dimensions
  207. -- i, j.
  208. -- Returns index if succesful, otherwise empty.
  209. function Get2DIndex name, i, j
  210. put Get2DDimensions(name) into dim
  211. put item 1 of dim into rows
  212. put item 2 of dim into cols
  213. return "["&j+(i-1)*rows&"]"
  214. end Get2DIndex
  215.  
  216. -- Return dimensions of array, or empty if error or array doesn't
  217. -- exist.
  218. function Get2DDimensions name
  219. put alist(search, arrayIndex(), name) into index
  220. return alist(get, arrayDimen()&"["&index&"]")
  221. end Get2DDimensions
  222.  
  223.  
  224.  
  225. -- part 19 (field)
  226. -- low flags: 01
  227. -- high flags: 0002
  228. -- rect: left=253 top=44 right=214 bottom=498
  229. -- title width / last selected line: 0
  230. -- icon id / first selected line: 0 / 0
  231. -- text alignment: 1
  232. -- font id: 3
  233. -- text size: 9
  234. -- style flags: 0
  235. -- line height: 12
  236. -- part name: Group
  237. ----- HyperTalk script -----
  238. on mouseWithin
  239.   mouseEnter
  240. end mouseWithin
  241.  
  242. on mouseEnter
  243.   if (optionKey() Γëá down) then exit mouseEnter
  244.   put "btn decreaseRows,btn increaseRows," & "btn decreaseCols,btn increaseCols," & "cd fld Rows,cd fld Cols," & "cd fld arrayRows,cd fld arrayCols,cd fld " & arrayName() into objects
  245.  
  246.   set cursor to cross
  247.   put rect of me into myRect
  248.   put the loc of me into myLoc
  249.  
  250.   -- drag objects around
  251.   repeat while (mouseLoc() is within myRect) and (optionKey() = down)
  252.  
  253.     if (mouse() = down) then
  254.       put myLoc into mySaveLoc
  255.  
  256.       -- drag the main field around until mouse is released
  257.       put mouseLoc() into saveLoc
  258.       repeat while (mouse() = down)
  259.         put mouseLoc() into curLoc
  260.         add (item 1 of curLoc - item 1 of saveLoc) to item 1 of myLoc
  261.         add (item 2 of curLoc - item 2 of saveLoc) to item 2 of myLoc
  262.         set the loc of me to myLoc
  263.         put curLoc into saveLoc
  264.       end repeat
  265.  
  266.       -- calculate change in position of main field
  267.       put (item 1 of myLoc - item 1 of mySaveLoc) into diff1
  268.       put (item 2 of myLoc - item 2 of mySaveLoc) into diff2
  269.  
  270.       -- move all the other objects in the group
  271.       if (diff1 Γëá 0) or (diff2 Γëá 0) then
  272.         --set lockScreen to true
  273.         set cursor to watch
  274.         repeat with i=1 to the number of items in objects
  275.           put the loc of item i of objects into curLoc
  276.           add diff1 to item 1 of curLoc
  277.           add diff2 to item 2 of curLoc
  278.           set the loc of item i of objects to curLoc
  279.         end repeat
  280.       end if
  281.     end if
  282.   end repeat
  283. end mouseEnter
  284.  
  285.  
  286.  
  287. -- part 1 (field)
  288. -- low flags: 00
  289. -- high flags: 4002
  290. -- rect: left=298 top=75 right=195 bottom=480
  291. -- title width / last selected line: 0
  292. -- icon id / first selected line: 0 / 0
  293. -- text alignment: 0
  294. -- font id: 4
  295. -- text size: 9
  296. -- style flags: 0
  297. -- line height: 12
  298. -- part name: Array
  299. ----- HyperTalk script -----
  300. on enterInField
  301.   get SetArray()
  302.   exit enterInField
  303.  
  304.   -- get start and end words of current selection
  305.   put word 2 of selectedChunk() into start
  306.   put word 4 of selectedChunk() into stop
  307.   put char 1 to start of card field arrayName() into text
  308.   put the number of words in text into startIndex
  309.   if (stop < start) then
  310.     put startIndex into stopIndex
  311.   else
  312.     put char start to stop of card field arrayName() into text
  313.     put startIndex-1+the number of words in text into stopIndex
  314.   end if
  315.   select word startIndex to stopIndex of card field arrayName()
  316.  
  317.   -- get text of selected words and set into array
  318.   put word 2 of selectedChunk() into start
  319.   put word 4 of selectedChunk() into stop
  320.   put char start to stop of card field arrayName() into text
  321.   get alist(set, arrayName()&"["&startIndex&"]", text, space)
  322. end enterInField
  323.  
  324. on returnInField
  325.   enterInField
  326. end returnInField
  327.  
  328. on closeField
  329.   enterInField
  330. end closeField
  331.  
  332.  
  333.  
  334. -- part 2 (field)
  335. -- low flags: 01
  336. -- high flags: 4002
  337. -- rect: left=279 top=75 right=195 bottom=296
  338. -- title width / last selected line: 0
  339. -- icon id / first selected line: 0 / 0
  340. -- text alignment: 65535
  341. -- font id: 4
  342. -- text size: 9
  343. -- style flags: 0
  344. -- line height: 12
  345. -- part name: ArrayRows
  346. ----- HyperTalk script -----
  347. on setHeight newHeight
  348.   set cursor to watch
  349.  
  350.   -- get current rectangle and text height
  351.   put rect of the target into theRect
  352.   put textHeight of the target into txtHt
  353.  
  354.   put height of the target into oldHeight
  355.  
  356.   -- set height and resize rectangle
  357.   put (txtHt * newHeight) into newHeight
  358.   put (item 2 of theRect + newHeight) into item 4 of theRect
  359.   set rect of the target to theRect
  360.  
  361.   -- set height of array rectangle
  362.   put the rect of cd fld arrayName() into arrayRect
  363.   put (item 2 of theRect + newHeight) into item 4 of arrayRect
  364.   set the rect of cd fld arrayName() to arrayRect
  365.  
  366.   -- set height of group field
  367.   put rect of cd fld "group" into groupRect
  368.   put height of cd fld "group" into groupHeight
  369.   put (groupHeight - oldHeight + newHeight) into groupHeight
  370.   put (item 2 of groupRect + groupHeight) into item 4 of groupRect
  371.   set rect of cd fld "group" to groupRect
  372.  
  373.   get SizeArray()
  374. end setHeight
  375.  
  376.  
  377.  
  378.  
  379. -- part 3 (field)
  380. -- low flags: 01
  381. -- high flags: 0002
  382. -- rect: left=298 top=61 right=74 bottom=480
  383. -- title width / last selected line: 0
  384. -- icon id / first selected line: 0 / 0
  385. -- text alignment: 0
  386. -- font id: 4
  387. -- text size: 9
  388. -- style flags: 0
  389. -- line height: 12
  390. -- part name: ArrayCols
  391. ----- HyperTalk script -----
  392. on setWidth newWidth
  393.   set cursor to watch
  394.  
  395.   -- get current rectangle and text width
  396.   put rect of the target into theRect
  397.   put textSize of the target into txtWidth
  398.  
  399.   put width of the target into oldWidth
  400.  
  401.   -- set width and resize rectangle
  402.   put (txtWidth * newWidth * 2 + 2) into newWidth
  403.   put (item 1 of theRect + newWidth) into item 3 of theRect
  404.   set rect of the target to theRect
  405.  
  406.   -- set width of array rectangle
  407.   put the rect of cd fld arrayName() into arrayRect
  408.   put (item 1 of arrayRect + newWidth) into item 3 of arrayRect
  409.   set the rect of cd fld arrayName() to arrayRect
  410.  
  411.   -- set width of group field
  412.   put rect of cd fld "group" into groupRect
  413.   put width of cd fld "group" into groupWidth
  414.   put (groupWidth - oldWidth + newWidth) into groupWidth
  415.   put (item 1 of groupRect + groupWidth) into item 3 of groupRect
  416.   set rect of cd fld "group" to groupRect
  417.  
  418.   get SizeArray()
  419. end setWidth
  420.  
  421.  
  422. -- part 4 (button)
  423. -- low flags: 00
  424. -- high flags: A003
  425. -- rect: left=284 top=287 right=309 bottom=384
  426. -- title width / last selected line: 0
  427. -- icon id / first selected line: 0 / 0
  428. -- text alignment: 1
  429. -- font id: 0
  430. -- text size: 12
  431. -- style flags: 0
  432. -- line height: 16
  433. -- part name: Randomize
  434. ----- HyperTalk script -----
  435. on mouseUp
  436.   get RandomizeArray()
  437. end mouseUp
  438.  
  439.  
  440.  
  441. -- part 5 (button)
  442. -- low flags: 00
  443. -- high flags: A003
  444. -- rect: left=284 top=257 right=279 bottom=384
  445. -- title width / last selected line: 0
  446. -- icon id / first selected line: 0 / 0
  447. -- text alignment: 1
  448. -- font id: 0
  449. -- text size: 12
  450. -- style flags: 0
  451. -- line height: 16
  452. -- part name: Display
  453. ----- HyperTalk script -----
  454. on mouseUp
  455.   get DisplayArray()
  456. end mouseUp
  457.  
  458.  
  459.  
  460. -- part 6 (button)
  461. -- low flags: 00
  462. -- high flags: A003
  463. -- rect: left=385 top=258 right=280 bottom=485
  464. -- title width / last selected line: 0
  465. -- icon id / first selected line: 0 / 0
  466. -- text alignment: 1
  467. -- font id: 0
  468. -- text size: 12
  469. -- style flags: 0
  470. -- line height: 16
  471. -- part name: Set
  472. ----- HyperTalk script -----
  473. on mouseUp
  474.   get SetArray()
  475. end mouseUp
  476.  
  477.  
  478.  
  479. -- part 7 (button)
  480. -- low flags: 00
  481. -- high flags: A003
  482. -- rect: left=386 top=287 right=309 bottom=486
  483. -- title width / last selected line: 0
  484. -- icon id / first selected line: 0 / 0
  485. -- text alignment: 1
  486. -- font id: 0
  487. -- text size: 12
  488. -- style flags: 0
  489. -- line height: 16
  490. -- part name: Sort
  491. ----- HyperTalk script -----
  492. on mouseUp
  493.   get SortArray()
  494. end mouseUp
  495.  
  496.  
  497.  
  498. -- part 12 (button)
  499. -- low flags: 00
  500. -- high flags: 0000
  501. -- rect: left=256 top=87 right=100 bottom=276
  502. -- title width / last selected line: 0
  503. -- icon id / first selected line: 3584 / 3584
  504. -- text alignment: 1
  505. -- font id: 0
  506. -- text size: 12
  507. -- style flags: 0
  508. -- line height: 16
  509. -- part name: IncreaseRows
  510. ----- HyperTalk script -----
  511. on mouseDown
  512.   put arrayRows() into size
  513.   put size into oldSize
  514.   repeat while (size < 10)
  515.     add 1 to size
  516.     put size into cd fld "Rows"
  517.     if (mouse() Γëá down) then exit repeat
  518.   end repeat
  519.   if (size Γëá oldSize) then send "setHeight " & size to cd fld "ArrayRows"
  520. end mouseDown
  521.  
  522.  
  523.  
  524.  
  525. -- part 13 (button)
  526. -- low flags: 00
  527. -- high flags: 0000
  528. -- rect: left=256 top=61 right=74 bottom=276
  529. -- title width / last selected line: 0
  530. -- icon id / first selected line: 16692 / 16692
  531. -- text alignment: 1
  532. -- font id: 0
  533. -- text size: 12
  534. -- style flags: 0
  535. -- line height: 16
  536. -- part name: DecreaseRows
  537. ----- HyperTalk script -----
  538. on mouseDown
  539.   put arrayRows() into size
  540.   put size into oldSize
  541.   repeat while (size > 1)
  542.     subtract 1 from size
  543.     put size into cd fld "Rows"
  544.     if (mouse() Γëá down) then exit repeat
  545.   end repeat
  546.   if (size Γëá oldSize) then send "setHeight " & size to cd fld "ArrayRows"
  547. end mouseDown
  548.  
  549.  
  550.  
  551. -- part 15 (field)
  552. -- low flags: 01
  553. -- high flags: 0002
  554. -- rect: left=256 top=75 right=87 bottom=276
  555. -- title width / last selected line: 0
  556. -- icon id / first selected line: 0 / 0
  557. -- text alignment: 0
  558. -- font id: 3
  559. -- text size: 9
  560. -- style flags: 0
  561. -- line height: 12
  562. -- part name: Rows
  563.  
  564.  
  565. -- part 16 (button)
  566. -- low flags: 00
  567. -- high flags: 0000
  568. -- rect: left=279 top=46 right=60 bottom=296
  569. -- title width / last selected line: 0
  570. -- icon id / first selected line: 15420 / 15420
  571. -- text alignment: 1
  572. -- font id: 0
  573. -- text size: 12
  574. -- style flags: 0
  575. -- line height: 16
  576. -- part name: DecreaseCols
  577. ----- HyperTalk script -----
  578. on mouseDown
  579.   put arrayCols() into size
  580.   put size into oldSize
  581.   repeat while (size > 1)
  582.     subtract 1 from size
  583.     put size into cd fld "Cols"
  584.     if (mouse() Γëá down) then exit repeat
  585.   end repeat
  586.   if (size Γëá oldSize) then  send "setWidth " & size to cd fld "ArrayCols"
  587. end mouseDown
  588.  
  589.  
  590.  
  591. -- part 17 (field)
  592. -- low flags: 01
  593. -- high flags: 0002
  594. -- rect: left=298 top=47 right=59 bottom=318
  595. -- title width / last selected line: 0
  596. -- icon id / first selected line: 0 / 0
  597. -- text alignment: 0
  598. -- font id: 3
  599. -- text size: 9
  600. -- style flags: 0
  601. -- line height: 12
  602. -- part name: Cols
  603.  
  604.  
  605. -- part 18 (button)
  606. -- low flags: 00
  607. -- high flags: 0000
  608. -- rect: left=318 top=46 right=60 bottom=335
  609. -- title width / last selected line: 0
  610. -- icon id / first selected line: 16560 / 16560
  611. -- text alignment: 1
  612. -- font id: 0
  613. -- text size: 12
  614. -- style flags: 0
  615. -- line height: 16
  616. -- part name: IncreaseCols
  617. ----- HyperTalk script -----
  618. on mouseDown
  619.   put arrayCols() into size
  620.   put size into oldSize
  621.   repeat while (size < 10)
  622.     add 1 to size
  623.     put size into cd fld "Cols"
  624.     if (mouse() Γëá down) then exit repeat
  625.   end repeat
  626.   if (size Γëá oldSize) then send "setWidth " & size to cd fld "ArrayCols"
  627. end mouseDown
  628.  
  629.  
  630.  
  631. -- part contents for card part 3
  632. ----- text -----
  633.  1  2  3  4  5  6  7  8  9 10
  634.  
  635. -- part contents for background part 9
  636. ----- text -----
  637. DemoStack 0.9
  638.  
  639. -- part contents for background part 1
  640. ----- text -----
  641. Array
  642.  
  643. -- part contents for background part 12
  644. ----- text -----
  645. Card #4
  646.  
  647. -- part contents for background part 13
  648. ----- text -----
  649. Description
  650.  
  651. -- part contents for background part 14
  652. ----- text -----
  653.  
  654.  
  655. This is a demonstration of how ArrayList may be used to maintain two-dimensional arrays. A complete set of handlers implements all operations on the arrays.
  656.  
  657. ________________________________
  658. Using the Card
  659.  
  660. The big grid on the right represents an example array of 10 rows by 10 columns. By using the buttons below the grid you can perform several operations on this array. The Display button redraws the array. The Set button reads and saves the data in the array. The Randomize button fills the array with newly generated random numbers. Finally, the Sort button sorts the elements of the array.
  661.  
  662. You can also enter new values to the array by typing over the current values. The changes will be saved when you either press return, or press enter, or click outside of the field. Be careful not to enter more than one space between values since this will result in an empty item being set in the array.
  663.  
  664. ________________________________
  665. About the Script
  666.  
  667. Two-dimensional arrays are stored as one-dimensional arrays in a list with the same name as the array. When an item with some row and column is requested the script calculates the index into the one dimensional array (this is similar to what the C programming language does). Thus, if an array is created with dimensions 10 rows by 10 columns, then the item at (1, 1) has an index of 1, while the item at (3, 4) has an index of 34.
  668.  
  669. Since the dimensions of the array are needed to calculate the actual index into the list the script must store and retrieve the dimensions of every two-dimensional array. This is accomplished using two auxillary lists. The first is a sorted list of the names of all of the arrays. The second contains the dimensions of the corresponding array. For instance, if the array named "exampleArray" is stored in item 4 of the auxillary names list, then item 4 of the auxillary dimensions list contains the dimensions for "exampleArray".
  670.  
  671.  
  672.  
  673.  
  674. -- part contents for card part 15
  675. ----- text -----
  676. 10
  677.  
  678. -- part contents for card part 2
  679. ----- text -----
  680. 1
  681. 2
  682. 3
  683. 4
  684. 5
  685. 6
  686. 7
  687. 8
  688. 9
  689. 10
  690. 11
  691. 12
  692. 13
  693. 14
  694. 15
  695. 16
  696. 17
  697. 18
  698.  
  699. -- part contents for card part 17
  700. ----- text -----
  701. 10
  702.  
  703. -- part contents for card part 1
  704. ----- text -----
  705. 01 02 04 04 05 05 06 08 09 10 10 10 12 13 13 14 17 17 17 18 18 21 21 22 23 26 27 27 27 30 31 33 34 34 35 36 37 40 40 41 42 43 44 45 47 50 52 52 54 55 57 58 59 60 61 61 62 62 62 63 67 69 70 71 71 71 72 72 72 76 78 78 79 80 81 81 81 83 83 84 85 87 88 91 92 92 93 94 95 95 96 96 96 97 97 98 98 98 99 99