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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
include <pkg/mef.h>
define MEF_PLVERSION MEF_HFLAG
define MEF_PLSIZE MEF_CGROUP
define DEF_SZBUF 32768
define INC_SZBUF 16384
define INC_HDRMEM 8100
define IDB_RECLEN 80
define KW_TITLE "$TITLE = "
define LEN_KWTITLE 9
define KW_CTIME "$CTIME = "
define LEN_KWCTIME 9
define KW_MTIME "$MTIME = "
define LEN_KWMTIME 9
define KW_LIMTIME "$LIMTIME = "
define LEN_KWLIMTIME 11
define KW_MINPIXVAL "$MINPIXVAL = "
define LEN_KWMINPIXVAL 13
define KW_MAXPIXVAL "$MAXPIXVAL = "
define LEN_KWMAXPIXVAL 13
define SZ_IMTITLE 383 # image title string
procedure mef_setpl (version, plsize, imhdr, title, ctime, mtime, limtime,
minval, maxval, mef)
int version #I PL version number
char imhdr[ARB] #I Mask title
char title[ARB]
int plsize #I Mask size of TY_SHORT
int ctime
int mtime
int limtime
real minval
real maxval
pointer mef #I Mef descriptor
int tlen, i, ch, hdrlen, nchars
pointer sp, tbuf, ip, op, rp, bp, hd
int strncmp(), ctol(), ctor(), strlen()
errchk realloc
begin
MEF_PLVERSION(mef) = version
MEF_PLSIZE(mef) = plsize
tlen= strlen(imhdr)
call smark (sp)
call salloc (tbuf, SZ_IMTITLE, TY_CHAR)
call salloc (bp, tlen, TY_CHAR)
call strcpy (imhdr, Memc[bp], tlen)
# Get the image title string.
for (ip = bp; Memc[ip] != EOS;) {
if (Memc[ip] == '$') {
if (strncmp (Memc[ip], KW_TITLE, LEN_KWTITLE) == 0) {
# Advance to first character of quoted string.
ip = ip + LEN_KWTITLE
while (Memc[ip] != EOS && Memc[ip] != '"')
ip = ip + 1
if (Memc[ip] == '"')
ip = ip + 1
# Extract the string.
op = tbuf
while (Memc[ip] != EOS && Memc[ip] != '"') {
if (Memc[ip] == '\\' && Memc[ip+1] == '"')
ip = ip + 1
Memc[op] = Memc[ip]
op = min (tbuf + SZ_IMTITLE, op + 1)
ip = ip + 1
}
# Store in image descriptor.
Memc[op] = EOS
call strcpy (Memc[tbuf], title, SZ_IMTITLE)
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
} else if (strncmp (Memc[ip], KW_CTIME, LEN_KWCTIME) == 0) {
# Decode the create time.
ip = ip + LEN_KWCTIME
rp = 1
if (ctol (Memc[ip], rp, ctime) <= 0)
ctime = 0
ip = ip + rp - 1
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
} else if (strncmp (Memc[ip], KW_MTIME, LEN_KWMTIME) == 0) {
# Decode the modify time.
ip = ip + LEN_KWMTIME
rp = 1
if (ctol (Memc[ip], rp, mtime) <= 0)
mtime = 0
ip = ip + rp - 1
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
} else if (strncmp (Memc[ip], KW_LIMTIME, LEN_KWLIMTIME) == 0) {
# Decode the limits time.
ip = ip + LEN_KWLIMTIME
rp = 1
if (ctol (Memc[ip], rp, limtime) <= 0)
limtime = 0
ip = ip + rp - 1
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
} else if (strncmp(Memc[ip],KW_MINPIXVAL,LEN_KWMINPIXVAL)==0) {
# Decode the minimum pixel value.
ip = ip + LEN_KWMINPIXVAL
rp = 1
if (ctor (Memc[ip], rp, minval) <= 0)
minval = 0.0
ip = ip + rp - 1
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
} else if (strncmp(Memc[ip],KW_MAXPIXVAL,LEN_KWMAXPIXVAL)==0) {
# Decode the maximum pixel value.
ip = ip + LEN_KWMAXPIXVAL
rp = 1
if (ctor (Memc[ip], rp, maxval) <= 0)
maxval = 0.0
ip = ip + rp - 1
# Advance to next line.
while (Memc[ip] != EOS && Memc[ip] != '\n')
ip = ip + 1
if (Memc[ip] == '\n')
ip = ip + 1
}
} else
break
}
hdrlen = tlen*2
call malloc (hd, hdrlen, TY_CHAR)
op = hd
while (Memc[ip] != EOS) {
rp = op
nchars = rp - hd
if (nchars + IDB_RECLEN + 2 > hdrlen) {
hdrlen = hdrlen + INC_HDRMEM
call realloc (hd, hdrlen, TY_CHAR)
op = hd + nchars
}
# Copy the saved card, leave IP positioned to past newline.
do i = 1, IDB_RECLEN {
ch = Memc[ip]
if (ch != EOS)
ip = ip + 1
if (ch == '\n')
break
Memc[op] = ch
op = op + 1
}
# Blank fill the card.
while (op - rp < IDB_RECLEN) {
Memc[op] = ' '
op = op + 1
}
# Add newline termination.
Memc[op] = '\n'; op = op + 1
}
Memc[op] = EOS
MEF_HDRP(mef) = hd
MEF_HSIZE(mef) = strlen(Memc[hd])
call sfree (sp)
end
|