File: ctocc.x

package info (click to toggle)
iraf 2.18.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,000 kB
  • sloc: ansic: 115,890; fortran: 74,576; lisp: 18,888; yacc: 5,642; sh: 961; lex: 596; makefile: 509; asm: 159; csh: 54; xml: 33; sed: 4
file content (64 lines) | stat: -rw-r--r-- 1,762 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<ctype.h>

define	OCTAL		8

# CTOCC -- Convert a character into a printable character constant.
# Printable characters are output as is.  The standard control characters
# (newline, tab, etc.) are output as escape sequences (\n, \t, etc.).
# Other control characters are output in the form '^X'.  Characters which
# are neither printable nor standard control characters are output as
# octal constants of the form '\DDD'.  Note that the ouput string is not
# enclosed in ticks ('\n', etc.), because the generated character constant
# might appear in a quoted string (or someplace other than an explicit
# character constant).

int procedure ctocc (ch, outstr, maxch)

char	ch			# character to be output
char	outstr[ARB]		# output string
int	maxch			# max chars out

int	op, n
int	stridx()
define	output 	{outstr[op]=$1;op=op+1;if(op>maxch)goto overflow_}
define	overflow_ 99
include	"escchars.inc"

begin
	op = 1

	if (maxch > 0) {
	    if (IS_PRINT(ch)) {				# output char as is
		output (ch)
	    } else if (IS_CNTRL (ch)) {
		n = stridx (ch, mapped_chars)
		if (n > 0) {				# '\c'
		    output ('\\')
		    output (escape_chars[n])
		} else {
		    output ('^')			# control chars
		    output (ch + 'A' - 1)
		}

	    } else {					# '\nnn' 
		# Always output 3 digits so that strings like \0405 (a blank
		# followed by a `5') can be interpreted during the reverse
		# encoding operation.

		output ('\\')
		output (TO_DIGIT (mod (ch / 0100B, 010B)))
		output (TO_DIGIT (mod (ch / 0010B, 010B)))
		output (TO_DIGIT (mod (ch / 0001B, 010B)))
	    }
	}

	outstr[op] = EOS
	return (op-1)

overflow_
	outstr[1] = '?'					# no room, print '?'
	outstr[2] = EOS
	return (1)
end