home *** CD-ROM | disk | FTP | other *** search
- From: goer@ellis.uchicago.edu (Richard L. Goerwitz)
- Newsgroups: alt.sources
- Subject: itlib part 3 of 3
- Message-ID: <1990Dec21.055811.22641@midway.uchicago.edu>
- Date: 21 Dec 90 05:58:11 GMT
-
-
- ---- Cut Here and feed the following to sh ----
- #!/bin/sh
- # this is itlib.03 (part 3 of a multipart archive)
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file itlibdos.icn continued
- #
- if test ! -r _shar_seq_.tmp; then
- echo 'Please unpack part 1 first!'
- exit 1
- fi
- (read Scheck
- if test "$Scheck" != 3; then
- echo Please unpack part "$Scheck" next!
- exit 1
- else
- exit 0
- fi
- ) < _shar_seq_.tmp || exit 1
- if test ! -f _shar_wnt_.tmp; then
- echo 'x - still skipping itlibdos.icn'
- else
- echo 'x - continuing file itlibdos.icn'
- sed 's/^X//' << 'SHAR_EOF' >> 'itlibdos.icn' &&
- X then {
- X close(f)
- X # if entry ends in tc= then add in the named tc entry
- X entry ?:= tab(find("tc=")) ||
- X # recursively fetch the new termcap entry
- X (move(3), getentry(tab(find(":"))) ?
- X # remove the name field from the new entry
- X (tab(find(":")+1), tab(0)))
- X return entry
- X }
- X else {
- X \line := &null # must precede the next line
- X entry ||:= trim(trim(tab(0),'\\'),':')
- X }
- X }
- X }
- X }
- X }
- X
- X close(f)
- X er("getentry","can't find and/or process your termcap entry",3)
- X
- Xend
- X
- X
- X
- Xprocedure read_file(f)
- X
- X # Suspends all non #-initial lines in the file f.
- X # Removes leading tabs and spaces from lines before suspending
- X # them.
- X
- X local line
- X
- X \f | er("read_tcap_file","no valid termcap file found",3)
- X while line := read(f) do {
- X match("#",line) & next
- X line ?:= (tab(many('\t ')) | &null, tab(0))
- X suspend line
- X }
- X
- X fail
- X
- Xend
- X
- X
- X
- Xprocedure maketc_table(entry)
- X
- X # Maketc_table(s) (where s is a valid termcap entry for some
- X # terminal-type): Returns a table in which the keys are termcap
- X # capability designators, and the values are the entries in
- X # "entry" for those designators.
- X
- X local k, v
- X
- X /entry & er("maketc_table","no entry given",8)
- X if entry[-1] ~== ":" then entry ||:= ":"
- X
- X tc_table := table()
- X
- X entry ? {
- X
- X tab(find(":")+1) # tab past initial (name) field
- X
- X while tab((find(":")+1) \ 1) ? {
- X
- X &subject == "" & next
- X if k := 1(move(2), ="=")
- X then tc_table[k] := Decode(tab(find(":")))
- X else if k := 1(move(2), ="#")
- X then tc_table[k] := integer(tab(find(":")))
- X else if k := 1(tab(find(":")), pos(-1))
- X then tc_table[k] := true()
- X else er("maketc_table", "your termcap file has a bad entry",3)
- X }
- X }
- X
- X return tc_table
- X
- Xend
- X
- X
- X
- Xprocedure getval(id)
- X
- X /tc_table := maketc_table(getentry(getname())) |
- X er("getval","can't make a table for your terminal",4)
- X
- X return \tc_table[id] | fail
- X # er("getval","the current terminal doesn't support "||id,7)
- X
- Xend
- X
- X
- X
- Xprocedure Decode(s)
- X
- X # Does things like turn ^ plus a letter into a genuine control
- X # character.
- X
- X new_s := ""
- X
- X s ? {
- X while new_s ||:= tab(upto('\\^')) do {
- X chr := move(1)
- X if chr == "\\" then {
- X new_s ||:= {
- X case chr2 := move(1) of {
- X "\\" : "\\"
- X "^" : "^"
- X "E" : "\e"
- X "b" : "\b"
- X "f" : "\f"
- X "n" : "\n"
- X "r" : "\r"
- X "t" : "\t"
- X default : {
- X if any(&digits,chr2) then {
- X char(integer("8r"||chr2||move(2 to 0 by -1))) |
- X er("Decode","bad termcap entry",3)
- X }
- X else chr2
- X }
- X }
- X }
- X }
- X else new_s ||:= char(ord(map(move(1),&lcase,&ucase)) - 64)
- X }
- X new_s ||:= tab(0)
- X }
- X
- X return new_s
- X
- Xend
- X
- X
- X
- Xprocedure igoto(cm,col,line)
- X
- X local colline, range, increment, str, outstr, chr, x, y
- X
- X if col > (tc_table["co"]) | line > (tc_table["li"]) then {
- X colline := string(\col) || "," || string(\line) | string(\col|line)
- X range := "(" || tc_table["co"]-1 || "," || tc_table["li"]-1 || ")"
- X er("igoto",colline || " out of range " || (\range|""),9)
- X }
- X
- X # Use the Iconish 1;1 upper left corner & not the C-ish 0 offsets
- X increment := -1
- X outstr := ""
- X
- X cm ? {
- X while outstr ||:= tab(find("%")) do {
- X tab(match("%"))
- X chr := move(1)
- X if case chr of {
- X "." : outstr ||:= char(line + increment)
- X "+" : outstr ||:= char(line + ord(move(1)) + increment)
- X "d" : {
- X str := string(line + increment)
- X outstr ||:= right(str, integer(tab(any('23'))), "0") | str
- X }
- X }
- X then line :=: col
- X else {
- X case chr of {
- X "n" : line := ixor(line,96) & col := ixor(col,96)
- X "i" : increment := 0
- X "r" : line :=: col
- X "%" : outstr ||:= "%"
- X "B" : line := ior(ishift(line / 10, 4), line % 10)
- X ">" : {
- X x := move(1); y := move(1)
- X line > ord(x) & line +:= ord(y)
- X &null
- X }
- X } | er("goto","bad termcap entry",5)
- X }
- X }
- X return outstr || tab(0)
- X }
- X
- Xend
- X
- X
- X
- Xprocedure iputs(cp, affcnt)
- X
- X # Writes cp to the screen. Use this instead of writes() for
- X # compatibility with the Unix version (which will need to send
- X # null padding in some cases). Iputs() also does a useful type
- X # check.
- X
- X static num_chars
- X initial num_chars := &digits ++ '.'
- X
- X type(cp) == "string" |
- X er("iputs","you can't iputs() a non-string value!",10)
- X
- X cp ? {
- X if tab(many(num_chars)) & ="*" then
- X stop("iputs: MS-DOS termcap files shouldn't specify padding.")
- X writes(tab(0))
- X }
- X
- X return
- X
- Xend
- SHAR_EOF
- echo 'File itlibdos.icn is complete' &&
- true || echo 'restore of itlibdos.icn failed'
- rm -f _shar_wnt_.tmp
- fi
- # ============= termcap.dos ==============
- if test -f 'termcap.dos' -a X"$1" != X"-c"; then
- echo 'x - skipping termcap.dos (File already exists)'
- rm -f _shar_wnt_.tmp
- else
- > _shar_wnt_.tmp
- echo 'x - extracting termcap.dos (Text)'
- sed 's/^X//' << 'SHAR_EOF' > 'termcap.dos' &&
- Xansi|color|ansi-color|ibm|ibmpc|ANSI.SYS color:\
- X :co#80:li#24:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[H\E[2J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :ti=\E[0;44m:te=\E[0m:\
- X :so=\E[1;35;44m:se=\E[0;44m:\
- X :us=\E[1;31;44m:ue=\E[0;44m:\
- X :mb=\E[5m:md=\E[1m:me=\E[0;44m:
- Xmono|ansi-mono|ANSI.SYS:\
- X :co#80:li#24:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[H\E[2J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :so=\E[1m:se=\E[m:us=\E[4m:ue=\E[m:\
- X :mb=\E[5m:md=\E[1m:me=\E[m:
- Xnnansi-mono|NNANSI.SYS:\
- X :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[2J:cd=\E[J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :so=\E[1m:se=\E[2m:\
- X :us=\E[4m:ue=\E[24m:\
- X :mb=\E[5m:md=\E[1m:mh=\E[2m:mr=\E[7m:me=\E[m:\
- X :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:
- Xnnansi|nnansi-color|NNANSI.SYS color:\
- X :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[2J:cd=\E[J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :ti=\E[0;44m:te=\E[0m:\
- X :so=\E[1;35;44m:se=\E[2;37m:\
- X :us=\E[4m:ue=\E[24m:\
- X :mb=\E[5m:md=\E[1m:mh=\E[2m:mr=\E[7m:me=\E[0;44m:\
- X :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:
- Xnansi-mono|zansi-mono|N/ZANSI.SYS:\
- X :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[2J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :ti=\E[0m:te=\E[0m:\
- X :so=\E[1;35m:se=\E[0m:\
- X :us=\E[1;31m:ue=\E[0m:\
- X :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:\
- X :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:
- Xnansi|zansi|nansi-color|zansi-color|N/ZANSI.SYS color:\
- X :co#80:li#25:bs:pt:bl=^G:le=^H:do=^J:\
- X :cl=\E[2J:ce=\E[K:\
- X :ho=\E[H:cm=\E[%i%d;%dH:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :ti=\E[0;44m:te=\E[0m:\
- X :so=\E[1;35;44m:se=\E[0;44m:\
- X :us=\E[1;31;44m:ue=\E[0;44m:\
- X :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[0;44m:\
- X :al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:
- XAX|ANSI X3.64|full ANSI X3.64 (1977) standard:\
- X :co#80:li#24:bs:pt:am:mi:bl=^G:le=^H:\
- X :cl=\E[2J:ce=\E[K:cd=\E[J:\
- X :ho=\E[H:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:\
- X :up=\E[A:do=\E[B:le=\E[C:ri=\E[D:nd=\E[C:\
- X :UP=\E[%dA:DO=\E[%dB:LE=\E[%dC:RI=\E[%dD:\
- X :so=\E[7m:se=\E[m:us=\E[4m:ue=\E[m:\
- X :mb=\E[5m:md=\E[1m:mr=\E[7m:me=\E[m:as=^N:ae=^O:\
- X :ku=\E[A:kd=\E[B:kl=\E[C:kr=\E[D:kb=^H:\
- X :kn#4:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
- X :im=\E[4h:ei=\E[4l:al=\E[L:dl=\E[M:ic=\E[@:dc=\E[P:sf=\ED:sr=\EM:
- SHAR_EOF
- true || echo 'restore of termcap.dos failed'
- rm -f _shar_wnt_.tmp
- fi
- rm -f _shar_seq_.tmp
- echo You have unpacked the last part
- exit 0
-