.TITLE ASCEBC .IDENT /V01/ .ENABLE LC ; ; This subroutine converts an ASCII stringg into EBCDIC ; ; Author: V01 1-Feb-80 Phil Stephensen-Payne ; ; Calling Sequence: ; ; This subroutine is called via the standard FORTRAN interface as:- ; ; CALL ASCEBC (ASCSTR,EBCSTR,NUMCHR [,STATUS]) ; or ; STATUS = ASCEBC (ASCSTR,EBCSTR,NUMCHR) ; ; Where:- ; ASCSTR = Address of input ASCII string ; EBCSTR = Address of output EBCDIC 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 ASCII CHARACTERS TO EBCDIC. WHERE THERE IS NO EBCDIC ; EQUIVALENT OF THE ASCII CHARACTER, A SPACE IS SUBSTITUTED. SUCH ; SUBSTITUTIONS ARE FLAGGED BY * IN THE MIDDLE OF THE COMMENT ; FIELD. ; ; CATET: ; ASCII TO EBCDIC CONVERSION TABLE ; ; ; EBCDIC DECIMAL CODE CHARACTER ASCII OCTAL ; ; .BYTE 0. ; NULL 0 .BYTE 1. ; SOH 1 .BYTE 2. ; STX 2 .BYTE 3. ; ETX 3 .BYTE 55. ; EOT 4 .BYTE 45. ; ENQ 5 .BYTE 46. ; ACK 6 .BYTE 47. ; BEL 7 .BYTE 22. ; BS 10 .BYTE 5. ; HT 11 .BYTE 37. ; LF 12 .BYTE 11. ; VT 13 .BYTE 12. ; FF 14 .BYTE 13. ; CR 15 .BYTE 14. ; SO 16 .BYTE 15. ; SI 17 .BYTE 16. ; DLE 20 .BYTE 17. ; DC1 21 .BYTE 18. ; DC2 22 .BYTE 64. ; DC3 * 23 .BYTE 60. ; DC4 24 .BYTE 61. ; NAK 25 .BYTE 50. ; SYN 26 .BYTE 38. ; ETB 27 .BYTE 24. ; CAN 30 .BYTE 25. ; EM 31 .BYTE 63. ; SUB 32 .BYTE 39. ; ESC 33 .BYTE 28. ; FS 34 .BYTE 29. ; GS 35 .BYTE 30. ; RS 36 .BYTE 31. ; US 37 .BYTE 64. ; SPACE 40 .BYTE 90. ; ! 41 .BYTE 127. ; " 42 .BYTE 123. ; # 43 .BYTE 91. ; $ 44 .BYTE 108. ; % 45 .BYTE 80. ; & 46 .BYTE 125. ; ' 47 .BYTE 77. ; ( 50 .PAGE ; EBCDIC DECIMAL CODE CHARACTER ASCII OCTAL ; ; .BYTE 93. ; ) 51 .BYTE 92. ; * 52 .BYTE 78. ; + 53 .BYTE 107. ; , 54 .BYTE 96. ; - 55 .BYTE 75. ; . 56 .BYTE 97. ; / 57 .BYTE 240. ; 0 60 .BYTE 241. ; 1 61 .BYTE 242. ; 2 62 .BYTE 243. ; 3 63 .BYTE 244. ; 4 64 .BYTE 245. ; 5 65 .BYTE 246. ; 6 66 .BYTE 247. ; 7 67 .BYTE 248. ; 8 70 .BYTE 249. ; 9 71 .BYTE 122. ; : 72 .BYTE 94. ; ; (SIC!) 73 .BYTE 76. ; < 74 .BYTE 126. ; = 75 .BYTE 110. ; > 76 .BYTE 111. ; ? 77 .BYTE 124. ; @ 100 .BYTE 193. ; A CAPITALS 101 .BYTE 194. ; B " 102 .BYTE 195. ; C " 103 .BYTE 196. ; D " 104 .BYTE 197. ; E " 105 .BYTE 198. ; F " 106 .BYTE 199. ; G " 107 .BYTE 200. ; H " 110 .BYTE 201. ; I " 111 .BYTE 209. ; J " 112 .BYTE 210. ; K " 113 .BYTE 211. ; L " 114 .BYTE 212. ; M " 115 .BYTE 213. ; N " 116 .BYTE 214. ; O " 117 .BYTE 215. ; P " 120 .BYTE 216. ; Q " 121 .BYTE 217. ; R " 122 .BYTE 226. ; S " 123 .BYTE 227. ; T " 124 .BYTE 228. ; U " 125 .BYTE 229. ; V " 126 .PAGE ; EBCDIC DECIMAL CODE CHARACTER ASCII OCTAL ; ; .BYTE 230. ; W " 127 .BYTE 231. ; X " 130 .BYTE 232. ; Y " 131 .BYTE 233. ; Z " 132 .BYTE 173. ; [ 133 .BYTE 224. ; \ 134 .BYTE 189. ; ] 135 .BYTE 64. ; * 136 .BYTE 64. ; * 137 .BYTE 121. ; GRAVE ACCENT 140 .BYTE 129. ; A LOW CASE 141 .BYTE 130. ; B " 142 .BYTE 131. ; C " 143 .BYTE 132. ; D " 144 .BYTE 133. ; E " 145 .BYTE 134. ; F " 146 .BYTE 135. ; G " 147 .BYTE 136. ; H " 150 .BYTE 137. ; I " 151 .BYTE 145. ; J " 152 .BYTE 146. ; K " 153 .BYTE 147. ; L " 154 .BYTE 148. ; M " 155 .BYTE 149. ; N " 156 .BYTE 150. ; O " 157 .BYTE 151. ; P " 160 .BYTE 152. ; Q " 161 .BYTE 153. ; R " 162 .BYTE 162. ; S " 163 .BYTE 163. ; T " 164 .BYTE 164. ; U " 165 .BYTE 165. ; V " 166 .BYTE 166. ; W " 167 .BYTE 167. ; X " 170 .BYTE 168. ; Y " 171 .BYTE 169. ; Z " 172 .BYTE 64. ; 173 .BYTE 64. ; 174 .BYTE 64. ; 175 .BYTE 64. ; 176 .BYTE 64. ; DEL 177 ; .EVEN ; ; ; ; ASCEBC:: ; ENTRY POINT ;****** MOV #4,R0 ; Four parameters CALL PRMCHK ; BCS 40$ ; If CS parameter error - exit CLR R0 ; Otherwise success ; ; ; NOW SET UP THE REGISTERS AS REQUIRED IN THE MAIN CONVERSION LOOP ; MOV @6(R5),R4 ; R0 = COUNT OF CHARS TO CONVERT BLE 40$ ; IF NO CHARS TO CONVERT, EXIT MOV 2(R5),R1 ; R1 = ADDRESS OF ASCII CHARS MOV 4(R5),R2 ; R2 = ADDRESS OF O/P BUFFER ; ; ; NOW THE CONVERSION LOOP. ; 10$: MOVB (R1)+,R3 ; R3 CONTAINS ASCII CHARACTER BIC #177400,R3 ; CLEAR OUT TOP BYTE CMP #177,R3 ; IS IT IN VALID ASCII RANGE ? BGT 20$ ; YES - O.K. MOV #40,R3 ; NO - MAKE IT A SPACE ; ; 20$: MOVB CATET(R3),(R2)+ ; MOVE EBCDIC EQUIV. INTO DEST SOB R4,10$ ; LOOP UNTIL CHAR CNT EXHAUSTED ; ; ; CHARACTERS CONVERTED - EXIT ; 40$: RETURN .END