.TITLE EBCASC .IDENT /V01/ .ENABLE LC ; ; This subroutine converts an EBCDIC stringg into ASCII ; ; Author: V01 1-Feb-80 Phil Stephensen-Payne ; ; Calling Sequence: ; ; This subroutine is called via the standard FORTRAN interface as:- ; ; CALL EBCASC (EBCSTR,ASCSTR,NUMCHR [,STATUS]) ; or ; STATUS = EBCASC (EBCSTR,ASCSTR,NUMCHR) ; ; Where:- ; EBCSTR = Address of input EBCDIC string ; ASCSTR = Address of output ASCII string ; NUMCHR = Number of characters in the string ; STATUS = Optional error return ; ; Errors Returned: ; ; STATUS = 0 if the operation was successful ; = -1 if a parameter error was detected ; ; External References: ; ; This module calls the subroutine PRMCHK. ; ; ; THE FOLLOWING TABLE IS USED AS A LOOK-UP TABLE FOR THE TRANSLAT- ; ION OF EBCDIC CHARACTERS TO ASCII. ; ; THE MULTIPLE ASTERICKS REPRESENT ACTION TAKEN WHERE THERE CAN BE ; NO DIRECT MAPPING BETWEEN THE ASCII AND THE EBCDIC AS FOLLOWS: ; ; ; ** * = UNPRINTABLE EBCDIC CHARACTER. ; ASCII SPACE SUBSTITUTED. ; ; ; ** ** = UNPRINTABLE EBCDIC CHARACTER ; AN ASCII APPROXIMATION MADE. ; ; ; *** = UNUSED EBCDIC CHARACTER ; ASCII SPACE SUBSTITUTED. ; ; ; ; CETAT: ; EBCDIC TO ASCII CONVERSION TABLE ; ; ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 0 ; NULL 0. .BYTE 1 ; SOH 1. .BYTE 2 ; STX 2. .BYTE 3 ; ETX 3. .BYTE 40 ; PF * 4. .BYTE 11 ; HT 5. .BYTE 40 ; LC * 6. .BYTE 177 ; DEL 7. .BYTE 40 ; *** 8. .BYTE 40 ; *** 9. .BYTE 40 ; SMM * 10. .BYTE 13 ; VT 11. .BYTE 14 ; FF 12. .BYTE 15 ; CR 13. .BYTE 16 ; SO 14. .BYTE 17 ; SI 15. .BYTE 20 ; DLE 16. .BYTE 21 ; DC1 17. .BYTE 22 ; DC2 18. .BYTE 40 ; TM * 19. .BYTE 40 ; RES * 20. .BYTE 40 ; NL * 21. .BYTE 10 ; BS 22. .BYTE 40 ; IL * 23. .BYTE 30 ; CAN 24. .BYTE 31 ; EM 25. .BYTE 40 ; CC * 26. .BYTE 40 ; CUI * 27. ; ; .PAGE ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 34 ; IFS ** 28. .BYTE 35 ; IGS ** 29. .BYTE 36 ; IRS ** 30. .BYTE 37 ; IUS ** 31. .BYTE 40 ; DS * 32. .BYTE 40 ; SOS * 33. .BYTE 34 ; FS 34. .BYTE 40 ; *** 35. .BYTE 40 ; BYP * 36. .BYTE 12 ; LF 37. .BYTE 27 ; ETB 38. .BYTE 33 ; ESC 39. .BYTE 40 ; *** 40. .BYTE 40 ; *** 41. .BYTE 40 ; SM * 42. .BYTE 40 ; CU2 * 43. .BYTE 40 ; *** 44. .BYTE 5 ; ENQ 45. .BYTE 6 ; ACK 46. .BYTE 7 ; BEL 47. .BYTE 40 ; *** 48. .BYTE 40 ; *** 49. .BYTE 26 ; SYN 50. .BYTE 40 ; *** 51. .BYTE 40 ; P2 * 52. .BYTE 40 ; RS * 53. .BYTE 40 ; UC * 54. .BYTE 4 ; EOT 55. .BYTE 40 ; *** 56. .BYTE 40 ; *** 57. .BYTE 40 ; *** 58. .BYTE 40 ; CU3 * 59. .BYTE 24 ; DC4 60. .BYTE 25 ; NAK 61. .BYTE 26 ; *** 62. .BYTE 32 ; SUB 63. .BYTE 40 ; SP 64. .BYTE 40 ; *** 65. .BYTE 40 ; *** 66. .BYTE 40 ; *** 67. .BYTE 40 ; *** 68. .BYTE 40 ; *** 69. .BYTE 40 ; *** 70. .BYTE 40 ; *** 71. .BYTE 40 ; *** 72. .BYTE 40 ; *** 73. .BYTE 40 ; ** * 74. .BYTE 56 ; . 75. .BYTE 74 ; < 76. .BYTE 50 ; ( 77. ; ; .PAGE ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 53 ; + 78. .BYTE 40 ; ** * 79. .BYTE 46 ; & 80. .BYTE 40 ; *** 81. .BYTE 40 ; *** 82. .BYTE 40 ; *** 83. .BYTE 40 ; *** 84. .BYTE 40 ; *** 85. .BYTE 40 ; *** 86. .BYTE 40 ; *** 87. .BYTE 40 ; *** 88. .BYTE 40 ; *** 89. .BYTE 41 ; ! 90. .BYTE 44 ; $ 91. .BYTE 52 ; * 92. .BYTE 51 ; ) 93. .BYTE 73 ; ; (SIC!) 94. .BYTE 40 ; ** * 95. .BYTE 55 ; ** ** 96. .BYTE 57 ; / 97. .BYTE 40 ; *** 98. .BYTE 40 ; *** 99. .BYTE 40 ; *** 100. .BYTE 40 ; *** 101. .BYTE 40 ; *** 102. .BYTE 40 ; *** 103. .BYTE 40 ; *** 104. .BYTE 40 ; *** 105. .BYTE 40 ; *** 106. .BYTE 54 ; , 107. .BYTE 45 ; % 108. .BYTE 40 ; ** 109. .BYTE 76 ; > 110. .BYTE 77 ; ? 111. .BYTE 40 ; *** 112. .BYTE 40 ; *** 113. .BYTE 40 ; *** 114. .BYTE 40 ; *** 115. .BYTE 40 ; *** 116. .BYTE 40 ; *** 117. .BYTE 40 ; *** 118. .BYTE 40 ; *** 119. .BYTE 40 ; *** 120. .BYTE 140 ; GRAVE ACCENT 121. .BYTE 72 ; : 122. .BYTE 43 ; # 123. .BYTE 100 ; @ 124. .BYTE 54 ; ' 125. .BYTE 75 ; = 126. .BYTE 42 ; " 127. .BYTE 40 ; *** 128. ; ; .PAGE ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 141 ; A LOW CASE 129. .BYTE 142 ; B " 130. .BYTE 143 ; C " 131. .BYTE 144 ; D " 132. .BYTE 145 ; E " 133. .BYTE 146 ; F " 134. .BYTE 147 ; G " 135. .BYTE 150 ; H " 136. .BYTE 151 ; I " 137. .BYTE 40 ; *** 138. .BYTE 40 ; ** * 139. .BYTE 40 ; ** * 140. .BYTE 50 ; ** ** 141. .BYTE 53 ; ** ** 142. .BYTE 40 ; ** * 143. .BYTE 40 ; *** 144. .BYTE 152 ; J LOW CASE 145. .BYTE 153 ; K " 146. .BYTE 154 ; L " 147. .BYTE 155 ; M " 148. .BYTE 156 ; N " 149. .BYTE 157 ; O " 150. .BYTE 160 ; P " 151. .BYTE 161 ; Q " 152. .BYTE 162 ; R " 153. .BYTE 40 ; *** 154. .BYTE 40 ; ** * 155. .BYTE 40 ; ** * 156. .BYTE 51 ; ** ** 157. .BYTE 40 ; ** * 158. .BYTE 40 ; ** * 159. .BYTE 40 ; ** * 160. .BYTE 40 ; ** * 161. .BYTE 163 ; S LOW CASE 162. .BYTE 164 ; T " 163. .BYTE 165 ; U " 164. .BYTE 166 ; V " 165. .BYTE 167 ; W " 166. .BYTE 170 ; X " 167. .BYTE 171 ; Y " 168. .BYTE 172 ; Z " 169. .BYTE 40 ; *** 170. .BYTE 40 ; ** * 171. .BYTE 40 ; ** * 172. .BYTE 133 ; [ 173. .BYTE 40 ; ** * 174. .BYTE 40 ; ** * 175. .BYTE 60 ; ** ** 176. .BYTE 61 ; ** ** 177. ; ; .PAGE ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 62 ; ** ** 178. .BYTE 63 ; ** ** 179. .BYTE 64 ; ** ** 180. .BYTE 65 ; ** ** 181. .BYTE 66 ; ** ** 182. .BYTE 67 ; ** ** 183. .BYTE 70 ; ** ** 184. .BYTE 71 ; ** ** 185. .BYTE 40 ; ** * 186. .BYTE 40 ; ** * 187. .BYTE 40 ; ** * 188. .BYTE 135 ; ] 189. .BYTE 40 ; ** * 190. .BYTE 55 ; - 191. .BYTE 40 ; ** * 192. .BYTE 101 ; A CAPITAL 193. .BYTE 102 ; B " 194. .BYTE 103 ; C " 195. .BYTE 104 ; D " 196. .BYTE 105 ; E " 197. .BYTE 106 ; F " 198. .BYTE 107 ; G " 199. .BYTE 110 ; H " 200. .BYTE 111 ; I " 201. .BYTE 40 ; *** 202. .BYTE 40 ; *** 203. .BYTE 40 ; *** 204. .BYTE 40 ; *** 205. .BYTE 40 ; *** 206. .BYTE 40 ; *** 207. .BYTE 40 ; *** 208. .BYTE 112 ; J CAPITALS 209. .BYTE 113 ; K " 210. .BYTE 114 ; L " 211. .BYTE 115 ; M " 212. .BYTE 116 ; N " 213. .BYTE 117 ; O " 214. .BYTE 120 ; P " 215. .BYTE 121 ; Q " 216. .BYTE 122 ; R " 217. .BYTE 40 ; *** 218. .BYTE 40 ; *** 219. .BYTE 40 ; *** 220. .BYTE 40 ; *** 221. .BYTE 40 ; *** 222. .BYTE 40 ; *** 223. .BYTE 40 ; *** 224. .BYTE 40 ; *** 225. .BYTE 123 ; S CAPITALS 226. .BYTE 124 ; T " 227. ; ; .PAGE ; ASCII OCTAL CODE CHARACTER EBCDIC DECIMAL ; ; .BYTE 125 ; U " 228. .BYTE 126 ; V " 229. .BYTE 127 ; W " 230. .BYTE 130 ; X " 231. .BYTE 131 ; Y " 232. .BYTE 132 ; Z " 233. .BYTE 40 ; *** 234. .BYTE 40 ; *** 235. .BYTE 40 ; *** 236. .BYTE 40 ; *** 237. .BYTE 40 ; *** 238. .BYTE 40 ; *** 239. .BYTE 60 ; 0 240. .BYTE 61 ; 1 241. .BYTE 62 ; 2 242. .BYTE 63 ; 3 243. .BYTE 64 ; 4 244. .BYTE 65 ; 5 245. .BYTE 66 ; 6 246. .BYTE 67 ; 7 247. .BYTE 70 ; 8 248. .BYTE 71 ; 9 249. .BYTE 40 ; *** 250. .BYTE 40 ; *** 251. .BYTE 40 ; *** 252. .BYTE 40 ; *** 253. .BYTE 40 ; *** 254. .BYTE 40 ; *** 255. ; .EVEN ; ; ; ; ; EBCASC:: ; MAIN ENTRY POINT ;****** MOV #4,R0 ; Four parameters CALL PRMCHK ; Check them BCS 20$ ; If CS parameter error - exit CLR R0 ; Signify success ; ; ; NOW SET UP THE REGISTERS AS REQUIRED IN THE MAIN CONVERSION LOOP ; MOV @6(R5),R4 ; R4 = COUNT OF CHARS TO CONVERT BLE 20$ ; IF NO CHARS TO CONVERT, EXIT MOV 2(R5),R1 ; R1 = ADDRESS OF EBCDIC CHARS MOV 4(R5),R2 ; R2 = ADDRESS OF O/P BUFFER ; ; ; NOW THE CONVERSION LOOP. ; 10$: MOVB (R1)+,R3 ; R3 CONTAINS EBCDIC CHARACTER BIC #177400,R3 ; CLEAR OUT TOP BYTE MOVB CETAT(R3),(R2)+ ; MOVE ASCII EQUIV. INTO DEST SOB R4,10$ ; LOOP UNTIL CHAR CNT EXHAUSTED ; ; ; CHARACTERS CONVERTED - EXIT ; 20$: RETURN .END