home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / pac.lzh / pac.2 < prev    next >
Encoding:
Text File  |  1990-08-12  |  43.5 KB  |  1,402 lines

  1. #!/bin/sh
  2. # This is part 02 of a multipart archive
  3. if touch 2>&1 | fgrep '[-amc]' > /dev/null
  4.  then TOUCH=touch
  5.  else TOUCH=true
  6. fi
  7. # ============= maps.h ==============
  8. echo "x - extracting maps.h (Text)"
  9. sed 's/^X//' << 'SHAR_EOF' > maps.h &&
  10. X/* maps.h */
  11. X/**********************************************************************
  12. X*    File Name     : maps.h
  13. X*    Function      : input character mapping to line edit functions
  14. X*    Author        : Istvan Mohos, 1987
  15. X***********************************************************************/
  16. X
  17. X#ifdef AMORTMAP
  18. Xstatic char loan_map[128] = {
  19. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  20. X      0,  0,  9, 10,  0,  1,  0,  0, 11,  7,  0,  0,  8,  0,  0,  0,  
  21. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  22. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  23. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  24. X     10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  
  25. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  26. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  
  27. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  28. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  29. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  30. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  4,  0,  0,  
  31. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  32. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  33. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL  */
  34. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11
  35. X};
  36. X
  37. Xstatic char date_map[128] = {
  38. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  39. X      0,  0,  0, 10,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  40. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  41. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  42. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  43. X     10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  2,  
  44. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  45. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  
  46. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  47. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  48. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  49. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  0,  4,  0,  0,  
  50. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  51. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  52. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  53. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 11
  54. X};
  55. X
  56. Xstatic char amort_map[128] = {
  57. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  58. X      0,  0,  0, 10,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  59. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  60. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  61. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  62. X     10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  2,  2,  
  63. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  64. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  2,  0,  0,  
  65. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  66. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  67. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  68. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  4,  0,  2,  
  69. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  70. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  71. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  72. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 11
  73. X};
  74. X#endif
  75. X
  76. X#ifdef ATOIMAP
  77. Xstatic char a_ed_map[128] = {
  78. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  79. X      0,  0,  0,  0,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  80. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  81. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  82. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  83. X     10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  84. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  85. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  
  86. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  87. X      0,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  88. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  89. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  4,  0,  0,  
  90. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  91. X      0,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  92. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  93. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11
  94. X};
  95. X
  96. Xchar *lotab[33] = {"asc NUL", "SOH  ^A", "STX  ^B", "ETX  ^C",
  97. X                   "EOT  ^D", "ENQ  ^E", "ACK  ^F", "BEL  ^G",
  98. X                   "BS   ^H", "HT   ^I", "LF   ^J", "VT   ^K",
  99. X                   "NP   ^L", "CR   ^M", "SO   ^N", "SI   ^O",
  100. X                   "DLE  ^P", "DC1  ^Q", "DC2  ^R", "DC3  ^S",
  101. X                   "DC4  ^T", "NAK  ^U", "SYN  ^V", "ETB  ^W",
  102. X                   "CAN  ^X", "EM   ^Y", "SUB  ^Z", "ESC  ^[",
  103. X                   "FS   ^|", "GS   ^]", "RS   ^`", "US   ^/",
  104. X                   "asc  SP"
  105. X};
  106. X
  107. X#endif
  108. X
  109. X#ifdef CONVMAP
  110. Xstatic char c_ed_map[128] = {
  111. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  112. X      0,  0,  0, 10,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  113. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  114. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  
  115. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  116. X      2,  0,  0,  0,  0,  2,  0,  0,  2,  2,  2,  2,  0,  2,  2,  2,  
  117. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  118. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2, 20,  0, 19,  0,  
  119. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  120. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  121. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  122. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  4,  2,  2,  
  123. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  124. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  125. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  126. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 11
  127. X};
  128. X
  129. Xstatic char eq_ed_map[128] = {
  130. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  131. X      0,  0,  0, 10,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  132. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  133. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  
  134. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  135. X      2,  0,  0,  0,  0,  2,  0,  0,  2,  2,  2,  2,  0,  2,  2,  2,  
  136. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  137. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0, 20,  0, 19,  0,  
  138. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  139. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  140. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  141. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  2,  4,  2,  0,  
  142. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  143. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  144. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  145. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11
  146. X};
  147. X
  148. Xstatic char c_sel_map[128] = {
  149. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  150. X      0,  0,  0,  0,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  151. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  152. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  153. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  154. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  155. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  156. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  157. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  158. X      0,  0,  0, 17,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  
  159. X/*    P   Q  17   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  160. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  161. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  162. X      0,  0,  0, 17,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  
  163. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  164. X      0,  0, 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11
  165. X};
  166. X#endif
  167. X
  168. X#ifdef FILEMAP
  169. Xstatic char f_ed_map[128] = {
  170. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  171. X      0,  0,  0, 10,  0,  1,  0,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  172. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  173. X      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  
  174. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  175. X     10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  2,  2,  
  176. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  177. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0, 20,  2, 19,  0,  
  178. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  179. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  180. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  181. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  4,  0,  2,  
  182. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  183. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  184. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL   */
  185. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0, 11
  186. X};
  187. X#endif
  188. X
  189. X#ifdef PACMAP
  190. Xstatic char cal_map[128] = {
  191. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  192. X      0, 17, 17, 10, 17,  1, 17, 17, 11,  7, 17, 17, 17, 17, 17, 17,  
  193. X#ifdef DESIGN
  194. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  195. X     17,  0, 18,  0, 17, 17,  0,  0, 17, 17,  0, 20,  0,  0,  0,  0,  
  196. X#else
  197. X     17,  0, 18, 17, 17,  0,  0,  0, 17,  0,  0, 20,  0,  0,  0,  0,  
  198. X#endif
  199. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  200. X      2,  2,  0,  2,  0,  2,  0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  201. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  202. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  2, 20, 17, 19,  2,  
  203. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  204. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  205. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  206. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  4,  2,  2,  
  207. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  208. X      0,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  
  209. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL  */
  210. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, 13, 15, 14,  0, 16
  211. X};
  212. X#endif
  213. X
  214. X#ifdef TOTALMAP
  215. Xstatic char tot_map[128] = {
  216. X/*   NL  ^A  ^B  ^C  ^D  ^E  ^F  ^G  ^H  ^I  ^J  ^K  ^L  ^M  ^N  ^O   */
  217. X      0,  0,  0, 12,  0,  1, 12,  0, 11,  7,  0,  0,  0,  0,  0,  0,  
  218. X/*   ^P  ^Q  ^R  ^S  ^T  ^U  ^V  ^W  ^X  ^Y  ^Z  ^[  ^|  ^]  ^`  ^/   */
  219. X     12,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0,  
  220. X/*   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /   */
  221. X     10,  0,  0, 21,  0,  0,  0,  0,  0,  0,  2,  2,  0,  2,  2,  0,  
  222. X/*    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   */
  223. X      2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  0,  0, 20,  0, 19,  0,  
  224. X/*    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   */
  225. X      2, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  
  226. X/*    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _   */
  227. X     12, 12, 12, 12, 12,  0,  0,  0,  0,  0,  0,  3,  0,  4,  0,  0,  
  228. X/*    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   */
  229. X      0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,  
  230. X/*    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DL  */
  231. X     12, 12, 12, 12, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11
  232. X};
  233. X#endif
  234. X
  235. X#ifdef INTERMAP
  236. Xstatic char *hundred[] = {
  237. X       "",        "", "1100100", "10201",
  238. X       "1210", "400", "244",     "202",
  239. X       "144",  "121", "100",     "91",
  240. X       "84",   "79",  "72",      "6A",
  241. X       "64" };
  242. X
  243. Xstatic char *sixteen[] = {
  244. X       "",    "",   "10000",  "121",
  245. X       "100", "31", "24",     "22",
  246. X       "20",  "17", "16",     "15",
  247. X       "14",  "13", "12",     "11",
  248. X       "10" };
  249. X
  250. X static char *factab[] = {
  251. X/*0*/ "x 0",
  252. X/*1*/ "x 1",
  253. X/*2*/ "x 2",
  254. X/*3*/ "x 6",
  255. X/*4*/ "x 18",
  256. X/*5*/ "x 78",
  257. X/*6*/ "x 2D0",
  258. X/*7*/ "x 13B0",
  259. X/*8*/ "x 9D80",
  260. X/*9*/ "x 58980",
  261. X/*10*/ "x 375F00",
  262. X/*11*/ "x 2611500",
  263. X/*12*/ "x 1C8CFC00",
  264. X/*13*/ "x 17328CC00",
  265. X/*14*/ "x 144C3B2800",
  266. X/*15*/ "x 13077775800",
  267. X/*16*/ "x 130777758000",
  268. X/*17*/ "x 1437EEECD8000",
  269. X/*18*/ "x 16BEECCA730000",
  270. X/*19*/ "x 1B02B9306890000",
  271. X/*20*/ "x 21C3677C82B40000",
  272. X/*21*/ "x 2C5077D36B8C40000",
  273. X/*22*/ "x 3CEEA4C2B3E0D80000",
  274. X/*23*/ "x 57970CD7E2933680000",
  275. X/*24*/ "x 83629343D3DCD1C00000",
  276. X/*25*/ "x CD4A0619FB0907BC00000",
  277. X/*26*/ "x 14D9849EA37EEAC91800000",
  278. X/*27*/ "x 232F0FCBB3E62C3358800000",
  279. X/*28*/ "x 3D925BA47AD2CD59DAE000000",
  280. X/*29*/ "x 6F99461A1E9E1432DCB6000000",
  281. X/*30*/ "x D13F6370F96865DF5DD54000000",
  282. X/*31*/ "x 1956AD0AAE33A4560C5CD2C000000",
  283. X/*32*/ "x 32AD5A155C6748AC18B9A580000000",
  284. X/*33*/ "x 688589CC0E9505E2F2FEE5580000000",
  285. X/*34*/ "x DE1BC4D19EFCAC82445DA75B00000000",
  286. X/*35*/ "x FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
  287. X};
  288. X#endif
  289. SHAR_EOF
  290. $TOUCH -am 0221163890 maps.h &&
  291. chmod 0644 maps.h ||
  292. echo "restore of maps.h failed"
  293. set `wc -c maps.h`;Wc_c=$1
  294. if test "$Wc_c" != "14314"; then
  295.     echo original size 14314, current size $Wc_c
  296. fi
  297. # ============= toktab.h ==============
  298. echo "x - extracting toktab.h (Text)"
  299. sed 's/^X//' << 'SHAR_EOF' > toktab.h &&
  300. X/* toktab.h */
  301. X/**********************************************************************
  302. X*    File Name     : toktab.h
  303. X*    Function      : token definitions, token table
  304. X*    Author        : Istvan Mohos, 1987
  305. X***********************************************************************/
  306. X
  307. X/* to add token:
  308. X   insert in toklist, spacefilled to WORDSIZE, in ascii alpha sequence;
  309. X   increment LISTSIZE;
  310. X   add token #define, in the SAME ORDER as in toklist;
  311. X   renumber defines (0  to  LISTSIZE - 1);
  312. X   if token contains weird char, adjust map in pac.c to allow it;
  313. X   describe action in interpret.c;
  314. X*/
  315. X
  316. X#define WORDSIZE  9        /* maximum token size, not including \0 */
  317. X#define LISTSIZE  158      /* number of pac tokens */
  318. X
  319. X#ifdef PACTOK
  320. Xstatic char *toklist[] = {
  321. X"!        ",
  322. X"#        ",
  323. X"\'        ",
  324. X";        ",
  325. X"?        ",
  326. X"X        ",
  327. X"\\        ",
  328. X"amass    ",
  329. X"and      ",
  330. X"arct     ",
  331. X"astro    ",
  332. X"at       ",
  333. X"atto     ",
  334. X"au       ",
  335. X"auto     ",
  336. X"autoconv ",
  337. X"autotime ",
  338. X"avogadro ",
  339. X"boltzmann",
  340. X"break    ",
  341. X"bye      ",
  342. X"chroma   ",
  343. X"clr      ",
  344. X"cm       ",
  345. X"comma    ",
  346. X"cos      ",
  347. X"define   ",
  348. X"dontsave ",
  349. X"dp       ",
  350. X"ds       ",
  351. X"dup      ",
  352. X"earthmass",
  353. X"earthrad ",
  354. X"echarge  ",
  355. X"emass    ",
  356. X"euler    ",
  357. X"exa      ",
  358. X"exit     ",
  359. X"exp      ",
  360. X"faraday  ",
  361. X"femto    ",
  362. X"fix      ",
  363. X"fo       ",
  364. X"for      ",
  365. X"format   ",
  366. X"g        ",
  367. X"gas      ",
  368. X"giga     ",
  369. X"gravity  ",
  370. X"h        ",
  371. X"hardform ",
  372. X"heat     ",
  373. X"help     ",
  374. X"hf       ",
  375. X"i        ",
  376. X"ib       ",
  377. X"ibase    ",
  378. X"if       ",
  379. X"init     ",
  380. X"j        ",
  381. X"ju       ",
  382. X"justify  ",
  383. X"k        ",
  384. X"kilo     ",
  385. X"l        ",
  386. X"le       ",
  387. X"left     ",
  388. X"length   ",
  389. X"light    ",
  390. X"lightyear",
  391. X"log      ",
  392. X"m        ",
  393. X"mega     ",
  394. X"micro    ",
  395. X"milli    ",
  396. X"mod      ",
  397. X"mohos    ",
  398. X"moonmass ",
  399. X"moonrad  ",
  400. X"n        ",
  401. X"nano     ",
  402. X"natural  ",
  403. X"nmass    ",
  404. X"not      ",
  405. X"o        ",
  406. X"ob       ",
  407. X"obase    ",
  408. X"off      ",
  409. X"on       ",
  410. X"or       ",
  411. X"p        ",
  412. X"parallax ",
  413. X"parsec   ",
  414. X"pd       ",
  415. X"pdelta   ",
  416. X"pdiff    ",
  417. X"pe       ",
  418. X"pequal   ",
  419. X"peta     ",
  420. X"pi       ",
  421. X"pico     ",
  422. X"planck   ",
  423. X"pll      ",
  424. X"pm       ",
  425. X"pmass    ",
  426. X"pminus   ",
  427. X"po       ",
  428. X"pof      ",
  429. X"pop      ",
  430. X"pp       ",
  431. X"pplus    ",
  432. X"pr       ",
  433. X"precision",
  434. X"psh      ",
  435. X"pv       ",
  436. X"pversus  ",
  437. X"q        ",
  438. X"quit     ",
  439. X"r        ",
  440. X"ri       ",
  441. X"right    ",
  442. X"rydberg  ",
  443. X"s        ",
  444. X"sb       ",
  445. X"scale    ",
  446. X"sin      ",
  447. X"sound    ",
  448. X"sp       ",
  449. X"space    ",
  450. X"sqrt     ",
  451. X"st       ",
  452. X"stack    ",
  453. X"staybase ",
  454. X"stefan   ",
  455. X"sto      ",
  456. X"sunmass  ",
  457. X"sunrad   ",
  458. X"swp      ",
  459. X"t        ",
  460. X"te       ",
  461. X"tera     ",
  462. X"terse    ",
  463. X"to       ",
  464. X"tomoon   ",
  465. X"tosun    ",
  466. X"tw       ",
  467. X"twoscomp ",
  468. X"u        ",
  469. X"v        ",
  470. X"ver      ",
  471. X"verbose  ",
  472. X"w        ",
  473. X"while    ",
  474. X"wien     ",
  475. X"x        ",
  476. X"xor      ",
  477. X"xt       ",
  478. X"xterse   "
  479. X};
  480. X#endif
  481. X
  482. X/* pac token table definitions, ordered EXACTLY as toklist,
  483. X   numbered sequentially from 0.  When adding or removing tokens, this
  484. X   list gets renumbered. */
  485. X
  486. X#define BANG             0
  487. X#define SHARP            1
  488. X#define TICK             2
  489. X#define SEMI             3
  490. X#define QUESTION         4
  491. X#define X_UPPER          5
  492. X#define BACKSLASH        6
  493. X#define AMASS            7
  494. X#define AND              8
  495. X#define ARCT             9
  496. X#define ASTRO           10
  497. X#define AT              11
  498. X#define ATTO            12
  499. X#define AU              13
  500. X#define AUTO            14
  501. X#define AUTOCONV        15
  502. X#define AUTOTIME        16
  503. X#define AVOGADRO        17
  504. X#define BOLTZMANN       18
  505. X#define BREAK           19
  506. X#define BYE             20
  507. X#define CHROMA          21
  508. X#define CLR             22
  509. X#define CM              23
  510. X#define COMMA           24
  511. X#define COS             25
  512. X#define DEFINE          26
  513. X#define DONTSAVE        27
  514. X#define DP              28
  515. X#define DS              29
  516. X#define DUP             30
  517. X#define EARTHMASS       31
  518. X#define EARTHRAD        32
  519. X#define ECHARGE         33
  520. X#define EMASS           34
  521. X#define EULER           35
  522. X#define EXA             36
  523. X#define EXIT            37
  524. X#define EXP             38
  525. X#define FARADAY         39
  526. X#define FEMTO           40
  527. X#define FIX             41
  528. X#define FO              42
  529. X#define FOR             43
  530. X#define FORMAT          44
  531. X#define G_              45
  532. X#define GAS             46
  533. X#define GIGA            47
  534. X#define GRAVITY         48
  535. X#define H_              49
  536. X#define HARDFORM        50
  537. X#define HEAT            51
  538. X#define HELP            52
  539. X#define HF              53
  540. X#define I_              54
  541. X#define IB              55
  542. X#define IBASE           56
  543. X#define IF              57
  544. X#define INIT_           58
  545. X#define J_              59
  546. X#define JU              60
  547. X#define JUSTIFY         61
  548. X#define K_              62
  549. X#define KILO            63
  550. X#define L_              64
  551. X#define LE              65
  552. X#define LEFT            66
  553. X#define LENGTH          67
  554. X#define LIGHT           68
  555. X#define LIGHTYEAR       69
  556. X#define LOG             70
  557. X#define M_              71
  558. X#define MEGA            72
  559. X#define MICRO           73
  560. X#define MILLI           74
  561. X#define MOD             75
  562. X#define MOHOS           76
  563. X#define MOONMASS        77
  564. X#define MOONRAD         78
  565. X#define N_              79
  566. X#define NANO            80
  567. X#define NATURAL         81
  568. X#define NMASS           82
  569. X#define NOT             83
  570. X#define O_              84
  571. X#define OB              85
  572. X#define OBASE           86
  573. X#define OFF             87
  574. X#define ON              88
  575. X#define OR              89
  576. X#define P_              90
  577. X#define PARALLAX        91
  578. X#define PARSEC          92
  579. X#define PD              93
  580. X#define PDELTA          94
  581. X#define PDIFF           95
  582. X#define PE              96
  583. X#define PEQUAL          97
  584. X#define PETA            98
  585. X#define PI              99
  586. X#define PICO           100
  587. X#define PLANCK         101
  588. X#define PLL            102
  589. X#define PM             103
  590. X#define PMASS          104
  591. X#define PMINUS         105
  592. X#define PO             106
  593. X#define POF            107
  594. X#define POP            108
  595. X#define PP             109
  596. X#define PPLUS          110
  597. X#define PR             111
  598. X#define PRECISION      112
  599. X#define PSH            113
  600. X#define PV             114
  601. X#define PVERSUS        115
  602. X#define Q_             116
  603. X#define QUIT           117
  604. X#define R_             118
  605. X#define RI             119
  606. X#define RIGHT          120
  607. X#define RYDBERG        121
  608. X#define S_             122
  609. X#define SB             123
  610. X#define SCALE          124
  611. X#define SIN            125
  612. X#define SOUND          126
  613. X#define SP             127
  614. X#define SPACE          128
  615. X#define SQRT           129
  616. X#define ST             130
  617. X#define STACK          131
  618. X#define STAYBASE       132
  619. X#define STEFAN         133
  620. X#define STO            134
  621. X#define SUNMASS        135
  622. X#define SUNRAD         136
  623. X#define SWP            137
  624. X#define T_             138
  625. X#define TE             139
  626. X#define TERA           140
  627. X#define TERSE          141
  628. X#define TO             142
  629. X#define TOMOON         143
  630. X#define TOSUN          144
  631. X#define TW             145
  632. X#define TWOSCOMP       146
  633. X#define U_             147
  634. X#define V_             148
  635. X#define VER            149
  636. X#define VERBOSE        150
  637. X#define W_             151
  638. X#define WHILE          152
  639. X#define WIEN           153
  640. X#define X_LOWER        154
  641. X#define XOR            155
  642. X#define XT             156
  643. X#define XTERSE         157
  644. SHAR_EOF
  645. $TOUCH -am 0221163890 toktab.h &&
  646. chmod 0644 toktab.h ||
  647. echo "restore of toktab.h failed"
  648. set `wc -c toktab.h`;Wc_c=$1
  649. if test "$Wc_c" != "7256"; then
  650.     echo original size 7256, current size $Wc_c
  651. fi
  652. # ============= amort.c ==============
  653. echo "x - extracting amort.c (Text)"
  654. sed 's/^X//' << 'SHAR_EOF' > amort.c &&
  655. X/* amort.c */
  656. X/**********************************************************************
  657. X*    File Name     : amort.c
  658. X*    Function      : amortization (loan) routines of pac
  659. X*    Author        : Istvan Mohos, 1987
  660. X***********************************************************************/
  661. X
  662. X#include "defs.h"
  663. X#define AMORTMAP
  664. X#include "maps.h"
  665. X#undef AMORTMAP
  666. X
  667. Xshow_loan(play)
  668. Xint play;
  669. X{
  670. X    int thisline = AMTY;
  671. X    int ck, did_input, Too_big;
  672. X    char floatbuf[LOANSIZ + 1];
  673. X    int pyp, pxp, ryr, rxr;
  674. X    static char *fid = "show_loan";
  675. X
  676. X    _TR
  677. X    CYX;
  678. X    show_float(Amt, AMTY, 2);
  679. X    show_float(Rate, PRCY, 3);
  680. X    show_float(Years, YRY, 2);
  681. X    mvaddstr(DATY, LOANX, "begin mo/year");
  682. X    Too_big = show_pymt();
  683. X
  684. X    if (!play)
  685. X        year();
  686. X    else {
  687. X        while(TRUE) {
  688. X
  689. X            switch(thisline) {
  690. X            case AMTY:
  691. X                if (Amt == 0.)
  692. X                    clear_wline(thisline, LOANX, LOANR, 0, 1);
  693. X                break;
  694. X            case PRCY:
  695. X                if (Rate == 0.)
  696. X                    clear_wline(thisline, LOANX, LOANR, 0, 1);
  697. X                break;
  698. X            case YRY:
  699. X                if (Years == 0.)
  700. X                    clear_wline(thisline, LOANX, LOANR, 0, 1);
  701. X                break;
  702. X            }
  703. X
  704. X            if ((ck = ledit(floatbuf, loan_map, thisline, LOANX,
  705. X                LOANR, 0, 1, 1)) == 1)
  706. X                break;
  707. X            did_input = strlen(floatbuf);
  708. X
  709. X            if (ck == 2 && Pymt > 0. && !Too_big) {
  710. X                ryr=CY, rxr=CX;
  711. X                ck = printamort();
  712. X                move(CY=ryr, CX=rxr);
  713. X                pfresh();
  714. X                if (ck == 2)
  715. X                    break;
  716. X                continue;
  717. X            }
  718. X
  719. X            if (did_input) {
  720. X                switch(thisline) {
  721. X                    case AMTY:
  722. X                        Amt = atof(floatbuf);
  723. X                        break;
  724. X                    case PRCY:
  725. X                        Rate = atof(floatbuf);
  726. X                        break;
  727. X                    case YRY:
  728. X                        Years = atof(floatbuf);
  729. X                        break;
  730. X                }
  731. X                Too_big = show_pymt();
  732. X            }
  733. X
  734. X            if (++thisline > YRY)
  735. X                thisline = AMTY;
  736. X        }
  737. X        PYX;
  738. X        pfresh();
  739. X    }
  740. X    TR_
  741. X}
  742. X
  743. Xshow_pymt()
  744. X{
  745. X    double nonzero;
  746. X    char reformat[32];
  747. X    static char *fid = "show_pymt";
  748. X
  749. X    _TR
  750. X    Months = Years * 12.;
  751. X    I_mo = (Rate / 100.) / 12.;
  752. X    nonzero = 1. - pow(1. + I_mo, - Months);
  753. X    if (nonzero == 0. || I_mo == 0.)
  754. X        Pymt = Showpymt = 0.;
  755. X    else {
  756. X        Pymt = Amt * (I_mo / nonzero);
  757. X        Showpymt = Pymt + .00999999;
  758. X    }
  759. X
  760. X    sprintf(reformat, "%.2f", Showpymt);
  761. X    Showpymt = atof(reformat);
  762. X    if (show_float(Showpymt, PAYY, 2)) {
  763. X        TR_
  764. X        return(-1);
  765. X    }
  766. X    TR_
  767. X    return(0);
  768. X}
  769. X
  770. Xshow_float(value, where, decimals)
  771. Xdouble value;
  772. Xint where, decimals;
  773. X{
  774. X    char loanbuf[32];
  775. X    char *lp = loanbuf;
  776. X    register char *cp;
  777. X    static char *fid = "show_float";
  778. X
  779. X    _TR
  780. X    strcpy (lp, Sp13);
  781. X    sprintf(lp,  "%.*f",decimals , value);
  782. X    (strlen(lp) < 13) ? (*(lp + strlen(lp)) = ' ') : (*(lp + 13) = 0);
  783. X
  784. X    cp = lp + 13;
  785. X    if (where > YRY)
  786. X        for (; --cp >= lp;)
  787. X            if (*cp == '.')
  788. X                break;
  789. X
  790. X    if (cp >= lp) {
  791. X        mvaddstr(where, LOANX, lp);
  792. X        TR_
  793. X        return(0);
  794. X    }
  795. X
  796. X    mvaddstr(where, LOANX, "overflow     ");
  797. X    TR_
  798. X    return(-1);
  799. X}
  800. X
  801. Xprintamort()
  802. X{
  803. X    double a_amt, ppay, ipay, yppay, yipay;
  804. X    FILE *fp;
  805. X    char *token, *np;
  806. X    int ck, startmonth, startyear, yr;
  807. X    int pyp, pxp;
  808. X    register int ri;
  809. X    int lastmonth;
  810. X    char round[32];
  811. X    char datebuf[LOANSIZ + 1];
  812. X    static char savedate[LOANSIZ + 1];
  813. X    char namebuf[TITSIZ + 1];
  814. X    char spaceless[TITSIZ + 1];
  815. X    int did_input;
  816. X    static char *fid = "printamort";
  817. X
  818. X    _TR
  819. X    if (strlen(savedate))
  820. X        mvaddstr(DATY, LOANX, savedate);
  821. X
  822. X    if ((ck = ledit(&datebuf[0], date_map, DATY,
  823. X        LOANX, LOANR, 0, 1, 0)) == 1) {
  824. X        TR_
  825. X        return(1);
  826. X    }
  827. X    if (ck == 2) {  /* types ^B, I have no idea what this does */
  828. X        TR_
  829. X        return(2);
  830. X    }
  831. X    did_input = datebuf[0];
  832. X
  833. X    if ((token = pactok(&datebuf[0], " .,/:")) == ZERO)
  834. X        startmonth = 1, startyear = atoi(Thisyear);
  835. X    if ((startmonth = whichmonth(token)) == 0)
  836. X        startmonth = 1;
  837. X    if ((token = pactok(ZERO, " .,/:")) == ZERO)
  838. X        startyear = atoi(Thisyear);
  839. X    else if ((startyear = atoi(token)) < 1)
  840. X        startyear = atoi(Thisyear);
  841. X    else if (startyear < 1900)
  842. X        startyear += 1900;
  843. X
  844. X    move(DATY, LOANX);
  845. X    printw("%.2d/%.4d      ", startmonth, startyear);
  846. X    if (did_input)
  847. X        sprintf(savedate, "%.2d/%.4d      ", startmonth, startyear);
  848. X    pfresh();
  849. X
  850. X    Basq[EDITREQ] = Bb[LOANREQ];
  851. X    CYX;  /* to save the caller'r coordinates */
  852. X    update();  /* this returns to the original coordinates,
  853. X                  but does'nt pfresh */
  854. Xretry:
  855. X
  856. X    ledit(namebuf, amort_map, BOT, FBOUND, RBOUND, 1, 1, 0);
  857. X
  858. X    if (strlen(namebuf) == 0) {
  859. X        strcpy(spaceless, Amortname);
  860. X        for (np = spaceless; *np > 32; np++);
  861. X        *np = '\0';
  862. X        standout();
  863. X        mvaddstr(BOT, FBOUND, Amortname);
  864. X        standend();
  865. X        pfresh();
  866. X    }
  867. X    else {
  868. X        strcpy(Amortname, namebuf);
  869. X        strcpy(spaceless, namebuf);
  870. X    }
  871. X
  872. X    if ((fp = fopen(spaceless, "w")) == NULL) {
  873. X        standout();
  874. X        mvaddstr(BOT, ULEFT, "can't access:");
  875. X        pfresh();
  876. X        goto retry;
  877. X    }
  878. X    
  879. X    fprintf(fp, "\
  880. XAMORTIZATION SCHEDULE\n\n");
  881. X    fprintf(fp, "\
  882. X        PREPARED FOR    %s\n", Amortname);
  883. X    fprintf(fp, "\
  884. X        LOAN AMOUNT     %.2f\n", Amt);
  885. X    fprintf(fp, "\
  886. X        MONTHLY PAYMENT %.2f\n", Showpymt);
  887. X    fprintf(fp, "\
  888. X        LENDING RATE    %.3f%c\n", Rate, '\045');
  889. X    fprintf(fp, "\
  890. X        TERM YEARS      %.2f\n\n", Years);
  891. X
  892. X/* format field widths
  893. X12345678901 1234567890123 12345678901234567890 12345678901234567890 XX
  894. X*/
  895. X    fprintf(fp, "\
  896. XPAYMENT         DUE               PRINCIPAL          INTEREST           NEW\n");
  897. X    fprintf(fp, "\
  898. XNUMBER          DATE              PAYMENT            PAYMENT            BALANCE\n\n");
  899. X
  900. X    a_amt = Amt;
  901. X    ck = startmonth;
  902. X    Intrst = yppay = yipay = 0.;
  903. X    yr = 1;
  904. X    for (ri = 1, lastmonth = (int)Months; ri < lastmonth; ri++) {
  905. X        ipay = I_mo * a_amt;
  906. X        sprintf(round, "%.2f", ipay);
  907. X        ipay = atof(round);
  908. X        yipay += ipay;
  909. X        ppay = Pymt - ipay + .009999999;
  910. X        sprintf(round, "%.2f", ppay);
  911. X        ppay = atof(round);
  912. X        yppay += ppay;
  913. X        a_amt -= ppay;
  914. X        fprintf(fp, "\
  915. X  %4d      %.2d/01/%.4d    %17.2f %17.2f %17.2f\n",
  916. X            ri, ck, startyear, ppay, ipay, a_amt);
  917. X        if (++ck > 12)
  918. X            ck = 1;
  919. X        if (((ri - 1) % 12) == (12 - startmonth)) {
  920. X            fprintf(fp, "\
  921. XYEAR %.2d TOTAL:            %17.2f %17.2f\n\n", yr++, yppay, yipay);
  922. X            Intrst += yipay;
  923. X            ++startyear;
  924. X            yppay = yipay = 0.;
  925. X        }
  926. X    }
  927. X    ipay = I_mo * a_amt;
  928. X    sprintf(round, "%.2f", ipay);
  929. X    ipay = atof(round);
  930. X    yipay += ipay;
  931. X    ppay = Pymt - ipay + .009999999;
  932. X    sprintf(round, "%.2f", ppay);
  933. X    ppay = atof(round);
  934. X    a_amt -= ppay;
  935. X    ppay += a_amt;
  936. X    yppay += ppay;
  937. X    a_amt = 0.;
  938. X    Intrst += yipay;
  939. X    fprintf(fp, "\
  940. X  %4d      %.2d/01/%.4d    %17.2f %17.2f %17.2f\n",
  941. X        ri, ck, startyear, ppay, ipay, a_amt);
  942. X    fprintf(fp, "\
  943. XYEAR %.2d TOTAL:            %17.2f %17.2f\n\n", yr, yppay, yipay);
  944. X    fprintf(fp, "\
  945. XGRAND TOTAL:              %17.2f %17.2f\n", Amt, Intrst);
  946. X    fclose(fp);
  947. X
  948. X    strcpy(Bb[LOANREQ] + BUFSTOP, Amortname);
  949. X    rev_clear(Bb[LOANREQ] + TITSIZ);
  950. X    Basq[EDITREQ] = ZERO;
  951. X
  952. X    PYX;
  953. X    update();
  954. X    TR_
  955. X    return(0);
  956. X}
  957. X
  958. SHAR_EOF
  959. $TOUCH -am 0221163890 amort.c &&
  960. chmod 0644 amort.c ||
  961. echo "restore of amort.c failed"
  962. set `wc -c amort.c`;Wc_c=$1
  963. if test "$Wc_c" != "7762"; then
  964.     echo original size 7762, current size $Wc_c
  965. fi
  966. # ============= atoi.c ==============
  967. echo "x - extracting atoi.c (Text)"
  968. sed 's/^X//' << 'SHAR_EOF' > atoi.c &&
  969. X/* atoi.c */
  970. X/**********************************************************************
  971. X*    File Name     : atoi.c
  972. X*    Function      : ascii/decimal/octal/hex converter of pac
  973. X*    Author        : Istvan Mohos, 1987
  974. X***********************************************************************/
  975. X
  976. X#include "defs.h"
  977. X#define ATOIMAP
  978. X#include "maps.h"
  979. X#undef ATOIMAP
  980. X
  981. Xbyte_conv(from)
  982. Xint from;
  983. X{
  984. X    char c, bbuf[10], *bb;
  985. X    int pyp, pxp;
  986. X    int ri, ffd, value;
  987. X    static char *fid = "byte_conv";
  988. X
  989. X    _TR
  990. X    CYX;
  991. X    switch(from) {
  992. X        case 4:
  993. X            mvaddstr(UTOP + 1, ATOIX, "ENTER 3");
  994. X            mvaddstr(UTOP + 2, ATOIX, "DECIMAL");
  995. X            mvaddstr(UTOP + 3, ATOIX, "DIGITS ");
  996. X            value = -1;
  997. X            while(value == -1) {
  998. X                mvaddstr(UTOP, ATOIX, "dec    ");
  999. X
  1000. X                ledit(bbuf, a_ed_map, UTOP, ATOIX+4, ATOIX+6, 0, 1, 1);
  1001. X                if (!*bbuf)
  1002. X                    continue;
  1003. X                value = 0;
  1004. X                upcase(bbuf);
  1005. X                bb = bbuf;
  1006. X                for (ri = strlen(bbuf); --ri >= 0; bb++) {
  1007. X                    value *= 10;
  1008. X                    value += (*bb > 57) ? (*bb - 55) : (*bb - 48);
  1009. X                }
  1010. X                if (value < 0 || value > 127) {
  1011. X                    value = -1;
  1012. X                    continue;
  1013. X                }
  1014. X            }
  1015. X            move(UTOP, ATOIX);
  1016. X            printw("dec %3d", value);
  1017. X
  1018. X            move(UTOP + 1, ATOIX);
  1019. X            if (value == 127)
  1020. X                printw("asc DEL");
  1021. X            else if (value < 33)
  1022. X                printw("%s",lotab[value]);
  1023. X            else
  1024. X                printw("asc   %c",value);
  1025. X
  1026. X            move(UTOP + 2, ATOIX);
  1027. X            printw("oct %.3o", value);
  1028. X
  1029. X            move(UTOP + 3, ATOIX);
  1030. X            printw("hex  %.2x", value);
  1031. X            break;
  1032. X        case 1:
  1033. X        default:
  1034. X            ri = 0;
  1035. X#ifdef sun
  1036. X            signal(SIGHUP,  Save_sig[ri++]);
  1037. X            signal(SIGINT,  Save_sig[ri++]);
  1038. X            signal(SIGQUIT, Save_sig[ri++]);
  1039. X            signal(SIGTERM, Save_sig[ri++]);
  1040. X#else
  1041. X            Save_sig[ri++] = signal(SIGHUP,  SIG_IGN);
  1042. X            Save_sig[ri++] = signal(SIGINT,  SIG_IGN);
  1043. X            Save_sig[ri++] = signal(SIGQUIT, SIG_IGN);
  1044. X            Save_sig[ri++] = signal(SIGTERM, SIG_IGN);
  1045. X#endif /* sun */
  1046. X
  1047. X#ifndef REALUNIX
  1048. X#ifdef sun
  1049. X            signal(SIGTSTP, Save_sig[ri++]);
  1050. X            signal(SIGCONT, Save_sig[ri++]);
  1051. X#else
  1052. X            Save_sig[ri++] = signal(SIGTSTP, SIG_IGN);
  1053. X            Save_sig[ri++] = signal(SIGCONT, SIG_IGN);
  1054. X#endif /* sun */
  1055. X#endif /* !REALUNIX */
  1056. X
  1057. X            mvaddstr(UTOP + 1, ATOIX, "    HIT");
  1058. X            mvaddstr(UTOP + 2, ATOIX, "    ANY");
  1059. X            mvaddstr(UTOP + 3, ATOIX, "    KEY");
  1060. X            mvaddstr(UTOP, ATOIX, "asc    ");
  1061. X            move(UTOP, ATOIX + 6);
  1062. X            pfresh();
  1063. X            ffd = dup(0);
  1064. X            close(0);
  1065. X            read(ffd, &c, 1);
  1066. X            dup(ffd);
  1067. X            close(ffd);
  1068. X            value = c & 127;
  1069. X
  1070. X            move(UTOP, ATOIX);
  1071. X            if (value == 127)
  1072. X                printw("asc DEL");
  1073. X            else if (value < 33)
  1074. X                printw("%s",lotab[value]);
  1075. X            else
  1076. X                printw("asc   %c",value);
  1077. X            move(UTOP + 1, ATOIX);
  1078. X            printw("dec %3d", value);
  1079. X            move(UTOP + 2, ATOIX);
  1080. X            printw("oct %.3o", value);
  1081. X            move(UTOP + 3, ATOIX);
  1082. X            printw("hex  %.2x", value);
  1083. X
  1084. X            ri = 0;
  1085. X            signal(SIGHUP,  Save_sig[ri++]);
  1086. X            signal(SIGINT,  Save_sig[ri++]);
  1087. X            signal(SIGQUIT, Save_sig[ri++]);
  1088. X            signal(SIGTERM, Save_sig[ri++]);
  1089. X
  1090. X#ifndef REALUNIX
  1091. X            signal(SIGTSTP, Save_sig[ri++]);
  1092. X            signal(SIGCONT, Save_sig[ri++]);
  1093. X#endif
  1094. X            break;
  1095. X        case 15:
  1096. X            mvaddstr(UTOP + 1, ATOIX, "ENTER 3");
  1097. X            mvaddstr(UTOP + 2, ATOIX, "OCTAL  ");
  1098. X            mvaddstr(UTOP + 3, ATOIX, "DIGITS ");
  1099. X            value = -1;
  1100. X            while(value == -1) {
  1101. X                mvaddstr(UTOP, ATOIX, "oct    ");
  1102. X
  1103. X                ledit(bbuf, a_ed_map, UTOP, ATOIX+4, ATOIX+6, 0, 1, 1);
  1104. X                if (!*bbuf)
  1105. X                    continue;
  1106. X                value = 0;
  1107. X                upcase(bbuf);
  1108. X                bb = bbuf;
  1109. X                for (ri = strlen(bbuf); --ri >= 0; bb++) {
  1110. X                    value <<= 3;
  1111. X                    value += (*bb > 57) ? (*bb - 55) : (*bb - 48);
  1112. X                }
  1113. X                if (value < 0 || value > 127) {
  1114. X                    value = -1;
  1115. X                    continue;
  1116. X                }
  1117. X            }
  1118. X            move(UTOP, ATOIX);
  1119. X            printw("oct %.3o", value);
  1120. X
  1121. X            move(UTOP + 1, ATOIX);
  1122. X            if (value == 127)
  1123. X                printw("asc DEL");
  1124. X            else if (value < 33)
  1125. X                printw("%s",lotab[value]);
  1126. X            else
  1127. X                printw("asc   %c",value);
  1128. X            move(UTOP + 2, ATOIX);
  1129. X            printw("dec %3d", value);
  1130. X            move(UTOP + 3, ATOIX);
  1131. X            printw("hex  %.2x", value);
  1132. X            break;
  1133. X        case 24:
  1134. X            mvaddstr(UTOP + 1, ATOIX, "ENTER 2");
  1135. X            mvaddstr(UTOP + 2, ATOIX, "HEX    ");
  1136. X            mvaddstr(UTOP + 3, ATOIX, "DIGITS ");
  1137. X            value = -1;
  1138. X            while(value == -1) {
  1139. X                mvaddstr(UTOP, ATOIX, "hex    ");
  1140. X
  1141. X                ledit(bbuf, a_ed_map, UTOP, ATOIX+4, ATOIX+6, 0, 1, 1);
  1142. X                if (!*bbuf)
  1143. X                    continue;
  1144. X                value = 0;
  1145. X                upcase(bbuf);
  1146. X                bb = bbuf;
  1147. X                for (ri = strlen(bbuf); --ri >= 0; bb++) {
  1148. X                    value <<= 4;
  1149. X                    value += (*bb > 57) ? (*bb - 55) : (*bb - 48);
  1150. X                }
  1151. X                if (value < 0 || value > 127) {
  1152. X                    value = -1;
  1153. X                    continue;
  1154. X                }
  1155. X            }
  1156. X            move(UTOP, ATOIX);
  1157. X            printw("hex  %.2x", value);
  1158. X
  1159. X            move(UTOP + 1, ATOIX);
  1160. X            if (value == 127)
  1161. X                printw("asc DEL");
  1162. X            else if (value < 33)
  1163. X                printw("%s",lotab[value]);
  1164. X            else
  1165. X                printw("asc   %c",value);
  1166. X
  1167. X            move(UTOP + 2, ATOIX);
  1168. X            printw("dec %3d", value);
  1169. X            move(UTOP + 3, ATOIX);
  1170. X            printw("oct %.3o", value);
  1171. X            break;
  1172. X    }
  1173. X    PYX;
  1174. X    pfresh();
  1175. XTR_
  1176. X}
  1177. X
  1178. SHAR_EOF
  1179. $TOUCH -am 0221173890 atoi.c &&
  1180. chmod 0644 atoi.c ||
  1181. echo "restore of atoi.c failed"
  1182. set `wc -c atoi.c`;Wc_c=$1
  1183. if test "$Wc_c" != "6366"; then
  1184.     echo original size 6366, current size $Wc_c
  1185. fi
  1186. # ============= bitwise.c ==============
  1187. echo "x - extracting bitwise.c (Text)"
  1188. sed 's/^X//' << 'SHAR_EOF' > bitwise.c &&
  1189. X/* bitwise.c */
  1190. X/**********************************************************************
  1191. X*    File Name     : bitwise.c
  1192. X*    Function      : and/or/xor/not/two's complement functions of pac
  1193. X*    Author        : Istvan Mohos, 1987
  1194. X***********************************************************************/
  1195. X
  1196. X
  1197. X#include "defs.h"
  1198. X#include "toktab.h"
  1199. X
  1200. X/* bitwise operators:
  1201. X   Ignore negative signs, if any.
  1202. X   Add preceding zeros to match digit count of integral part of numbers.
  1203. X   Add trailing zeros to match digit count of fractional part of nums.
  1204. X   Flip bits as appropriate.
  1205. X*/
  1206. X   
  1207. Xchar *
  1208. Xbitwise(oper, operand1, operand2, negflag)
  1209. Xchar *operand1, *operand2;
  1210. Xint oper, *negflag;
  1211. X{
  1212. X
  1213. X#ifdef BITTEST
  1214. X    static char debug1[LINEMAX], debug2[LINEMAX];
  1215. X    static
  1216. X#endif
  1217. X    char buf1[LINEMAX], buf2[LINEMAX];
  1218. X
  1219. X    static char bitbuf[LINEMAX];
  1220. X    char *bp = bitbuf;
  1221. X    char *pt1 = operand1;
  1222. X    char *pt2 = operand2;
  1223. X    register char *r1, *r2;
  1224. X    register int ri;
  1225. X    int leflen1, leflen2;
  1226. X    int ritlen1 = 0;
  1227. X    int ritlen2 = 0;
  1228. X    int dot1 = 0;
  1229. X    int dot2 = 0;
  1230. X    int len_of1, len_of2;
  1231. X    int maxlef, maxrit;
  1232. X    static char *fid = "bitwise";
  1233. X
  1234. X    _TR
  1235. X    *bp++ = Base_str[2];
  1236. X    *bp++ = ' ';
  1237. X
  1238. X    /* ignore signs */
  1239. X    *negflag = 0;
  1240. X    if (*pt1 == '-')
  1241. X        ++pt1;
  1242. X    len_of1 = strlen(pt1);
  1243. X    for (r1 = pt1 + len_of1; --r1 >= pt1;)
  1244. X        if (*r1 == '.') {
  1245. X            dot1 = 1;
  1246. X            break;
  1247. X        }
  1248. X    if (!dot1)
  1249. X       leflen1 = len_of1;
  1250. X    else {
  1251. X       leflen1 = r1 - pt1;
  1252. X       ritlen1 = len_of1 - leflen1 - 1;
  1253. X    }
  1254. X    
  1255. X    switch (oper) {
  1256. X        default:
  1257. X        case AND:
  1258. X        case OR:
  1259. X        case XOR:
  1260. X            if (*pt2 == '-')
  1261. X                ++pt2;
  1262. X            len_of2 = strlen(pt2);
  1263. X            for (r2 = pt2 + len_of2; --r2 >= pt2;)
  1264. X                if (*r2 == '.') {
  1265. X                    dot2 = 2;
  1266. X                    break;
  1267. X                }
  1268. X            if (!dot2)
  1269. X               leflen2 = len_of2;
  1270. X            else {
  1271. X               leflen2 = r2 - pt2;
  1272. X               ritlen2 = len_of2 - leflen2 - 2;
  1273. X            }
  1274. X        
  1275. X            maxlef = (leflen1 > leflen2) ? leflen1 : leflen2;
  1276. X            maxrit = (ritlen1 > ritlen2) ? ritlen1 : ritlen2;
  1277. X
  1278. X            r1 = buf1;
  1279. X            for (ri = maxlef - leflen1; --ri >= 0; *r1++ = '0');
  1280. X            strcpy(r1, pt1);
  1281. X            r1 += len_of1;
  1282. X            if (dot1 || dot2)
  1283. X                *r1++ = '.';
  1284. X            for (ri = maxrit - ritlen1; --ri >= 0; *r1++ = '0');
  1285. X            *r1 = '\0';
  1286. X            r1 = buf1;
  1287. X
  1288. X            r2 = buf2;
  1289. X            for (ri = maxlef - leflen2; --ri >= 0; *r2++ = '0');
  1290. X            strcpy(r2, pt2);
  1291. X            r2 += len_of2;
  1292. X            if (dot1 || dot2)
  1293. X                *r2++ = '.';
  1294. X            for (ri = maxrit - ritlen2; --ri >= 0; *r2++ = '0');
  1295. X            *r2 = '\0';
  1296. X            ri = r2 - buf2; /* not including the null */
  1297. X            r2 = buf2;
  1298. X
  1299. X            switch (oper) {
  1300. X                case AND:
  1301. X                    for (; --ri >= 0; r1++, r2++, bp++)
  1302. X                        if (*r1 == '1' && *r2 == '1')
  1303. X                            *bp = '1';
  1304. X                        else
  1305. X                            *bp = '0';
  1306. X                    break;
  1307. X                case OR:
  1308. X                    for (; --ri >= 0; r1++, r2++, bp++)
  1309. X                        if (*r1 == '1' || *r2 == '1')
  1310. X                            *bp = '1';
  1311. X                        else
  1312. X                            *bp = '0';
  1313. X                    break;
  1314. X                case XOR:
  1315. X                    for (; --ri >= 0; r1++, r2++, bp++)
  1316. X                        if ((*r1 == '1' && *r2 == '0') ||
  1317. X                            (*r1 == '0' && *r2 == '1'))
  1318. X                            *bp = '1';
  1319. X                        else
  1320. X                            *bp = '0';
  1321. X                    break;
  1322. X            }
  1323. X            *bp = '\0';
  1324. X            if (dot1 || dot2)
  1325. X                *(bitbuf + 2 + maxlef) = '.';
  1326. X
  1327. X#ifdef BITTEST
  1328. X    strcpy(debug1, pt1);
  1329. X    strcpy(debug2, pt2);
  1330. X    if (Trace && Tf != NULL)
  1331. X        fprintf(Tf,
  1332. X        "\n<<<%s>>>\n<<<%s>>>\n<<<<%s>>>\n<<<%s>>>\n<<<%s>>>\n",
  1333. X        debug1, debug2, buf1, buf2, bitbuf);
  1334. X#endif
  1335. X
  1336. X            TR_
  1337. X            return(bitbuf);
  1338. X
  1339. X        case TW:
  1340. X            if (dot1) {
  1341. X                TR_
  1342. X                return(ZERO);
  1343. X            }
  1344. X            if (atoi(pt1) == 0) {
  1345. X                strcpy(bp, "-1");
  1346. X                TR_
  1347. X                return(bitbuf);
  1348. X            }
  1349. X            /* case continues */
  1350. X        case NOT:
  1351. X
  1352. X            /* convert second number (in base 10), to size of
  1353. X               field in which to evaluate the operand */
  1354. X            if (*pt2 == '-')
  1355. X                ++pt2;
  1356. X            if ((len_of2 = atoi(pt2)) > LINEMAX - 4 - ritlen1) {
  1357. X                TR_
  1358. X                return(ZERO);
  1359. X            }
  1360. X
  1361. X            if (*pt1 == '1' && len_of2 == leflen1)
  1362. X                *negflag = 1;
  1363. X            if (leflen1 > len_of2) {
  1364. X                len_of2 = leflen1; 
  1365. X                pac_err("field too small");
  1366. X            }
  1367. X            r2 = bp;
  1368. X            for (ri = len_of2; --ri >= 0; *r2++ = '1');
  1369. X            *r2++ = '.';
  1370. X            for (ri = ritlen1; --ri >= 0; *r2++ = '1');
  1371. X            *r2-- = '\0';  /* end of result in bitbuf */
  1372. X
  1373. X            /* on last digit */
  1374. X            r1 = pt1 + leflen1 + ritlen1 + dot1 -1;
  1375. X            for (ri = ritlen1; --ri >= 0; r1--, r2--)
  1376. X                if (*r1 == '1')
  1377. X                    *r2 = '0';
  1378. X            if (dot1)
  1379. X                *r2-- = *r1--;
  1380. X            else
  1381. X                *r2-- = '\0';
  1382. X
  1383. X            for (ri = leflen1; --ri >= 0; r1--, r2--)
  1384. X                if (*r1 == '1')
  1385. X                    *r2 = '0';
  1386. X            TR_
  1387. X            return(bitbuf);
  1388. X    }
  1389. X}
  1390. SHAR_EOF
  1391. $TOUCH -am 0221163890 bitwise.c &&
  1392. chmod 0644 bitwise.c ||
  1393. echo "restore of bitwise.c failed"
  1394. set `wc -c bitwise.c`;Wc_c=$1
  1395. if test "$Wc_c" != "5666"; then
  1396.     echo original size 5666, current size $Wc_c
  1397. fi
  1398. echo "End of part 2, continue with part 3"
  1399. exit 0
  1400.  
  1401.  
  1402.