121 D E end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 300dpi
-TeXDict begin
-%%PaperSize: A4
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 75 693 a Fn(GNU)33 b(History)f(Library)p 75 743
-1800 17 v 960 791 a Fm(Edition)16 b(2.1,)e(for)h Fl(History)f(Library)g
-Fm(V)l(ersion)i(2.1.)1643 845 y(Marc)o(h)e(1996)75 2467
-y Fk(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)
--6 b(oundation)75 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6
-b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570
-1800 9 v eop
-%%Page: 2 2
-2 1 bop 75 250 a Fm(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f
-(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o
-(vides)h(a)75 305 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g
-(recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75
-373 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l
-(oundation)75 427 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)75
-482 y(Cam)o(bridge,)h(MA)g(02139)f(USA)75 549 y(P)o(ermission)j(is)f
-(gran)o(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i
-(of)f(this)h(man)o(ual)f(pro)o(vided)h(the)75 604 y(cop)o(yrigh)o(t)e
-(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h
-(on)f(all)h(copies.)75 671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g
-(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h
-(man)o(ual)g(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h
-(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g
-(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g
-(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75
-848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f
-(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another)
-g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i
-(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q
-(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f
-(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(oundation.)75
-2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 2661 y Fj(\015)g
-Fm(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)p
-eop
-%%Page: 1 3
-1 2 bop 75 -58 a Fm(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o
-(ely)1007 b(1)75 183 y Fi(1)41 b(Using)26 b(History)h(In)n(teractiv)n
-(ely)137 317 y Fm(This)16 b(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h
-(use)g(the)g(GNU)g(History)g(Library)h(in)o(teractiv)o(ely)l(,)g(from)e
-(a)h(user's)75 372 y(standp)q(oin)o(t.)35 b(It)20 b(should)g(b)q(e)h
-(considered)h(a)d(user's)h(guide.)35 b(F)l(or)19 b(information)h(on)g
-(using)h(the)f(GNU)75 427 y(History)15 b(Library)h(in)g(y)o(our)f(o)o
-(wn)g(programs,)e(see)j Fj(h)p Fm(unde\014ned)p Fj(i)g
-Fm([Programming)e(with)i(GNU)f(History],)75 482 y(page)g
-Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(.)75 625 y Fk(1.1)33
-b(History)22 b(Expansion)137 727 y Fm(The)c(History)g(library)h(pro)o
-(vides)f(a)f(history)h(expansion)h(feature)e(that)h(is)g(similar)h(to)e
-(the)h(history)75 782 y(expansion)12 b(pro)o(vided)g(b)o(y)f
-Fl(csh)p Fm(.)18 b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e
-(used)h(to)g(manipulate)h(the)f(history)75 836 y(information.)137
-909 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i
-(history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75
-964 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o
-(ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75
-1019 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f
-(quic)o(kly)l(.)137 1092 y(History)j(expansion)i(tak)o(es)d(place)i(in)
-h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i
-(whic)o(h)f(line)h(from)75 1147 y(the)h(history)f(list)i(should)g(b)q
-(e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f
-(select)i(p)q(ortions)e(of)75 1202 y(that)15 b(line)i(for)d(inclusion)k
-(in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e
-(the)g(history)g(is)h(called)h(the)75 1256 y Fh(ev)o(en)o(t)p
-Fm(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted)
-h(up)q(on)g(are)f(called)j Fh(w)o(ords)p Fm(.)i(V)l(arious)c
-Fh(mo)q(di\014ers)75 1311 y Fm(are)i(a)o(v)m(ailable)i(to)e(manipulate)
-i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o
-(to)h(w)o(ords)e(in)j(the)e(same)75 1366 y(fashion)c(that)e(Bash)i(do)q
-(es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes)
-h(are)f(considered)h(one)g(w)o(ord.)75 1421 y(History)18
-b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g
-(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1475
-y(whic)o(h)d(is)g(`)p Fl(!)p Fm(')e(b)o(y)h(default.)75
-1599 y Fg(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137
-1701 y Fm(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f
-(a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75
-1789 y Fl(!)216 b Fm(Start)16 b(a)g(history)h(substitution,)g(except)h
-(when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315
-1844 y(the)e(line,)i(`)p Fl(=)p Fm(')d(or)h(`)p Fl(\()p
-Fm('.)75 1929 y Fl(!)p Fh(n)191 b Fm(Refer)16 b(to)e(command)h(line)i
-Fh(n)p Fm(.)75 2015 y Fl(!-)p Fh(n)167 b Fm(Refer)16
-b(to)e(the)i(command)f Fh(n)g Fm(lines)i(bac)o(k.)75
-2100 y Fl(!!)192 b Fm(Refer)16 b(to)e(the)i(previous)f(command.)20
-b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fl(!-1)p Fm('.)75
-2186 y Fl(!)p Fh(string)102 b Fm(Refer)16 b(to)e(the)i(most)e(recen)o
-(t)h(command)g(starting)g(with)g Fh(string)p Fm(.)75
-2271 y Fl(!?)p Fh(string)t Fl([?])315 2326 y Fm(Refer)i(to)f(the)h
-(most)f(recen)o(t)h(command)g(con)o(taining)g Fh(string)p
-Fm(.)25 b(The)17 b(trailing)g(`)p Fl(?)p Fm(')f(ma)o(y)g(b)q(e)315
-2381 y(omitted)f(if)h(the)f Fh(string)k Fm(is)d(follo)o(w)o(ed)f
-(immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fl(^)p
-Fh(string1)t Fl(^)p Fh(string2)t Fl(^)315 2521 y Fm(Quic)o(k)i
-(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h
-Fh(string1)i Fm(with)e Fh(string2)p Fm(.)315 2576 y(Equiv)m(alen)o(t)g
-(to)d Fl(!!:s/)p Fh(string1)t Fl(/)p Fh(string2)t Fl(/)p
-Fm(.)75 2661 y Fl(!#)192 b Fm(The)15 b(en)o(tire)h(command)f(line)i(t)o
-(yp)q(ed)f(so)e(far.)p eop
-%%Page: 2 4
-2 3 bop 75 -58 a Fm(2)1347 b(GNU)15 b(History)g(Library)75
-183 y Fg(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279
-y Fm(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o
-(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fl(:)p
-Fm(')e(separates)h(the)75 333 y(ev)o(en)o(t)j(sp)q(eci\014cation)h
-(from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h
-(omitted)g(if)g(the)g(w)o(ord)f(designator)75 388 y(b)q(egins)f(with)g
-(a)e(`)p Fl(^)p Fm(',)h(`)p Fl($)p Fm(',)f(`)p Fl(*)p
-Fm(',)g(`)p Fl(-)p Fm(',)g(or)h(`)p Fl(\045)p Fm('.)24
-b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i
-(of)e(the)g(line,)75 443 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h
-(denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i
-(in)o(to)f(the)g(curren)o(t)f(line)75 498 y(separated)c(b)o(y)g(single)
-i(spaces.)75 575 y Fl(0)e(\(zero\))57 b Fm(The)15 b Fl(0)p
-Fm(th)g(w)o(ord.)20 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g
-(the)f(command)g(w)o(ord.)75 653 y Fh(n)215 b Fm(The)15
-b Fh(n)p Fm(th)h(w)o(ord.)75 731 y Fl(^)216 b Fm(The)15
-b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)75
-808 y Fl($)216 b Fm(The)15 b(last)h(argumen)o(t.)75 886
-y Fl(\045)216 b Fm(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g(most)g
-(recen)o(t)g(`)p Fl(?)p Fh(string)t Fl(?)p Fm(')f(searc)o(h.)75
-964 y Fh(x)p Fl(-)p Fh(y)168 b Fm(A)15 b(range)g(of)g(w)o(ords;)f(`)p
-Fl(-)p Fh(y)t Fm(')g(abbreviates)i(`)p Fl(0-)p Fh(y)t
-Fm('.)75 1042 y Fl(*)216 b Fm(All)15 b(of)f(the)f(w)o(ords,)g(except)i
-(the)f Fl(0)p Fm(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p
-Fl(1-$)p Fm('.)18 b(It)c(is)g(not)g(an)g(error)315 1096
-y(to)g(use)h(`)p Fl(*)p Fm(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f
-(in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g
-(in)315 1151 y(that)f(case.)75 1229 y Fh(x)s Fl(*)189
-b Fm(Abbreviates)16 b(`)p Fh(x)p Fl(-$)p Fm(')75 1307
-y Fh(x)p Fl(-)192 b Fm(Abbreviates)16 b(`)p Fh(x)p Fl(-$)p
-Fm(')e(lik)o(e)i(`)p Fh(x)s Fl(*)p Fm(',)e(but)i(omits)f(the)g(last)g
-(w)o(ord.)137 1384 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h
-(without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h
-(command)75 1439 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75
-1548 y Fg(1.1.3)30 b(Mo)r(di\014ers)137 1643 y Fm(After)10
-b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g
-(sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75
-1698 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p
-Fl(:)p Fm('.)75 1776 y Fl(h)216 b Fm(Remo)o(v)o(e)15
-b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the)
-f(head.)75 1854 y Fl(t)216 b Fm(Remo)o(v)o(e)15 b(all)h(leading)h
-(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75
-1931 y Fl(r)216 b Fm(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g
-(the)g(form)g(`)p Fl(.)p Fh(su\016x)s Fm(',)f(lea)o(ving)i(the)f
-(basename.)75 2009 y Fl(e)216 b Fm(Remo)o(v)o(e)15 b(all)h(but)g(the)f
-(trailing)h(su\016x.)75 2087 y Fl(p)216 b Fm(Prin)o(t)15
-b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)75
-2164 y Fl(s/)p Fh(old)r Fl(/)p Fh(new)t Fl(/)315 2219
-y Fm(Substitute)h Fh(new)j Fm(for)c(the)h(\014rst)e(o)q(ccurrence)j(of)
-e Fh(old)i Fm(in)f(the)g(ev)o(en)o(t)f(line.)25 b(An)o(y)16
-b(delimiter)315 2274 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g(of)f(`)p
-Fl(/)p Fm('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h(quoted)f(in)i
-Fh(old)g Fm(and)f Fh(new)k Fm(with)12 b(a)315 2329 y(single)j(bac)o
-(kslash.)20 b(If)15 b(`)p Fl(&)p Fm(')e(app)q(ears)h(in)h
-Fh(new)p Fm(,)f(it)g(is)h(replaced)g(b)o(y)f Fh(old)p
-Fm(.)20 b(A)14 b(single)i(bac)o(kslash)315 2383 y(will)j(quote)e(the)h
-(`)p Fl(&)p Fm('.)25 b(The)17 b(\014nal)i(delimiter)g(is)f(optional)g
-(if)f(it)h(is)g(the)f(last)g(c)o(haracter)g(on)315 2438
-y(the)e(input)h(line.)75 2516 y Fl(&)216 b Fm(Rep)q(eat)16
-b(the)f(previous)h(substitution.)75 2594 y Fl(g)216 b
-Fm(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o(v)o(er)e(the)g
-(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20 b(in)g(conjunction)315
-2648 y(with)c(`)p Fl(s)p Fm(',)d(as)i(in)h Fl(gs/)p Fh(old)r
-Fl(/)p Fh(new)t Fl(/)p Fm(,)f(or)g(with)g(`)p Fl(&)p
-Fm('.)p eop
-%%Page: 3 5
-3 4 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(3)75 183 y Fi(2)41 b(Programming)28 b(with)e(GNU)i
-(History)137 323 y Fm(This)16 b(c)o(hapter)e(describ)q(es)j(ho)o(w)d
-(to)g(in)o(terface)h(programs)e(that)h(y)o(ou)h(write)g(with)g(the)g
-(GNU)f(History)75 378 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g
-(considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15
-b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75
-433 y(of)e(GNU)g(History)l(,)g(see)g Fj(h)p Fm(unde\014ned)p
-Fj(i)i Fm([Using)e(History)g(In)o(teractiv)o(ely],)g(page)g
-Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(.)75 581 y Fk(2.1)33
-b(In)n(tro)r(duction)24 b(to)e(History)137 685 y Fm(Man)o(y)c(programs)
-g(read)h(input)g(from)f(the)h(user)g(a)f(line)j(at)d(a)g(time.)31
-b(The)19 b(GNU)g(History)f(library)75 740 y(is)k(able)g(to)e(k)o(eep)i
-(trac)o(k)e(of)h(those)g(lines,)j(asso)q(ciate)d(arbitrary)g(data)f
-(with)i(eac)o(h)f(line,)j(and)e(utilize)75 795 y(information)15
-b(from)g(previous)h(lines)h(in)f(comp)q(osing)f(new)h(ones.)137
-870 y(The)e(programmer)f(using)h(the)g(History)g(library)g(has)g(a)o(v)
-m(ailable)h(functions)g(for)e(remem)o(b)q(ering)h(lines)75
-924 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g(arbitrary)f(data)f
-(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d(the)i(list,)h(searc)o
-(hing)75 979 y(through)17 b(the)h(list)g(for)f(a)h(line)h(con)o
-(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o
-(y)e(line)i(in)75 1034 y(the)c(list)i(directly)l(.)22
-b(In)16 b(addition,)g(a)f(history)g Fh(expansion)h Fm(function)h(is)e
-(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75
-1089 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g
-(programs.)137 1164 y(The)f(user)h(using)f(programs)f(written)h(with)g
-(the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h
-(consisten)o(t)75 1219 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f
-(w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g
-(previous)75 1273 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f
-(commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d
-(are)75 1328 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o
-(vided)g(b)o(y)g Fl(csh)p Fm(.)137 1403 y(If)f(the)g(programmer)f
-(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f
-(includes)j(some)c(history)75 1458 y(manipulation)j(b)o(y)e(default,)g
-(and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i
-(editing.)75 1606 y Fk(2.2)33 b(History)22 b(Storage)137
-1710 y Fm(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f(of)g(history)i
-(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h(declared)g(as)f(follo)o
-(ws:)195 1782 y Fl(typedef)23 b(struct)g(_hist_entry)f({)243
-1834 y(char)h(*line;)243 1886 y(char)g(*data;)195 1938
-y(})h(HIST_ENTRY;)137 2013 y Fm(The)16 b(history)f(list)h(itself)g
-(migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2085
-y Fl(HIST_ENTRY)22 b(**the_history_list;)137 2160 y Fm(The)16
-b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g(in)o(to)f
-(a)g(single)i(structure:)195 2232 y Fl(/*)24 b(A)f(structure)g(used)g
-(to)h(pass)f(the)h(current)f(state)g(of)g(the)h(history)f(stuff)g
-(around.)g(*/)p 2033 2242 21 42 v 195 2284 a(typedef)g(struct)g
-(_hist_state)f({)243 2336 y(HIST_ENTRY)g(**entries;)214
-b(/*)23 b(Pointer)g(to)h(the)f(entries)g(themselves.)f(*/)243
-2387 y(int)h(offset;)453 b(/*)23 b(The)h(location)e(pointer)h(within)g
-(this)h(array.)f(*/)p 2033 2398 V 243 2439 a(int)g(length;)453
-b(/*)23 b(Number)g(of)h(elements)f(within)g(this)g(array.)g(*/)p
-1985 2449 V 243 2491 a(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f
-(allocated)g(to)g(this)h(array.)f(*/)p 2057 2501 V 243
-2543 a(int)g(flags;)195 2595 y(})h(HISTORY_STATE;)137
-2670 y Fm(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j
-Fl(HS_STIFLED)p Fm(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)p
-eop
-%%Page: 4 6
-4 5 bop 75 -58 a Fm(4)1347 b(GNU)15 b(History)g(Library)75
-183 y Fk(2.3)33 b(History)22 b(F)-6 b(unctions)137 278
-y Fm(This)21 b(section)g(describ)q(es)h(the)f(calling)h(sequence)g(for)
-e(the)g(v)m(arious)h(functions)g(presen)o(t)g(in)g(GNU)75
-333 y(History)l(.)75 441 y Fg(2.3.1)30 b(Initializing)20
-b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fm(This)e(section)g
-(describ)q(es)h(functions)f(used)g(to)e(initialize)21
-b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75
-591 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g
-(functions)h(in)g(y)o(our)f(program.)1650 679 y(F)l(unction)-1749
-b Ff(void)20 b Fe(using)p 333 679 18 3 v 20 w(history)j
-Fd(\(\))195 734 y Fm(Begin)18 b(a)f(session)h(in)g(whic)o(h)g(the)g
-(history)f(functions)h(migh)o(t)f(b)q(e)h(used.)27 b(This)18
-b(initializes)195 788 y(the)d(in)o(teractiv)o(e)h(v)m(ariables.)1650
-877 y(F)l(unction)-1749 b Ff(HISTORY_STATE)21 b(*)e Fe(history)p
-657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877
-V 21 w(state)j Fd(\(\))195 931 y Fm(Return)16 b(a)f(structure)g
-(describing)i(the)e(curren)o(t)g(state)f(of)h(the)g(input)i(history)l
-(.)1650 1019 y(F)l(unction)-1749 b Ff(void)20 b Fe(history)p
-377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019
-V 21 w(state)j Fd(\()p Fl(HISTORY_STATE)13 b(*state)p
-Fd(\))195 1074 y Fm(Set)i(the)h(state)e(of)h(the)g(history)g(list)h
-(according)g(to)e Fh(state)p Fm(.)75 1182 y Fg(2.3.2)30
-b(History)20 b(List)h(Managemen)n(t)137 1277 y Fm(These)11
-b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f
-(list,)i(or)f(set)f(parameters)g(managing)75 1332 y(the)15
-b(list)h(itself.)1650 1420 y(F)l(unction)-1749 b Ff(void)20
-b Fe(add)p 294 1420 V 20 w(history)j Fd(\()p Fl(char)14
-b(*string)p Fd(\))195 1475 y Fm(Place)i Fh(string)j Fm(at)c(the)g(end)i
-(of)d(the)i(history)f(list.)22 b(The)15 b(asso)q(ciated)h(data)f
-(\014eld)h(\(if)g(an)o(y\))e(is)195 1530 y(set)h(to)g
-Fl(NULL)p Fm(.)1650 1618 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21
-b(*)e Fe(remo)n(v)n(e)p 584 1618 V 20 w(history)k Fd(\()p
-Fl(int)14 b(which)p Fd(\))195 1673 y Fm(Remo)o(v)o(e)g(history)g(en)o
-(try)f(at)h(o\013set)f Fh(whic)o(h)h Fm(from)g(the)g(history)l(.)19
-b(The)14 b(remo)o(v)o(ed)g(elemen)o(t)g(is)195 1727 y(returned)i(so)e
-(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)h
-(structure.)1650 1816 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21
-b(*)e Fe(replace)p 580 1816 V 22 w(history)p 777 1816
-V 20 w(en)n(try)24 b Fd(\()p Fl(int)14 b(which,)g(char)283
-1870 y(*line,)g(char)g(*data)p Fd(\))195 1925 y Fm(Mak)o(e)f(the)h
-(history)f(en)o(try)g(at)g(o\013set)g Fh(whic)o(h)h Fm(ha)o(v)o(e)g
-Fh(line)k Fm(and)13 b Fh(data)p Fm(.)19 b(This)14 b(returns)g(the)f
-(old)195 1980 y(en)o(try)k(so)g(y)o(ou)g(can)g(disp)q(ose)i(of)d(the)i
-(data.)25 b(In)18 b(the)f(case)h(of)f(an)g(in)o(v)m(alid)i
-Fh(whic)o(h)p Fm(,)g(a)e Fl(NULL)195 2035 y Fm(p)q(oin)o(ter)f(is)f
-(returned.)1650 2123 y(F)l(unction)-1749 b Ff(void)20
-b Fe(clear)p 320 2123 V 21 w(history)j Fd(\(\))195 2178
-y Fm(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f
-(en)o(tries.)1650 2266 y(F)l(unction)-1749 b Ff(void)20
-b Fe(sti\015e)p 320 2266 V 21 w(history)j Fd(\()p Fl(int)14
-b(max)p Fd(\))195 2321 y Fm(Sti\015e)i(the)f(history)h(list,)f(remem)o
-(b)q(ering)h(only)g(the)f(last)g Fh(max)j Fm(en)o(tries.)1650
-2409 y(F)l(unction)-1749 b Ff(int)20 b Fe(unsti\015e)p
-358 2409 V 21 w(history)i Fd(\(\))195 2463 y Fm(Stop)e(sti\015ing)i
-(the)f(history)l(.)36 b(This)21 b(returns)g(the)f(previous)i(amoun)o(t)
-e(the)g(history)h(w)o(as)195 2518 y(sti\015ed.)g(The)15
-b(v)m(alue)i(is)e(p)q(ositiv)o(e)i(if)e(the)g(history)h(w)o(as)e
-(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.)1650
-2606 y(F)l(unction)-1749 b Ff(int)20 b Fe(history)p 351
-2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Fd(\(\))195
-2661 y Fm(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,)
-g(zero)f(if)g(it)h(is)g(not.)p eop
-%%Page: 5 7
-5 6 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(5)75 183 y Fg(2.3.3)30 b(Information)19
-b(Ab)r(out)i(the)f(History)h(List)137 279 y Fm(These)13
-b(functions)h(return)f(information)g(ab)q(out)f(the)h(en)o(tire)h
-(history)e(list)i(or)e(individual)k(list)e(en)o(tries.)1650
-371 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21 b(**)e Fe(history)p
-605 371 18 3 v 21 w(list)24 b Fd(\(\))195 426 y Fm(Return)f(a)g
-Fl(NULL)f Fm(terminated)g(arra)o(y)g(of)g Fl(HIST_ENTRY)f
-Fm(whic)o(h)j(is)f(the)f(curren)o(t)h(input)195 481 y(history)l(.)j
-(Elemen)o(t)18 b(0)e(of)h(this)h(list)g(is)f(the)h(b)q(eginning)h(of)e
-(time.)26 b(If)17 b(there)g(is)h(no)f(history)l(,)195
-535 y(return)e Fl(NULL)p Fm(.)1650 627 y(F)l(unction)-1749
-b Ff(int)20 b Fe(where)p 325 627 V 20 w(history)j Fd(\(\))195
-682 y Fm(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history)
-g(elemen)o(t.)1650 773 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21
-b(*)e Fe(curren)n(t)p 587 773 V 21 w(history)k Fd(\(\))195
-828 y Fm(Return)g(the)f(history)g(en)o(try)g(at)f(the)h(curren)o(t)g(p)
-q(osition,)j(as)c(determined)j(b)o(y)e Fl(where_)195
-883 y(history)14 b(\(\))p Fm(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try)
-g(there,)g(return)g(a)g Fl(NULL)g Fm(p)q(oin)o(ter.)1650
-975 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21 b(*)e Fe(history)p
-579 975 V 21 w(get)j Fd(\()p Fl(int)15 b(offset)p Fd(\))195
-1029 y Fm(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i
-Fh(o\013set)p Fm(,)e(starting)g(from)g Fl(history_base)p
-Fm(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g
-(if)g Fh(o\013set)h Fm(is)g(greater)e(than)h(the)h(history)f(length,)h
-(return)f(a)195 1139 y Fl(NULL)f Fm(p)q(oin)o(ter.)1650
-1231 y(F)l(unction)-1749 b Ff(int)20 b Fe(history)p 351
-1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Fd(\(\))195
-1285 y Fm(Return)c(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h
-(primary)h(history)f(en)o(tries)g(are)g(using.)29 b(This)195
-1340 y(function)16 b(returns)f(the)g(sum)h(of)e(the)i(lengths)f(of)g
-(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1452 y
-Fg(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137
-1548 y Fm(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g
-(in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.)
-1650 1640 y(F)l(unction)-1749 b Ff(int)20 b Fe(history)p
-351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Fd(\()p
-Fl(int)15 b(pos)p Fd(\))195 1694 y Fm(Set)g(the)h(p)q(osition)g(in)g
-(the)f(history)g(list)h(to)f Fh(p)q(os)p Fm(,)g(an)g(absolute)g(index)i
-(in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749
-b Ff(HIST_ENTRY)21 b(*)e Fe(previous)p 615 1786 V 20
-w(history)k Fd(\(\))195 1841 y Fm(Bac)o(k)17 b(up)h(the)f(curren)o(t)g
-(history)g(o\013set)f(to)h(the)g(previous)h(history)f(en)o(try)l(,)g
-(and)g(return)g(a)195 1896 y(p)q(oin)o(ter)f(to)e(that)h(en)o(try)l(.)k
-(If)d(there)f(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g
-Fl(NULL)f Fm(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749
-b Ff(HIST_ENTRY)21 b(*)e Fe(next)p 514 1987 V 21 w(history)k
-Fd(\(\))195 2042 y Fm(Mo)o(v)o(e)17 b(the)h(curren)o(t)g(history)f
-(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g
-(and)g(return)195 2097 y(the)d(a)g(p)q(oin)o(ter)h(to)e(that)h(en)o
-(try)l(.)20 b(If)15 b(there)g(is)h(no)f(next)g(en)o(try)l(,)g(return)g
-(a)g Fl(NULL)g Fm(p)q(oin)o(ter.)75 2208 y Fg(2.3.5)30
-b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fm(These)14
-b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i(history)f(list)h
-(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c)i(string.)75
-2359 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o
-(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g(history)f(p)q
-(osition.)75 2414 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i
-Fh(anc)o(hored)p Fm(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc)
-o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 2469 y(history)g(en)o(try)l
-(.)1650 2560 y(F)l(unction)-1749 b Ff(int)20 b Fe(history)p
-351 2560 V 20 w(searc)n(h)j Fd(\()p Fl(char)14 b(*string,)g(int)h
-(direction)p Fd(\))195 2615 y Fm(Searc)o(h)g(the)h(history)f(for)f
-Fh(string)p Fm(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g
-(o\013set.)k(If)d Fh(direction)195 2670 y Fl(<)j Fm(0,)g(then)g(the)h
-(searc)o(h)e(is)i(through)e(previous)i(en)o(tries,)g(else)g(through)f
-(subsequen)o(t.)32 b(If)p eop
-%%Page: 6 8
-6 7 bop 75 -58 a Fm(6)1347 b(GNU)15 b(History)g(Library)195
-183 y Fh(string)k Fm(is)d(found,)f(then)h(the)f(curren)o(t)g(history)g
-(index)i(is)f(set)f(to)f(that)h(history)g(en)o(try)l(,)g(and)195
-238 y(the)g(v)m(alue)h(returned)f(is)g(the)g(o\013set)f(in)h(the)g
-(line)h(of)e(the)h(en)o(try)g(where)g Fh(string)j Fm(w)o(as)c(found.)
-195 293 y(Otherwise,)i(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
-(returned.)1650 396 y(F)l(unction)-1749 b Ff(int)20 b
-Fe(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396
-V 21 w(pre\014x)i Fd(\()p Fl(char)15 b(*string,)f(int)g(direction)p
-Fd(\))195 451 y Fm(Searc)o(h)i(the)f(history)g(for)g
-Fh(string)p Fm(,)g(starting)g(at)g(the)g(curren)o(t)h(history)f
-(o\013set.)k(The)d(searc)o(h)195 506 y(is)h(anc)o(hored:)23
-b(matc)o(hing)17 b(lines)h(m)o(ust)e(b)q(egin)i(with)f
-Fh(string)p Fm(.)25 b(If)17 b Fh(direction)h Fl(<)e Fm(0,)h(then)g(the)
-195 560 y(searc)o(h)f(is)g(through)f(previous)i(en)o(tries,)f(else)g
-(through)g(subsequen)o(t.)22 b(If)16 b Fh(string)k Fm(is)c(found,)195
-615 y(then)i(the)g(curren)o(t)g(history)g(index)h(is)g(set)e(to)h(that)
-f(en)o(try)l(,)h(and)g(the)g(return)g(v)m(alue)h(is)g(0.)195
-670 y(Otherwise,)d(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h
-(returned.)1650 773 y(F)l(unction)-1749 b Ff(int)20 b
-Fe(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21
-w(p)r(os)h Fd(\()p Fl(char)15 b(*string,)f(int)g(direction,)g(int)283
-828 y(pos)p Fd(\))195 883 y Fm(Searc)o(h)h(for)g Fh(string)k
-Fm(in)d(the)f(history)g(list,)g(starting)g(at)f Fh(p)q(os)p
-Fm(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937
-y(list.)21 b(If)15 b Fh(direction)h Fm(is)g(negativ)o(e,)f(the)g(searc)
-o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fh(p)q(os)p
-Fm(,)h(otherwise)195 992 y(forw)o(ard.)27 b(Returns)18
-b(the)g(absolute)g(index)h(of)f(the)g(history)f(elemen)o(t)i(where)f
-Fh(string)k Fm(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75
-1170 y Fg(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137
-1272 y Fm(The)16 b(History)g(library)h(can)e(read)h(the)g(history)g
-(from)f(and)h(write)g(it)g(to)f(a)h(\014le.)22 b(This)17
-b(section)f(do)q(cu-)75 1327 y(men)o(ts)f(the)g(functions)h(for)f
-(managing)g(a)g(history)g(\014le.)1650 1430 y(F)l(unction)-1749
-b Ff(int)20 b Fe(read)p 286 1430 V 20 w(history)i Fd(\()p
-Fl(char)15 b(*filename)p Fd(\))195 1485 y Fm(Add)h(the)f(con)o(ten)o
-(ts)f(of)h Fh(\014lename)j Fm(to)d(the)g(history)g(list,)g(a)g(line)h
-(at)f(a)f(time.)21 b(If)15 b Fh(\014lename)j Fm(is)195
-1539 y Fl(NULL)p Fm(,)c(then)i(read)f(from)f(`)p Fl(~/.history)p
-Fm('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650
-1643 y(F)l(unction)-1749 b Ff(int)20 b Fe(read)p 286
-1643 V 20 w(history)p 481 1643 V 20 w(range)i Fd(\()p
-Fl(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Fd(\))195
-1697 y Fm(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fh(\014lename)p
-Fm(,)i(adding)f(them)g(to)f(the)g(history)h(list.)36
-b(Start)195 1752 y(reading)15 b(at)e(line)j Fh(from)e
-Fm(and)g(end)h(at)e Fh(to)p Fm(.)19 b(If)c Fh(from)e
-Fm(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15
-b Fh(to)195 1807 y Fm(is)i(less)g(than)f Fh(from)p Fm(,)g(then)h(read)f
-(un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17
-b Fh(\014lename)j Fm(is)d Fl(NULL)p Fm(,)f(then)195 1862
-y(read)f(from)g(`)p Fl(~/.history)p Fm('.)i(Returns)f(0)f(if)h
-(successful,)g(or)e Fl(errno)h Fm(if)h(not.)1650 1965
-y(F)l(unction)-1749 b Ff(int)20 b Fe(write)p 304 1965
-V 22 w(history)i Fd(\()p Fl(char)15 b(*filename)p Fd(\))195
-2020 y Fm(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f
-Fh(\014lename)p Fm(,)j(o)o(v)o(erwriting)d Fh(\014lename)k
-Fm(if)d(necessary)l(.)42 b(If)195 2074 y Fh(\014lename)20
-b Fm(is)d Fl(NULL)p Fm(,)f(then)g(write)h(the)f(history)h(list)g(to)f
-(`)p Fl(~/.history)p Fm('.)21 b(V)l(alues)d(returned)195
-2129 y(are)d(as)g(in)h Fl(read_history)d(\(\))p Fm(.)1650
-2232 y(F)l(unction)-1749 b Ff(int)20 b Fe(app)r(end)p
-360 2232 V 19 w(history)j Fd(\()p Fl(int)14 b(nelements,)g(char)h
-(*filename)p Fd(\))195 2287 y Fm(App)q(end)i(the)e(last)g
-Fh(nelemen)o(ts)j Fm(of)d(the)g(history)g(list)h(to)f
-Fh(\014lename)p Fm(.)1650 2390 y(F)l(unction)-1749 b
-Ff(int)20 b Fe(history)p 351 2390 V 20 w(truncate)p 582
-2390 V 21 w(\014le)k Fd(\()p Fl(char)14 b(*filename,)g(int)h(nlines)p
-Fd(\))195 2445 y Fm(T)l(runcate)g(the)h(history)f(\014le)h
-Fh(\014lename)p Fm(,)g(lea)o(ving)g(only)g(the)f(last)g
-Fh(nlines)k Fm(lines.)75 2568 y Fg(2.3.7)30 b(History)20
-b(Expansion)137 2670 y Fm(These)c(functions)g(implemen)o(t)g
-Fl(csh)p Fm(-lik)o(e)g(history)g(expansion.)p eop
-%%Page: 7 9
-7 8 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(7)1650 183 y(F)l(unction)-1749 b Ff(int)20
-b Fe(history)p 351 183 18 3 v 20 w(expand)j Fd(\()p Fl(char)14
-b(*string,)g(char)h(**output)p Fd(\))195 238 y Fm(Expand)g
-Fh(string)p Fm(,)g(placing)h(the)f(result)h(in)o(to)f
-Fh(output)p Fm(,)f(a)h(p)q(oin)o(ter)g(to)g(a)f(string)h(\(see)g
-Fj(h)p Fm(unde-)195 293 y(\014ned)p Fj(i)h Fm([History)e(In)o
-(teraction],)h(page)g Fj(h)p Fm(unde\014ned)p Fj(i)p
-Fm(\).)21 b(Returns:)195 370 y Fl(0)216 b Fm(If)16 b(no)g(expansions)h
-(to)q(ok)e(place)i(\(or,)d(if)j(the)f(only)g(c)o(hange)g(in)h(the)e
-(text)h(w)o(as)435 425 y(the)f(de-slashifying)j(of)c(the)i(history)f
-(expansion)h(c)o(haracter\);)195 502 y Fl(1)216 b Fm(if)16
-b(expansions)g(did)g(tak)o(e)e(place;)195 580 y Fl(-1)192
-b Fm(if)16 b(there)f(w)o(as)f(an)h(error)g(in)h(expansion;)195
-657 y Fl(2)216 b Fm(if)16 b(the)g(returned)g(line)i(should)f(only)f(b)q
-(e)h(displa)o(y)o(ed,)f(but)g(not)g(executed,)g(as)435
-712 y(with)11 b(the)f Fl(:p)g Fm(mo)q(di\014er)h(\(see)g
-Fj(h)p Fm(unde\014ned)p Fj(i)g Fm([Mo)q(di\014ers],)g(page)f
-Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(\).)195 789 y(If)15
-b(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h
-Fh(output)f Fm(con)o(tains)g(a)g(descriptiv)o(e)i(error)d(mes-)195
-844 y(sage.)1650 932 y(F)l(unction)-1749 b Ff(char)20
-b(*)f Fe(history)p 422 932 V 21 w(arg)p 524 932 V 19
-w(extract)24 b Fd(\()p Fl(int)14 b(first,)h(int)g(last,)f(char)283
-987 y(*string)p Fd(\))195 1042 y Fm(Extract)g(a)g(string)g(segmen)o(t)g
-(consisting)i(of)e(the)g Fh(\014rst)i Fm(through)e Fh(last)h
-Fm(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fh(string)p
-Fm(.)k(Argumen)o(ts)15 b(are)f(brok)o(en)i(up)f(as)g(in)h(Bash.)1650
-1185 y(F)l(unction)-1749 b Ff(char)20 b(*)f Fe(get)p
-324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25
-b Fd(\()p Fl(char)14 b(*string,)g(int)h(*cindex,)f(int)283
-1240 y(qchar)p Fd(\))195 1295 y Fm(Returns)h(the)g(text)f(of)g(the)h
-(history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fh(string)k
-Fl(+)d Fh(*cindex)p Fm(.)20 b Fh(*cindex)f Fm(is)195
-1350 y(mo)q(di\014ed)e(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o
-(t)f(sp)q(eci\014er.)23 b(A)o(t)16 b(function)g(en)o(try)l(,)f
-Fh(cindex)21 b Fm(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o
-(to)e Fh(string)21 b Fm(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q
-(eci\014cation)h(b)q(egins.)26 b Fh(qc)o(har)19 b Fm(is)195
-1459 y(a)h(c)o(haracter)g(that)g(is)h(allo)o(w)o(ed)f(to)g(end)h(the)g
-(ev)o(en)o(t)f(sp)q(eci\014cation)i(in)g(addition)f(to)f(the)195
-1514 y(\\normal")15 b(terminating)g(c)o(haracters.)1650
-1602 y(F)l(unction)-1749 b Ff(char)20 b(**)f Fe(history)p
-448 1602 V 21 w(tok)n(enize)25 b Fd(\()p Fl(char)14 b(*string)p
-Fd(\))195 1657 y Fm(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h
-(out)g(of)f Fh(string)p Fm(,)h(m)o(uc)o(h)g(as)f(the)h(shell)h(migh)o
-(t.)25 b(The)195 1712 y(tok)o(ens)d(are)g(split)i(on)f(white)g(space)g
-(and)f(on)h(the)g(c)o(haracters)f Fl(\(\)<>;&|$)p Fm(,)h(and)f(shell)
-195 1767 y(quoting)15 b(con)o(v)o(en)o(tions)h(are)e(ob)q(ey)o(ed.)75
-1892 y Fk(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987
-y Fm(This)23 b(section)f(describ)q(es)h(the)f(externally)h(visible)h(v)
-m(ariables)f(exp)q(orted)f(b)o(y)g(the)g(GNU)f(History)75
-2042 y(Library)l(.)1661 2130 y(V)l(ariable)-1749 b Ff(int)20
-b Fe(history)p 351 2130 V 20 w(base)195 2185 y Fm(The)15
-b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f
-(history)g(list.)1661 2274 y(V)l(ariable)-1749 b Ff(int)20
-b Fe(history)p 351 2274 V 20 w(length)195 2329 y Fm(The)15
-b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the)
-f(history)g(list.)1661 2417 y(V)l(ariable)-1749 b Ff(int)20
-b Fe(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195
-2472 y Fm(The)14 b(maxim)o(um)f(n)o(um)o(b)q(er)h(of)e(history)i(en)o
-(tries.)19 b(This)14 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)g
-Fl(stifle_)195 2527 y(history)g(\(\))p Fm(.)1661 2615
-y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377 2615
-V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y
-Fm(The)15 b(c)o(haracter)g(that)f(starts)g(a)h(history)g(ev)o(en)o(t.)
-20 b(The)15 b(default)h(is)g(`)p Fl(!)p Fm('.)p eop
-%%Page: 8 10
-8 9 bop 75 -58 a Fm(8)1347 b(GNU)15 b(History)g(Library)1661
-183 y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377
-183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238
-y Fm(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g(w)o(ord)g
-(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g(line.)21
-b(The)195 293 y(default)16 b(is)f(`)p Fl(^)p Fm('.)1661
-388 y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377
-388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443
-y Fm(During)e(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)i(seen)f
-(as)g(the)g(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)195
-498 y(then)e(it)g(and)g(all)h(subsequen)o(t)g(c)o(haracters)e(up)h(to)g
-(a)f(newline)j(are)e(ignored,)g(suppressing)195 553 y(history)f
-(expansion)h(for)f(the)g(remainder)h(of)f(the)g(line.)22
-b(This)15 b(is)h(disabled)h(b)o(y)e(default.)1661 648
-y(V)l(ariable)-1749 b Ff(char)20 b(*)f Fe(history)p 422
-648 V 21 w(no)p 504 648 V 20 w(expand)p 704 648 V 20
-w(c)n(hars)195 703 y Fm(The)j(list)h(of)f(c)o(haracters)f(whic)o(h)i
-(inhibit)h(history)e(expansion)h(if)g(found)f(immediately)195
-758 y(follo)o(wing)16 b Fh(history)p 528 758 14 2 v 16
-w(expansion)p 739 758 V 18 w(c)o(har)p Fm(.)j(The)d(default)f(is)h
-(whitespace)g(and)g(`)p Fl(=)p Fm('.)1661 853 y(V)l(ariable)-1749
-b Ff(char)20 b(*)f Fe(history)p 422 853 18 3 v 21 w(searc)n(h)p
-599 853 V 20 w(delimiter)p 843 853 V 23 w(c)n(hars)195
-908 y Fm(The)f(list)h(of)e(additional)i(c)o(haracters)e(whic)o(h)i(can)
-f(delimit)h(a)f(history)g(searc)o(h)f(string,)h(in)195
-963 y(addition)c(to)d(whitespace,)j(`)p Fl(:)p Fm(')d(and)i(`)p
-Fl(?)p Fm(')f(in)h(the)f(case)h(of)f(a)g(substring)h(searc)o(h.)19
-b(The)12 b(default)195 1018 y(is)k(empt)o(y)l(.)1661
-1113 y(V)l(ariable)-1749 b Ff(int)20 b Fe(history)p 351
-1113 V 20 w(quotes)p 533 1113 V 21 w(inhibit)p 717 1113
-V 23 w(expansion)195 1168 y Fm(If)13 b(non-zero,)f(single-quoted)i(w)o
-(ords)e(are)g(not)g(scanned)h(for)f(the)g(history)h(expansion)g(c)o
-(har-)195 1223 y(acter.)19 b(The)d(default)g(v)m(alue)g(is)g(0.)1661
-1318 y(V)l(ariable)-1749 b Ff(Function)20 b(*)g Fe(history)p
-527 1318 V 20 w(inhibit)p 710 1318 V 23 w(expansion)p
-980 1318 V 21 w(function)195 1373 y Fm(This)12 b(should)g(b)q(e)g(set)f
-(to)f(the)i(address)f(of)g(a)g(function)h(that)e(tak)o(es)h(t)o(w)o(o)f
-(argumen)o(ts:)17 b(a)11 b Fl(char)195 1428 y(*)j Fm(\()p
-Fh(string)t Fm(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g
-(string)g(\()p Fh(i)r Fm(\).)20 b(It)14 b(should)h(return)f(a)g
-(non-zero)195 1482 y(v)m(alue)g(if)e(the)h(history)f(expansion)h
-(starting)f(at)g Fh(string[i])i Fm(should)f(not)f(b)q(e)h(p)q
-(erformed;)g(zero)195 1537 y(if)g(the)h(expansion)f(should)h(b)q(e)g
-(done.)20 b(It)13 b(is)g(in)o(tended)i(for)d(use)h(b)o(y)g
-(applications)i(lik)o(e)f(Bash)195 1592 y(that)j(use)h(the)g(history)f
-(expansion)i(c)o(haracter)e(for)g(additional)i(purp)q(oses.)28
-b(By)18 b(default,)195 1647 y(this)e(v)m(ariable)g(is)g(set)f(to)f
-(NULL.)75 1780 y Fk(2.5)33 b(History)22 b(Programming)h(Example)137
-1878 y Fm(The)16 b(follo)o(wing)g(program)e(demonstrates)g(simple)j
-(use)e(of)g(the)g(GNU)g(History)g(Library)l(.)195 1944
-y Fl(main)23 b(\(\))195 1995 y({)243 2047 y(char)g(line[1024],)f(*t;)
-243 2099 y(int)h(len,)g(done)h(=)g(0;)243 2203 y(line[0])f(=)g(0;)243
-2307 y(using_history)f(\(\);)243 2359 y(while)h(\(!done\))290
-2411 y({)338 2462 y(printf)g(\("history$)g("\);)338 2514
-y(fflush)g(\(stdout\);)338 2566 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g
-(\(line\))g(-)h(1,)f(stdin\);)338 2618 y(if)h(\(t)f(&&)h(*t\))386
-2670 y({)p eop
-%%Page: 9 11
-9 10 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(History)889 b(9)434 183 y Fl(len)23 b(=)h(strlen)f(\(t\);)434
-235 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 287 y(t[len)h(-)f(1])h
-(=)g('\\0';)386 339 y(})338 443 y(if)g(\(!t\))386 495
-y(strcpy)f(\(line,)g("quit"\);)338 598 y(if)h(\(line[0]\))386
-650 y({)434 702 y(char)f(*expansion;)434 754 y(int)g(result;)434
-858 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434
-910 y(if)g(\(result\))481 962 y(fprintf)g(\(stderr,)g("\045s\\n",)g
-(expansion\);)434 1065 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h
-(2\))481 1117 y({)529 1169 y(free)f(\(expansion\);)529
-1221 y(continue;)481 1273 y(})434 1377 y(add_history)f(\(expansion\);)
-434 1429 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h
-(1\);)434 1480 y(free)f(\(expansion\);)386 1532 y(})338
-1636 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))386
-1688 y(done)g(=)h(1;)338 1740 y(else)f(if)h(\(strcmp)f(\(line,)g
-("save"\))g(==)h(0\))386 1792 y(write_history)e(\("history_file"\);)338
-1844 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386
-1896 y(read_history)e(\("history_file"\);)338 1947 y(else)h(if)h
-(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 1999 y({)434
-2051 y(register)e(HIST_ENTRY)h(**the_list;)434 2103 y(register)f(int)i
-(i;)434 2207 y(the_list)e(=)i(history_list)e(\(\);)434
-2259 y(if)h(\(the_list\))481 2311 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e
-(i++\))529 2363 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g
-(history_base,)e(the_list[i]->line\);)386 2414 y(})338
-2466 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386
-2518 y({)434 2570 y(int)f(which;)434 2622 y(if)g(\(\(sscanf)g(\(line)g
-(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop
-%%Page: 10 12
-10 11 bop 75 -58 a Fm(10)1324 b(GNU)15 b(History)g(Library)481
-183 y Fl({)529 235 y(HIST_ENTRY)23 b(*entry)g(=)g(remove_history)f
-(\(which\);)529 287 y(if)i(\(!entry\))577 339 y(fprintf)f(\(stderr,)f
-("No)i(such)f(entry)g(\045d\\n",)g(which\);)529 391 y(else)577
-443 y({)625 495 y(free)g(\(entry->line\);)625 546 y(free)g(\(entry\);)
-577 598 y(})481 650 y(})434 702 y(else)481 754 y({)529
-806 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f
-(`delete'\\n"\);)481 858 y(})386 910 y(})290 962 y(})195
-1013 y(})p eop
-%%Page: 11 13
-11 12 bop 75 -58 a Fm(App)q(endix)17 b(A:)e(Concept)g(Index)1196
-b(11)75 183 y Fi(App)r(endix)25 b(A)41 b(Concept)27 b(Index)137
-359 y Fc(\(Index)14 b(is)f(nonexisten)o(t\))p eop
-%%Page: 12 14
-12 13 bop 75 -58 a Fm(12)1324 b(GNU)15 b(History)g(Library)p
-eop
-%%Page: 13 15
-13 14 bop 75 -58 a Fm(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l
-(ariable)g(Index)919 b(13)75 183 y Fi(App)r(endix)25
-b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
-b(Index)137 359 y Fc(\(Index)14 b(is)f(nonexisten)o(t\))p
-eop
-%%Page: 14 16
-14 15 bop 75 -58 a Fm(14)1324 b(GNU)15 b(History)g(Library)p
-eop
-%%Page: -1 17
--1 16 bop 1862 -58 a Fm(i)75 183 y Fi(T)-7 b(able)27
-b(of)f(Con)n(ten)n(ts)75 354 y Fk(1)67 b(Using)22 b(History)h(In)n
-(teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)h(.)31 b Fk(1)224 423 y Fm(1.1)45 b(History)15
-b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fm(1)374 478 y(1.1.1)44
-b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)26 b Fm(1)374 532 y(1.1.2)44 b(W)l(ord)15
-b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)19 b Fm(2)374 587 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8
-b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)19 b Fm(2)75 708 y Fk(2)67 b(Programming)23
-b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f
-(.)g(.)38 b Fk(3)224 777 y Fm(2.1)45 b(In)o(tro)q(duction)16
-b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)24 b Fm(3)224 832 y(2.2)45 b(History)15
-b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fm(3)224 886
-y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h
-(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26
-b Fm(4)374 941 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e
-(Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b
-Fm(4)374 996 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d
-Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)29 b Fm(4)374 1051 y(2.3.3)44
-b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c
-Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26
-b Fm(5)374 1106 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g
-(List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)25 b Fm(5)374 1160 y(2.3.5)44 b(Searc)o(hing)16
-b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
-b Fm(5)374 1215 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6
-b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)20 b Fm(6)374 1270 y(2.3.7)44
-b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
-h(.)f(.)24 b Fm(6)224 1325 y(2.4)45 b(History)15 b(V)l(ariables)6
-b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)h(.)f(.)h(.)f(.)21 b Fm(7)224 1380 y(2.5)45 b(History)15
-b(Programming)f(Example)7 b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22
-b Fm(8)75 1501 y Fk(App)r(endix)i(A)67 b(Concept)22 b(Index)17
-b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g
-(.)38 b Fk(11)75 1636 y(App)r(endix)24 b(B)67 b(F)-6
-b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16 b Fb(.)10
-b(.)g(.)g(.)38 b Fk(13)p eop
-%%Page: -2 18
--2 17 bop 75 -58 a Fm(ii)1346 b(GNU)15 b(History)g(Library)p
-eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/readline/doc/history_toc.html b/readline/doc/history_toc.html
deleted file mode 100644
index 7e271c01271..00000000000
--- a/readline/doc/history_toc.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-GNU History Library - Table of Contents
-
-
-GNU History Library
-Edition 2.1, for History Library
Version 2.1.
-March 1996
-Brian Fox, Free Software Foundation
-Chet Ramey, Case Western Reserve University
-
-
-
-
-This document was generated on 2 April 1998 using the
-texi2html
-translator version 1.51.
-
-
diff --git a/readline/doc/hstech.texinfo b/readline/doc/hstech.texinfo
index c3fe3f6a11f..54100908407 100644
--- a/readline/doc/hstech.texinfo
+++ b/readline/doc/hstech.texinfo
@@ -1,8 +1,8 @@
@ignore
This file documents the user interface to the GNU History library.
-Copyright (C) 1988, 1991 Free Software Foundation, Inc.
-Authored by Brian Fox.
+Copyright (C) 1988, 1991, 1994, 1996 Free Software Foundation, Inc.
+Authored by Brian Fox and Chet Ramey.
Permission is granted to make and distribute verbatim copies of this manual
provided the copyright notice and this permission notice are preserved on
@@ -26,8 +26,9 @@ into another language, under the above conditions for modified versions.
@node Programming with GNU History
@chapter Programming with GNU History
-This chapter describes how to interface the GNU History Library with
-programs that you write. It should be considered a technical guide.
+This chapter describes how to interface programs that you write
+with the GNU History Library.
+It should be considered a technical guide.
For information on the interactive use of GNU History, @pxref{Using
History Interactively}.
@@ -42,32 +43,35 @@ History Interactively}.
@node Introduction to History
@section Introduction to History
-Many programs read input from the user a line at a time. The GNU history
+Many programs read input from the user a line at a time. The GNU History
library is able to keep track of those lines, associate arbitrary data with
-each line, and utilize information from previous lines in making up new
+each line, and utilize information from previous lines in composing new
ones.
-The programmer using the History library has available to him functions
-for remembering lines on a history stack, associating arbitrary data
-with a line, removing lines from the stack, searching through the stack
+The programmer using the History library has available functions
+for remembering lines on a history list, associating arbitrary data
+with a line, removing lines from the list, searching through the list
for a line containing an arbitrary text string, and referencing any line
-on the stack directly. In addition, a history @dfn{expansion} function
-is available which provides for a consistent user interface across many
+in the list directly. In addition, a history @dfn{expansion} function
+is available which provides for a consistent user interface across
different programs.
-The end-user using programs written with the History library has the
-benifit of a consistent user interface, with a set of well-known
+The user using programs written with the History library has the
+benefit of a consistent user interface with a set of well-known
commands for manipulating the text of previous lines and using that text
in new commands. The basic history manipulation commands are similar to
-the history substitution used by @code{Csh}.
+the history substitution provided by @code{csh}.
If the programmer desires, he can use the Readline library, which
includes some history manipulation by default, and has the added
-advantage of Emacs style command line editing.
+advantage of command line editing.
@node History Storage
@section History Storage
+The history list is an array of history entries. A history entry is
+declared as follows:
+
@example
typedef struct _hist_entry @{
char *line;
@@ -75,179 +79,378 @@ typedef struct _hist_entry @{
@} HIST_ENTRY;
@end example
+The history list itself might therefore be declared as
+
+@example
+HIST_ENTRY **the_history_list;
+@end example
+
+The state of the History library is encapsulated into a single structure:
+
+@example
+/* A structure used to pass the current state of the history stuff around. */
+typedef struct _hist_state @{
+ HIST_ENTRY **entries; /* Pointer to the entries themselves. */
+ int offset; /* The location pointer within this array. */
+ int length; /* Number of elements within this array. */
+ int size; /* Number of slots allocated to this array. */
+ int flags;
+@} HISTORY_STATE;
+@end example
+
+If the flags member includes @code{HS_STIFLED}, the history has been
+stifled.
+
@node History Functions
@section History Functions
This section describes the calling sequence for the various functions
present in GNU History.
-@defun {void using_history} ()
+@menu
+* Initializing History and State Management:: Functions to call when you
+ want to use history in a
+ program.
+* History List Management:: Functions used to manage the list
+ of history entries.
+* Information About the History List:: Functions returning information about
+ the history list.
+* Moving Around the History List:: Functions used to change the position
+ in the history list.
+* Searching the History List:: Functions to search the history list
+ for entries containing a string.
+* Managing the History File:: Functions that read and write a file
+ containing the history list.
+* History Expansion:: Functions to perform csh-like history
+ expansion.
+@end menu
+
+@node Initializing History and State Management
+@subsection Initializing History and State Management
+
+This section describes functions used to initialize and manage
+the state of the History library when you want to use the history
+functions in your program.
+
+@deftypefun void using_history ()
Begin a session in which the history functions might be used. This
-just initializes the interactive variables.
-@end defun
+initializes the interactive variables.
+@end deftypefun
+
+@deftypefun {HISTORY_STATE *} history_get_history_state ()
+Return a structure describing the current state of the input history.
+@end deftypefun
+
+@deftypefun void history_set_history_state (HISTORY_STATE *state)
+Set the state of the history list according to @var{state}.
+@end deftypefun
+
+@node History List Management
+@subsection History List Management
-@defun {void add_history} (char *string)
+These functions manage individual entries on the history list, or set
+parameters managing the list itself.
+
+@deftypefun void add_history (char *string)
Place @var{string} at the end of the history list. The associated data
field (if any) is set to @code{NULL}.
-@end defun
-
-@defun {int where_history} ()
-Returns the number which says what history element we are now looking
-at.
-@end defun
-
-@defun {int history_set_pos} (int pos)
-Set the position in the history list to @var{pos}.
-@end defun
-
-@defun {int history_search_pos} (char *string, int direction, int pos)
-Search for @var{string} in the history list, starting at @var{pos}, an
-absolute index into the list. @var{direction}, if negative, says to search
-backwards from @var{pos}, else forwards. Returns the absolute index of
-the history element where @var{string} was found, or -1 otherwise.
-@end defun
-
-@defun {HIST_ENTRY *remove_history} ();
-Remove history element @var{which} from the history. The removed
-element is returned to you so you can free the line, data,
+@end deftypefun
+
+@deftypefun {HIST_ENTRY *} remove_history (int which)
+Remove history entry at offset @var{which} from the history. The
+removed element is returned so you can free the line, data,
and containing structure.
-@end defun
+@end deftypefun
-@defun {void stifle_history} (int max)
-Stifle the history list, remembering only @var{max} number of entries.
-@end defun
+@deftypefun {HIST_ENTRY *} replace_history_entry (int which, char *line, char *data)
+Make the history entry at offset @var{which} have @var{line} and @var{data}.
+This returns the old entry so you can dispose of the data. In the case
+of an invalid @var{which}, a @code{NULL} pointer is returned.
+@end deftypefun
-@defun {int unstifle_history} ();
+@deftypefun void clear_history ()
+Clear the history list by deleting all the entries.
+@end deftypefun
+
+@deftypefun void stifle_history (int max)
+Stifle the history list, remembering only the last @var{max} entries.
+@end deftypefun
+
+@deftypefun int unstifle_history ()
Stop stifling the history. This returns the previous amount the
-history was stifled by. The value is positive if the history was
+history was stifled. The value is positive if the history was
stifled, negative if it wasn't.
-@end defun
+@end deftypefun
+
+@deftypefun int history_is_stifled ()
+Returns non-zero if the history is stifled, zero if it is not.
+@end deftypefun
+
+@node Information About the History List
+@subsection Information About the History List
-@defun {int read_history} (char *filename)
+These functions return information about the entire history list or
+individual list entries.
+
+@deftypefun {HIST_ENTRY **} history_list ()
+Return a @code{NULL} terminated array of @code{HIST_ENTRY} which is the
+current input history. Element 0 of this list is the beginning of time.
+If there is no history, return @code{NULL}.
+@end deftypefun
+
+@deftypefun int where_history ()
+Returns the offset of the current history element.
+@end deftypefun
+
+@deftypefun {HIST_ENTRY *} current_history ()
+Return the history entry at the current position, as determined by
+@code{where_history ()}. If there is no entry there, return a @code{NULL}
+pointer.
+@end deftypefun
+
+@deftypefun {HIST_ENTRY *} history_get (int offset)
+Return the history entry at position @var{offset}, starting from
+@code{history_base}. If there is no entry there, or if @var{offset}
+is greater than the history length, return a @code{NULL} pointer.
+@end deftypefun
+
+@deftypefun int history_total_bytes ()
+Return the number of bytes that the primary history entries are using.
+This function returns the sum of the lengths of all the lines in the
+history.
+@end deftypefun
+
+@node Moving Around the History List
+@subsection Moving Around the History List
+
+These functions allow the current index into the history list to be
+set or changed.
+
+@deftypefun int history_set_pos (int pos)
+Set the position in the history list to @var{pos}, an absolute index
+into the list.
+@end deftypefun
+
+@deftypefun {HIST_ENTRY *} previous_history ()
+Back up the current history offset to the previous history entry, and
+return a pointer to that entry. If there is no previous entry, return
+a @code{NULL} pointer.
+@end deftypefun
+
+@deftypefun {HIST_ENTRY *} next_history ()
+Move the current history offset forward to the next history entry, and
+return the a pointer to that entry. If there is no next entry, return
+a @code{NULL} pointer.
+@end deftypefun
+
+@node Searching the History List
+@subsection Searching the History List
+@cindex History Searching
+
+These functions allow searching of the history list for entries containing
+a specific string. Searching may be performed both forward and backward
+from the current history position. The search may be @dfn{anchored},
+meaning that the string must match at the beginning of the history entry.
+@cindex anchored search
+
+@deftypefun int history_search (char *string, int direction)
+Search the history for @var{string}, starting at the current history
+offset. If @var{direction} < 0, then the search is through previous entries,
+else through subsequent. If @var{string} is found, then
+the current history index is set to that history entry, and the value
+returned is the offset in the line of the entry where
+@var{string} was found. Otherwise, nothing is changed, and a -1 is
+returned.
+@end deftypefun
+
+@deftypefun int history_search_prefix (char *string, int direction)
+Search the history for @var{string}, starting at the current history
+offset. The search is anchored: matching lines must begin with
+@var{string}. If @var{direction} < 0, then the search is through previous
+entries, else through subsequent. If @var{string} is found, then the
+current history index is set to that entry, and the return value is 0.
+Otherwise, nothing is changed, and a -1 is returned.
+@end deftypefun
+
+@deftypefun int history_search_pos (char *string, int direction, int pos)
+Search for @var{string} in the history list, starting at @var{pos}, an
+absolute index into the list. If @var{direction} is negative, the search
+proceeds backward from @var{pos}, otherwise forward. Returns the absolute
+index of the history element where @var{string} was found, or -1 otherwise.
+@end deftypefun
+
+@node Managing the History File
+@subsection Managing the History File
+
+The History library can read the history from and write it to a file.
+This section documents the functions for managing a history file.
+
+@deftypefun int read_history (char *filename)
Add the contents of @var{filename} to the history list, a line at a
time. If @var{filename} is @code{NULL}, then read from
@file{~/.history}. Returns 0 if successful, or errno if not.
-@end defun
+@end deftypefun
-@defun {int read_history_range} (char *filename, int from, int to)
+@deftypefun int read_history_range (char *filename, int from, int to)
Read a range of lines from @var{filename}, adding them to the history list.
-Start reading at the @var{from}'th line and end at the @var{to}'th. If
+Start reading at line @var{from} and end at @var{to}. If
@var{from} is zero, start at the beginning. If @var{to} is less than
@var{from}, then read until the end of the file. If @var{filename} is
@code{NULL}, then read from @file{~/.history}. Returns 0 if successful,
or @code{errno} if not.
-@end defun
+@end deftypefun
-@defun {int write_history} (char *filename)
-Append the current history to @var{filename}. If @var{filename} is
-@code{NULL}, then append the history list to @file{~/.history}. Values
+@deftypefun int write_history (char *filename)
+Write the current history to @var{filename}, overwriting @var{filename}
+if necessary. If @var{filename} is
+@code{NULL}, then write the history list to @file{~/.history}. Values
returned are as in @code{read_history ()}.
-@end defun
+@end deftypefun
-@defun {int append_history} (int nelements, char *filename)
-Append @var{nelement} entries to @var{filename}. The entries appended
-are from the end of the list minus @var{nelements} up to the end of the
-list.
-@end defun
+@deftypefun int append_history (int nelements, char *filename)
+Append the last @var{nelements} of the history list to @var{filename}.
+@end deftypefun
-@defun {HIST_ENTRY *replace_history_entry} ()
-Make the history entry at @var{which} have @var{line} and @var{data}.
-This returns the old entry so you can dispose of the data. In the case
-of an invalid @var{which}, a @code{NULL} pointer is returned.
-@end defun
-
-@defun {HIST_ENTRY *current_history} ()
-Return the history entry at the current position, as determined by
-@code{history_offset}. If there is no entry there, return a @code{NULL}
-pointer.
-@end defun
-
-@defun {HIST_ENTRY *previous_history} ()
-Back up @var{history_offset} to the previous history entry, and return a
-pointer to that entry. If there is no previous entry, return a
-@code{NULL} pointer.
-@end defun
+@deftypefun int history_truncate_file (char *filename, int nlines)
+Truncate the history file @var{filename}, leaving only the last
+@var{nlines} lines.
+@end deftypefun
-@defun {HIST_ENTRY *next_history} ()
-Move @code{history_offset} forward to the next history entry, and return
-the a pointer to that entry. If there is no next entry, return a
-@code{NULL} pointer.
-@end defun
-
-@defun {HIST_ENTRY **history_list} ()
-Return a @code{NULL} terminated array of @code{HIST_ENTRY} which is the
-current input history. Element 0 of this list is the beginning of time.
-If there is no history, return @code{NULL}.
-@end defun
+@node History Expansion
+@subsection History Expansion
-@defun {int history_search} (char *string, int direction)
-Search the history for @var{string}, starting at @code{history_offset}.
-If @var{direction} < 0, then the search is through previous entries,
-else through subsequent. If @var{string} is found, then
-@code{current_history ()} is the history entry, and the value of this
-function is the offset in the line of that history entry that the
-@var{string} was found in. Otherwise, nothing is changed, and a -1 is
-returned.
-@end defun
+These functions implement @code{csh}-like history expansion.
-@defun {int history_expand} (char *string, char **output)
+@deftypefun int history_expand (char *string, char **output)
Expand @var{string}, placing the result into @var{output}, a pointer
-to a string. Returns:
+to a string (@pxref{History Interaction}). Returns:
@table @code
@item 0
If no expansions took place (or, if the only change in
the text was the de-slashifying of the history expansion
-character),
+character);
@item 1
-if expansions did take place, or
+if expansions did take place;
@item -1
-if there was an error in expansion.
+if there was an error in expansion;
+@item 2
+if the returned line should only be displayed, but not executed,
+as with the @code{:p} modifier (@pxref{Modifiers}).
@end table
If an error ocurred in expansion, then @var{output} contains a descriptive
error message.
-@end defun
+@end deftypefun
-@defun {char *history_arg_extract} (int first, int last, char *string)
+@deftypefun {char *} history_arg_extract (int first, int last, char *string)
Extract a string segment consisting of the @var{first} through @var{last}
-arguments present in @var{string}. Arguments are broken up as in
-the GNU Bash shell.
-@end defun
-
-@defun {int history_total_bytes} ();
-Return the number of bytes that the primary history entries are using.
-This just adds up the lengths of @code{the_history->lines}.
-@end defun
+arguments present in @var{string}. Arguments are broken up as in Bash.
+@end deftypefun
+
+@deftypefun {char *} get_history_event (char *string, int *cindex, int qchar)
+Returns the text of the history event beginning at @var{string} +
+@var{*cindex}. @var{*cindex} is modified to point to after the event
+specifier. At function entry, @var{cindex} points to the index into
+@var{string} where the history event specification begins. @var{qchar}
+is a character that is allowed to end the event specification in addition
+to the ``normal'' terminating characters.
+@end deftypefun
+
+@deftypefun {char **} history_tokenize (char *string)
+Return an array of tokens parsed out of @var{string}, much as the
+shell might. The tokens are split on white space and on the
+characters @code{()<>;&|$}, and shell quoting conventions are
+obeyed.
+@end deftypefun
@node History Variables
@section History Variables
-This section describes the variables in GNU History that are externally
-visible.
-
-@defvar {int history_base}
-For convenience only. You set this when interpreting history commands.
-It is the logical offset of the first history element.
-@end defvar
+This section describes the externally visible variables exported by
+the GNU History Library.
+
+@deftypevar int history_base
+The logical offset of the first entry in the history list.
+@end deftypevar
+
+@deftypevar int history_length
+The number of entries currently stored in the history list.
+@end deftypevar
+
+@deftypevar int max_input_history
+The maximum number of history entries. This must be changed using
+@code{stifle_history ()}.
+@end deftypevar
+
+@deftypevar char history_expansion_char
+The character that starts a history event. The default is @samp{!}.
+@end deftypevar
+
+@deftypevar char history_subst_char
+The character that invokes word substitution if found at the start of
+a line. The default is @samp{^}.
+@end deftypevar
+
+@deftypevar char history_comment_char
+During tokenization, if this character is seen as the first character
+of a word, then it and all subsequent characters up to a newline are
+ignored, suppressing history expansion for the remainder of the line.
+This is disabled by default.
+@end deftypevar
+
+@deftypevar {char *} history_no_expand_chars
+The list of characters which inhibit history expansion if found immediately
+following @var{history_expansion_char}. The default is whitespace and
+@samp{=}.
+@end deftypevar
+
+@deftypevar {char *} history_search_delimiter_chars
+The list of additional characters which can delimit a history search
+string, in addition to whitespace, @samp{:} and @samp{?} in the case of
+a substring search. The default is empty.
+@end deftypevar
+
+@deftypevar int history_quotes_inhibit_expansion
+If non-zero, single-quoted words are not scanned for the history expansion
+character. The default value is 0.
+@end deftypevar
+
+@deftypevar {Function *} history_inhibit_expansion_function
+This should be set to the address of a function that takes two arguments:
+a @code{char *} (@var{string}) and an integer index into that string (@var{i}).
+It should return a non-zero value if the history expansion starting at
+@var{string[i]} should not be performed; zero if the expansion should
+be done.
+It is intended for use by applications like Bash that use the history
+expansion character for additional purposes.
+By default, this variable is set to NULL.
+@end deftypevar
@node History Programming Example
@section History Programming Example
-The following snippet of code demonstrates simple use of the GNU History
-Library.
+The following program demonstrates simple use of the GNU History Library.
@smallexample
main ()
@{
char line[1024], *t;
- int done = 0;
+ int len, done = 0;
line[0] = 0;
+ using_history ();
while (!done)
@{
- fprintf (stdout, "history%% ");
- t = gets (line);
+ printf ("history$ ");
+ fflush (stdout);
+ t = fgets (line, sizeof (line) - 1, stdin);
+ if (t && *t)
+ @{
+ len = strlen (t);
+ if (t[len - 1] == '\n')
+ t[len - 1] = '\0';
+ @}
if (!t)
strcpy (line, "quit");
@@ -257,37 +460,41 @@ main ()
char *expansion;
int result;
- using_history ();
-
result = history_expand (line, &expansion);
- strcpy (line, expansion);
- free (expansion);
if (result)
- fprintf (stderr, "%s\n", line);
+ fprintf (stderr, "%s\n", expansion);
- if (result < 0)
- continue;
+ if (result < 0 || result == 2)
+ @{
+ free (expansion);
+ continue;
+ @}
- add_history (line);
+ add_history (expansion);
+ strncpy (line, expansion, sizeof (line) - 1);
+ free (expansion);
@}
- if (strcmp (line, "quit") == 0) done = 1;
- if (strcmp (line, "save") == 0) write_history (0);
- if (strcmp (line, "read") == 0) read_history (0);
- if (strcmp (line, "list") == 0)
+ if (strcmp (line, "quit") == 0)
+ done = 1;
+ else if (strcmp (line, "save") == 0)
+ write_history ("history_file");
+ else if (strcmp (line, "read") == 0)
+ read_history ("history_file");
+ else if (strcmp (line, "list") == 0)
@{
- register HIST_ENTRY **the_list = history_list ();
+ register HIST_ENTRY **the_list;
register int i;
+ the_list = history_list ();
if (the_list)
for (i = 0; the_list[i]; i++)
- fprintf (stdout, "%d: %s\n",
- i + history_base, the_list[i]->line);
+ printf ("%d: %s\n", i + history_base, the_list[i]->line);
@}
- if (strncmp (line, "delete", strlen ("delete")) == 0)
+ else if (strncmp (line, "delete", 6) == 0)
@{
int which;
- if ((sscanf (line + strlen ("delete"), "%d", &which)) == 1)
+ if ((sscanf (line + 6, "%d", &which)) == 1)
@{
HIST_ENTRY *entry = remove_history (which);
if (!entry)
@@ -306,6 +513,3 @@ main ()
@}
@}
@end smallexample
-
-
-
diff --git a/readline/doc/hsuser.texinfo b/readline/doc/hsuser.texinfo
index cda0a688c74..7c4582d2ace 100644
--- a/readline/doc/hsuser.texinfo
+++ b/readline/doc/hsuser.texinfo
@@ -1,8 +1,8 @@
@ignore
This file documents the user interface to the GNU History library.
-Copyright (C) 1988, 1991 Free Software Foundation, Inc.
-Authored by Brian Fox.
+Copyright (C) 1988, 1991, 1996 Free Software Foundation, Inc.
+Authored by Brian Fox and Chet Ramey.
Permission is granted to make and distribute verbatim copies of this manual
provided the copyright notice and this permission notice are preserved on
@@ -26,36 +26,236 @@ into another language, under the above conditions for modified versions.
@node Using History Interactively
@chapter Using History Interactively
+@ifset BashFeatures
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint. It should be considered a user's guide. For
+information on using the GNU History Library in other programs,
+see the GNU Readline Library Manual.
+@end ifset
+@ifclear BashFeatures
This chapter describes how to use the GNU History Library interactively,
from a user's standpoint. It should be considered a user's guide. For
information on using the GNU History Library in your own programs,
@pxref{Programming with GNU History}.
+@end ifclear
+@ifset BashFeatures
+@menu
+* Bash History Facilities:: How Bash lets you manipulate your command
+ history.
+* Bash History Builtins:: The Bash builtin commands that manipulate
+ the command history.
+* History Interaction:: What it feels like using History as a user.
+@end menu
+@end ifset
+@ifclear BashFeatures
@menu
* History Interaction:: What it feels like using History as a user.
@end menu
+@end ifclear
+
+@ifset BashFeatures
+@node Bash History Facilities
+@section Bash History Facilities
+@cindex command history
+@cindex history list
+
+When the @samp{-o history} option to the @code{set} builtin
+is enabled (@pxref{The Set Builtin}),
+the shell provides access to the @var{command history},
+the list of commands previously typed. The text of the last
+@code{HISTSIZE}
+commands (default 500) is saved in a history list. The shell
+stores each command in the history list prior to parameter and
+variable expansion
+but after history expansion is performed, subject to the
+values of the shell variables
+@code{HISTIGNORE} and @code{HISTCONTROL}.
+When the shell starts up, the history is initialized from the
+file named by the @code{HISTFILE} variable (default @file{~/.bash_history}).
+@code{HISTFILE} is truncated, if necessary, to contain no more than
+the number of lines specified by the value of the @code{HISTFILESIZE}
+variable. When an interactive shell exits, the last
+@code{HISTSIZE} lines are copied from the history list to @code{HISTFILE}.
+If the @code{histappend} shell option is set (@pxref{Bash Builtins}),
+the lines are appended to the history file,
+otherwise the history file is overwritten.
+If @code{HISTFILE}
+is unset, or if the history file is unwritable, the history is
+not saved. After saving the history, the history file is truncated
+to contain no more than @code{$HISTFILESIZE}
+lines. If @code{HISTFILESIZE} is not set, no truncation is performed.
+
+The builtin command @code{fc} may be used to list or edit and re-execute
+a portion of the history list.
+The @code{history} builtin can be used to display or modify the history
+list and manipulate the history file.
+When using the command-line editing, search commands
+are available in each editing mode that provide access to the
+history list.
+
+The shell allows control over which commands are saved on the history
+list. The @code{HISTCONTROL} and @code{HISTIGNORE}
+variables may be set to cause the shell to save only a subset of the
+commands entered.
+The @code{cmdhist}
+shell option, if enabled, causes the shell to attempt to save each
+line of a multi-line command in the same history entry, adding
+semicolons where necessary to preserve syntactic correctness.
+The @code{lithist}
+shell option causes the shell to save the command with embedded newlines
+instead of semicolons.
+@xref{Bash Builtins}, for a description of @code{shopt}.
+
+@node Bash History Builtins
+@section Bash History Builtins
+@cindex history builtins
+
+Bash provides two builtin commands that allow you to manipulate the
+history list and history file.
+
+@table @code
+
+@item fc
+@comment btindex fc
+@example
+@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]}
+@code{fc -s [@var{pat}=@var{rep}] [@var{command}]}
+@end example
+
+Fix Command. In the first form, a range of commands from @var{first} to
+@var{last} is selected from the history list. Both @var{first} and
+@var{last} may be specified as a string (to locate the most recent
+command beginning with that string) or as a number (an index into the
+history list, where a negative number is used as an offset from the
+current command number). If @var{last} is not specified it is set to
+@var{first}. If @var{first} is not specified it is set to the previous
+command for editing and @minus{}16 for listing. If the @samp{-l} flag is
+given, the commands are listed on standard output. The @samp{-n} flag
+suppresses the command numbers when listing. The @samp{-r} flag
+reverses the order of the listing. Otherwise, the editor given by
+@var{ename} is invoked on a file containing those commands. If
+@var{ename} is not given, the value of the following variable expansion
+is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the
+value of the @code{FCEDIT} variable if set, or the value of the
+@code{EDITOR} variable if that is set, or @code{vi} if neither is set.
+When editing is complete, the edited commands are echoed and executed.
+
+In the second form, @var{command} is re-executed after each instance
+of @var{pat} in the selected command is replaced by @var{rep}.
+
+A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so
+that typing @samp{r cc} runs the last command beginning with @code{cc}
+and typing @samp{r} re-executes the last command (@pxref{Aliases}).
+
+@item history
+@comment btindex history
+@example
+history [-c] [@var{n}]
+history [-anrw] [@var{filename}]
+history -ps @var{arg}
+@end example
+
+Display the history list with line numbers. Lines prefixed with
+with a @samp{*} have been modified. An argument of @var{n} says
+to list only the last @var{n} lines. Options, if supplied, have
+the following meanings:
+
+@table @code
+@item -w
+Write out the current history to the history file.
+
+@item -r
+Read the current history file and append its contents to
+the history list.
+
+@item -a
+Append the new
+history lines (history lines entered since the beginning of the
+current Bash session) to the history file.
+
+@item -n
+Append the history lines not already read from the history file
+to the current history list. These are lines appended to the history
+file since the beginning of the current Bash session.
+
+@item -c
+Clear the history list. This may be combined
+with the other options to replace the history list completely.
+
+@item -s
+The @var{arg}s are added to the end of
+the history list as a single entry.
+
+@item -p
+Perform history substitution on the @var{arg}s and display the result
+on the standard output, without storing the results in the history list.
+@end table
+
+When the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} option is
+used, if @var{filename}
+is given, then it is used as the history file. If not, then
+the value of the @code{HISTFILE} variable is used.
+
+@end table
+@end ifset
@node History Interaction
-@section History Interaction
-@cindex expansion
+@section History Expansion
+@cindex history expansion
The History library provides a history expansion feature that is similar
-to the history expansion in Csh. The following text describes the sytax
-that you use to manipulate the history information.
+to the history expansion provided by @code{csh}. This section
+describes the syntax used to manipulate the history information.
+
+History expansions introduce words from the history list into
+the input stream, making it easy to repeat commands, insert the
+arguments to a previous command into the current input line, or
+fix errors in previous commands quickly.
History expansion takes place in two parts. The first is to determine
-which line from the previous history should be used during substitution.
+which line from the history list should be used during substitution.
The second is to select portions of that line for inclusion into the
-current one. The line selected from the previous history is called the
+current one. The line selected from the history is called the
@dfn{event}, and the portions of that line that are acted upon are
-called @dfn{words}. The line is broken into words in the same fashion
-that the Bash shell does, so that several English (or Unix) words
-surrounded by quotes are considered as one word.
+called @dfn{words}. Various @dfn{modifiers} are available to manipulate
+the selected words. The line is broken into words in the same fashion
+that Bash does, so that several words
+surrounded by quotes are considered one word.
+History expansions are introduced by the appearance of the
+history expansion character, which is @samp{!} by default.
+@ifset BashFeatures
+Only @samp{\} and @samp{'} may be used to escape the history expansion
+character.
+@end ifset
+
+@ifset BashFeatures
+Several shell options settable with the @code{shopt}
+builtin (@pxref{Bash Builtins}) may be used to tailor
+the behavior of history expansion. If the
+@code{histverify} shell option is enabled, and Readline
+is being used, history substitutions are not immediately passed to
+the shell parser.
+Instead, the expanded line is reloaded into the Readline
+editing buffer for further modification.
+If Readline is being used, and the @code{histreedit}
+shell option is enabled, a failed history expansion will be
+reloaded into the Readline editing buffer for correction.
+The @samp{-p} option to the @code{history} builtin command
+may be used to see what a history expansion will do before using it.
+The @samp{-s} option to the @code{history} builtin may be used to
+add commands to the end of the history list without actually executing
+them, so that they are available for subsequent recall.
+This is most useful in conjunction with Readline.
+
+The shell allows control of the various characters used by the
+history expansion mechanism with the @code{histchars} variable.
+@end ifset
@menu
* Event Designators:: How to specify which history line to use.
* Word Designators:: Specifying which words are of interest.
-* Modifiers:: Modifying the results of susbstitution.
+* Modifiers:: Modifying the results of substitution.
@end menu
@node Event Designators
@@ -64,90 +264,135 @@ surrounded by quotes are considered as one word.
An event designator is a reference to a command line entry in the
history list.
+@cindex history events
@table @asis
@item @code{!}
-Start a history subsititution, except when followed by a space, tab, or
-the end of the line... @key{=} or @key{(}.
+Start a history substitution, except when followed by a space, tab,
+the end of the line, @samp{=} or @samp{(}.
-@item @code{!!}
-Refer to the previous command. This is a synonym for @code{!-1}.
-
-@item @code{!n}
+@item @code{!@var{n}}
Refer to command line @var{n}.
-@item @code{!-n}
-Refer to the command line @var{n} lines back.
+@item @code{!-@var{n}}
+Refer to the command @var{n} lines back.
-@item @code{!string}
+@item @code{!!}
+Refer to the previous command. This is a synonym for @samp{!-1}.
+
+@item @code{!@var{string}}
Refer to the most recent command starting with @var{string}.
-@item @code{!?string}[@code{?}]
-Refer to the most recent command containing @var{string}.
+@item @code{!?@var{string}[?]}
+Refer to the most recent command containing @var{string}. The trailing
+@samp{?} may be omitted if the @var{string} is followed immediately by
+a newline.
+
+@item @code{^@var{string1}^@var{string2}^}
+Quick Substitution. Repeat the last command, replacing @var{string1}
+with @var{string2}. Equivalent to
+@code{!!:s/@var{string1}/@var{string2}/}.
+
+@item @code{!#}
+The entire command line typed so far.
@end table
@node Word Designators
@subsection Word Designators
-A @key{:} separates the event specification from the word designator. It
-can be omitted if the word designator begins with a @key{^}, @key{$},
-@key{*} or @key{%}. Words are numbered from the beginning of the line,
-with the first word being denoted by a 0 (zero).
+Word designators are used to select desired words from the event.
+A @samp{:} separates the event specification from the word designator. It
+may be omitted if the word designator begins with a @samp{^}, @samp{$},
+@samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning
+of the line, with the first word being denoted by 0 (zero). Words are
+inserted into the current line separated by single spaces.
@table @code
@item 0 (zero)
-The zero'th word. For many applications, this is the command word.
+The @code{0}th word. For many applications, this is the command word.
-@item n
-The @var{n}'th word.
+@item @var{n}
+The @var{n}th word.
@item ^
-The first argument. that is, word 1.
+The first argument; that is, word 1.
@item $
The last argument.
@item %
-The word matched by the most recent @code{?string?} search.
+The word matched by the most recent @samp{?@var{string}?} search.
-@item x-y
-A range of words; @code{-@var{y}} Abbreviates @code{0-@var{y}}.
+@item @var{x}-@var{y}
+A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}.
@item *
-All of the words, excepting the zero'th. This is a synonym for @code{1-$}.
-It is not an error to use @key{*} if there is just one word in the event.
-The empty string is returned in that case.
+All of the words, except the @code{0}th. This is a synonym for @samp{1-$}.
+It is not an error to use @samp{*} if there is just one word in the event;
+the empty string is returned in that case.
+
+@item @var{x}*
+Abbreviates @samp{@var{x}-$}
+
+@item @var{x}-
+Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word.
@end table
+If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
@node Modifiers
@subsection Modifiers
After the optional word designator, you can add a sequence of one or more
-of the following modifiers, each preceded by a @key{:}.
+of the following modifiers, each preceded by a @samp{:}.
@table @code
-@item #
-The entire command line typed so far. This means the current command,
-not the previous command, so it really isn't a word designator, and doesn't
-belong in this section.
-
@item h
Remove a trailing pathname component, leaving only the head.
+@item t
+Remove all leading pathname components, leaving the tail.
+
@item r
-Remove a trailing suffix of the form @samp{.}@var{suffix}, leaving the basename.
+Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving
+the basename.
@item e
-Remove all but the suffix.
-
-@item t
-Remove all leading pathname components, leaving the tail.
+Remove all but the trailing suffix.
@item p
Print the new command but do not execute it.
+
+@ifset BashFeatures
+@item q
+Quote the substituted words, escaping further substitutions.
+
+@item x
+Quote the substituted words as with @samp{q},
+but break into words at spaces, tabs, and newlines.
+@end ifset
+
+@item s/@var{old}/@var{new}/
+Substitute @var{new} for the first occurrence of @var{old} in the
+event line. Any delimiter may be used in place of @samp{/}.
+The delimiter may be quoted in @var{old} and @var{new}
+with a single backslash. If @samp{&} appears in @var{new},
+it is replaced by @var{old}. A single backslash will quote
+the @samp{&}. The final delimiter is optional if it is the last
+character on the input line.
+
+@item &
+Repeat the previous substitution.
+
+@item g
+Cause changes to be applied over the entire event line. Used in
+conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/},
+or with @samp{&}.
+
@end table
diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi
deleted file mode 100644
index d8491dc0cb0..00000000000
Binary files a/readline/doc/readline.dvi and /dev/null differ
diff --git a/readline/doc/readline.html b/readline/doc/readline.html
deleted file mode 100644
index c708eb07fd1..00000000000
--- a/readline/doc/readline.html
+++ /dev/null
@@ -1,3482 +0,0 @@
-
-
-
-
-GNU Readline Library
-
-
-GNU Readline Library
-Edition 2.2, for Readline Library
Version 2.1.
-September 1997
-Brian Fox, Free Software Foundation
-Chet Ramey, Case Western Reserve University
-
-
-
-
-@dircategory Libraries
-@direntry
-* Readline: (readline). The GNU readline library API
-
-
-
-
-This document describes the GNU Readline Library, a utility which aids
-in the consistency of user interface across discrete programs that need
-to provide a command line interface.
-
-
-
-Published by the Free Software Foundation
-675 Massachusetts Avenue,
-Cambridge, MA 02139 USA
-
-
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Foundation.
-
-
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-
-
-
-
-
-
-
-
-This chapter describes the basic features of the GNU
-command line editing interface.
-
-
-
-
-
-
-
-
-The following paragraphs describe the notation used to represent
-keystrokes.
-
-
-
-The text C-k is read as `Control-K' and describes the character
-produced when the k key is pressed while the Control key
-is depressed.
-
-
-
-The text M-k is read as `Meta-K' and describes the character
-produced when the meta key (if you have one) is depressed, and the k
-key is pressed. If you do not have a meta key, the identical keystroke
-can be generated by typing ESC first, and then typing k.
-Either process is known as metafying the k key.
-
-
-
-The text M-C-k is read as `Meta-Control-k' and describes the
-character produced by metafying C-k.
-
-
-
-In addition, several keys have their own names. Specifically,
-DEL, ESC, LFD, SPC, RET, and TAB all
-stand for themselves when seen in this text, or in an init file
-(@xref{Readline Init File}).
-
-
-
-
-
-
-
-
-
-
-Often during an interactive session you type in a long line of text,
-only to notice that the first word on the line is misspelled. The
-Readline library gives you a set of commands for manipulating the text
-as you type it in, allowing you to just fix your typo, and not forcing
-you to retype the majority of the line. Using these editing commands,
-you move the cursor to the place that needs correction, and delete or
-insert the text of the corrections. Then, when you are satisfied with
-the line, you simply press RETURN. You do not have to be at the
-end of the line to press RETURN; the entire line is accepted
-regardless of the location of the cursor within the line.
-
-
-
-
-
-
-
-
-There are only a few basic constructs allowed in the
-Readline init file. Blank lines are ignored.
-Lines beginning with a `#' are comments.
-Lines beginning with a `$' indicate conditional
-constructs (see section Conditional Init Constructs). Other lines
-denote variable settings and key bindings.
-
-
-
-
-- Variable Settings
-
-
-You can modify the run-time behavior of Readline by
-altering the values of variables in Readline
-using the
set
command within the init file. Here is how to
-change from the default Emacs-like key binding to use
-vi
line editing commands:
-
-
-
-set editing-mode vi
-
-
-A great deal of run-time behavior is changeable with the following
-variables.
-
-
-
-bell-style
--
-
-Controls what happens when Readline wants to ring the terminal bell.
-If set to `none', Readline never rings the bell. If set to
-`visible', Readline uses a visible bell if one is available.
-If set to `audible' (the default), Readline attempts to ring
-the terminal's bell.
-
-
comment-begin
--
-
-The string to insert at the beginning of the line when the
-
insert-comment
command is executed. The default value
-is "#"
.
-
- completion-ignore-case
--
-If set to `on', Readline performs filename matching and completion
-in a case-insensitive fashion.
-The default value is `off'.
-
-
completion-query-items
--
-
-The number of possible completions that determines when the user is
-asked whether he wants to see the list of possibilities. If the
-number of possible completions is greater than this value,
-Readline will ask the user whether or not he wishes to view
-them; otherwise, they are simply listed. The default limit is
-
100
.
-
- convert-meta
--
-
-If set to `on', Readline will convert characters with the
-eighth bit set to an ASCII key sequence by stripping the eighth
-bit and prepending an ESC character, converting them to a
-meta-prefixed key sequence. The default value is `on'.
-
-
disable-completion
--
-
-If set to `On', Readline will inhibit word completion.
-Completion characters will be inserted into the line as if they had
-been mapped to
self-insert
. The default is `off'.
-
- editing-mode
--
-
-The
editing-mode
variable controls which default set of
-key bindings is used. By default, Readline starts up in Emacs editing
-mode, where the keystrokes are most similar to Emacs. This variable can be
-set to either `emacs' or `vi'.
-
- enable-keypad
--
-
-When set to `on', Readline will try to enable the application
-keypad when it is called. Some systems need this to enable the
-arrow keys. The default is `off'.
-
-
expand-tilde
--
-
-If set to `on', tilde expansion is performed when Readline
-attempts word completion. The default is `off'.
-
-
horizontal-scroll-mode
--
-
-This variable can be set to either `on' or `off'. Setting it
-to `on' means that the text of the lines being edited will scroll
-horizontally on a single screen line when they are longer than the width
-of the screen, instead of wrapping onto a new screen line. By default,
-this variable is set to `off'.
-
-
keymap
--
-
-Sets Readline's idea of the current keymap for key binding commands.
-Acceptable
keymap
names are
-emacs
,
-emacs-standard
,
-emacs-meta
,
-emacs-ctlx
,
-vi
,
-vi-command
, and
-vi-insert
.
-vi
is equivalent to vi-command
; emacs
is
-equivalent to emacs-standard
. The default value is emacs
.
-The value of the editing-mode
variable also affects the
-default keymap.
-
- mark-directories
--
-If set to `on', completed directory names have a slash
-appended. The default is `on'.
-
-
mark-modified-lines
--
-
-This variable, when set to `on', causes Readline to display an
-asterisk (`*') at the start of history lines which have been modified.
-This variable is `off' by default.
-
-
input-meta
--
-
-
-If set to `on', Readline will enable eight-bit input (it
-will not strip the eighth bit from the characters it reads),
-regardless of what the terminal claims it can support. The
-default value is `off'. The name
meta-flag
is a
-synonym for this variable.
-
- output-meta
--
-
-If set to `on', Readline will display characters with the
-eighth bit set directly rather than as a meta-prefixed escape
-sequence. The default is `off'.
-
-
print-completions-horizontally
--
-If set to `on', Readline will display completions with matches
-sorted horizontally in alphabetical order, rather than down the screen.
-The default is `off'.
-
-
show-all-if-ambiguous
--
-
-This alters the default behavior of the completion functions. If
-set to `on',
-words which have more than one possible completion cause the
-matches to be listed immediately instead of ringing the bell.
-The default value is `off'.
-
-
visible-stats
--
-
-If set to `on', a character denoting a file's type
-is appended to the filename when listing possible
-completions. The default is `off'.
-
-
-
- - Key Bindings
-
-
-The syntax for controlling key bindings in the init file is
-simple. First you have to know the name of the command that you
-want to change. The following sections contain tables of the command
-name, the default keybinding, if any, and a short description of what
-the command does.
-
-Once you know the name of the command, simply place the name of the key
-you wish to bind the command to, a colon, and then the name of the
-command on a line in the init file. The name of the key
-can be expressed in different ways, depending on which is most
-comfortable for you.
-
-
-
-- keyname: function-name or macro
-
-
-keyname is the name of a key spelled out in English. For example:
-
-
-Control-u: universal-argument
-Meta-Rubout: backward-kill-word
-Control-o: "> output"
-
-
-In the above example, C-u is bound to the function
-universal-argument
, and C-o is bound to run the macro
-expressed on the right hand side (that is, to insert the text
-`> output' into the line).
-
- - "keyseq": function-name or macro
-
-
-keyseq differs from keyname above in that strings
-denoting an entire key sequence can be specified, by placing
-the key sequence in double quotes. Some GNU Emacs style key
-escapes can be used, as in the following example, but the
-special character names are not recognized.
-
-
-
-"\C-u": universal-argument
-"\C-x\C-r": re-read-init-file
-"\e[11~": "Function Key 1"
-
-
-In the above example, C-u is bound to the function
-universal-argument
(just as it was in the first example),
-`C-x C-r' is bound to the function re-read-init-file
,
-and `ESC [ 1 1 ~' is bound to insert
-the text `Function Key 1'.
-
-
-
-The following GNU Emacs style escape sequences are available when
-specifying key sequences:
-
-
-
-\C-
--
-control prefix
-
\M-
--
-meta prefix
-
\e
--
-an escape character
-
\\
--
-backslash
-
\"
--
-"
-
\'
--
-'
-
-
-In addition to the GNU Emacs style escape sequences, a second
-set of backslash escapes is available:
-
-
-
-\a
--
-alert (bell)
-
\b
--
-backspace
-
\d
--
-delete
-
\f
--
-form feed
-
\n
--
-newline
-
\r
--
-carriage return
-
\t
--
-horizontal tab
-
\v
--
-vertical tab
-
\nnn
--
-the character whose ASCII code is the octal value nnn
-(one to three digits)
-
\xnnn
--
-the character whose ASCII code is the hexadecimal value nnn
-(one to three digits)
-
-
-When entering the text of a macro, single or double quotes must
-be used to indicate a macro definition.
-Unquoted text is assumed to be a function name.
-In the macro body, the backslash escapes described above are expanded.
-Backslash will quote any other character in the macro text,
-including `"' and `''.
-For example, the following binding will make `C-x \'
-insert a single `\' into the line:
-
-
-"\C-x\\": "\\"
-
-
-
-
-
-
-
-
-
-Readline implements a facility similar in spirit to the conditional
-compilation features of the C preprocessor which allows key
-bindings and variable settings to be performed as the result
-of tests. There are four parser directives used.
-
-
-
-
-$if
--
-The
$if
construct allows bindings to be made based on the
-editing mode, the terminal being used, or the application using
-Readline. The text of the test extends to the end of the line;
-no characters are required to isolate it.
-
-
-
-mode
--
-The
mode=
form of the $if
directive is used to test
-whether Readline is in emacs
or vi
mode.
-This may be used in conjunction
-with the `set keymap' command, for instance, to set bindings in
-the emacs-standard
and emacs-ctlx
keymaps only if
-Readline is starting out in emacs
mode.
-
- term
--
-The
term=
form may be used to include terminal-specific
-key bindings, perhaps to bind the key sequences output by the
-terminal's function keys. The word on the right side of the
-`=' is tested against both the full name of the terminal and
-the portion of the terminal name before the first `-'. This
-allows sun
to match both sun
and sun-cmd
,
-for instance.
-
- application
--
-The application construct is used to include
-application-specific settings. Each program using the Readline
-library sets the application name, and you can test for it.
-This could be used to bind key sequences to functions useful for
-a specific program. For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
-
-
-$if Bash
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-$endif
-
-
-
-
- $endif
--
-This command, as seen in the previous example, terminates an
-
$if
command.
-
- $else
--
-Commands in this branch of the
$if
directive are executed if
-the test fails.
-
- $include
--
-This directive takes a single filename as an argument and reads commands
-and bindings from that file.
-
-
-$include /etc/inputrc
-
-
-
-
-
-
-
-
-
-Here is an example of an inputrc file. This illustrates key
-binding, variable assignment, and conditional syntax.
-
-
-
-
-# This file controls the behaviour of line input editing for
-# programs that use the Gnu Readline library. Existing programs
-# include FTP, Bash, and Gdb.
-#
-# You can re-read the inputrc file with C-x C-r.
-# Lines beginning with '#' are comments.
-#
-# First, include any systemwide bindings and variable assignments from
-# /etc/Inputrc
-$include /etc/Inputrc
-
-#
-# Set various bindings for emacs mode.
-
-set editing-mode emacs
-
-$if mode=emacs
-
-Meta-Control-h: backward-kill-word Text after the function name is ignored
-
-#
-# Arrow keys in keypad mode
-#
-#"\M-OD": backward-char
-#"\M-OC": forward-char
-#"\M-OA": previous-history
-#"\M-OB": next-history
-#
-# Arrow keys in ANSI mode
-#
-"\M-[D": backward-char
-"\M-[C": forward-char
-"\M-[A": previous-history
-"\M-[B": next-history
-#
-# Arrow keys in 8 bit keypad mode
-#
-#"\M-\C-OD": backward-char
-#"\M-\C-OC": forward-char
-#"\M-\C-OA": previous-history
-#"\M-\C-OB": next-history
-#
-# Arrow keys in 8 bit ANSI mode
-#
-#"\M-\C-[D": backward-char
-#"\M-\C-[C": forward-char
-#"\M-\C-[A": previous-history
-#"\M-\C-[B": next-history
-
-C-q: quoted-insert
-
-$endif
-
-# An old-style binding. This happens to be the default.
-TAB: complete
-
-# Macros that are convenient for shell interaction
-$if Bash
-# edit the path
-"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
-# prepare to type a quoted word -- insert open and close double quotes
-# and move to just after the open quote
-"\C-x\"": "\"\"\C-b"
-# insert a backslash (testing backslash escapes in sequences and macros)
-"\C-x\\": "\\"
-# Quote the current or previous word
-"\C-xq": "\eb\"\ef\""
-# Add a binding to refresh the line, which is unbound
-"\C-xr": redraw-current-line
-# Edit variable on current line.
-"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
-$endif
-
-# use a visible bell if one is available
-set bell-style visible
-
-# don't strip characters to 7 bits when reading
-set input-meta on
-
-# allow iso-latin1 characters to be inserted rather than converted to
-# prefix-meta sequences
-set convert-meta off
-
-# display characters with the eighth bit set directly rather than
-# as meta-prefixed characters
-set output-meta on
-
-# if there are more than 150 possible completions for a word, ask the
-# user if he wants to see all of them
-set completion-query-items 150
-
-# For FTP
-$if Ftp
-"\C-xg": "get \M-?"
-"\C-xt": "put \M-?"
-"\M-.": yank-last-arg
-$endif
-
-
-
-
-
-
-
-This section describes Readline commands that may be bound to key
-sequences.
-
-
-
-
-
-
-
-beginning-of-line (C-a)
--
-
-Move to the start of the current line.
-
-
end-of-line (C-e)
--
-
-Move to the end of the line.
-
-
forward-char (C-f)
--
-
-Move forward a character.
-
-
backward-char (C-b)
--
-
-Move back a character.
-
-
forward-word (M-f)
--
-
-Move forward to the end of the next word. Words are composed of
-letters and digits.
-
-
backward-word (M-b)
--
-
-Move back to the start of this, or the previous, word. Words are
-composed of letters and digits.
-
-
clear-screen (C-l)
--
-
-Clear the screen and redraw the current line,
-leaving the current line at the top of the screen.
-
-
redraw-current-line ()
--
-
-Refresh the current line. By default, this is unbound.
-
-
-
-
-
-
-
-
-
-accept-line (Newline, Return)
--
-
-Accept the line regardless of where the cursor is. If this line is
-non-empty, add it to the history list. If this line was a history
-line, then restore the history line to its original state.
-
-
previous-history (C-p)
--
-
-Move `up' through the history list.
-
-
next-history (C-n)
--
-
-Move `down' through the history list.
-
-
beginning-of-history (M-<)
--
-
-Move to the first line in the history.
-
-
end-of-history (M->)
--
-
-Move to the end of the input history, i.e., the line currently
-being entered.
-
-
reverse-search-history (C-r)
--
-
-Search backward starting at the current line and moving `up' through
-the history as necessary. This is an incremental search.
-
-
forward-search-history (C-s)
--
-
-Search forward starting at the current line and moving `down' through
-the the history as necessary. This is an incremental search.
-
-
non-incremental-reverse-search-history (M-p)
--
-
-Search backward starting at the current line and moving `up'
-through the history as necessary using a non-incremental search
-for a string supplied by the user.
-
-
non-incremental-forward-search-history (M-n)
--
-
-Search forward starting at the current line and moving `down'
-through the the history as necessary using a non-incremental search
-for a string supplied by the user.
-
-
history-search-forward ()
--
-
-Search forward through the history for the string of characters
-between the start of the current line and the current cursor
-position (the point). This is a non-incremental search. By
-default, this command is unbound.
-
-
history-search-backward ()
--
-
-Search backward through the history for the string of characters
-between the start of the current line and the point. This
-is a non-incremental search. By default, this command is unbound.
-
-
yank-nth-arg (M-C-y)
--
-
-Insert the first argument to the previous command (usually
-the second word on the previous line). With an argument n,
-insert the nth word from the previous command (the words
-in the previous command begin with word 0). A negative argument
-inserts the nth word from the end of the previous command.
-
-
yank-last-arg (M-., M-_)
--
-
-Insert last argument to the previous command (the last word of the
-previous history entry). With an
-argument, behave exactly like
yank-nth-arg
.
-Successive calls to yank-last-arg
move back through the history
-list, inserting the last argument of each line in turn.
-
-
-
-
-
-
-
-
-
-delete-char (C-d)
--
-
-Delete the character under the cursor. If the cursor is at the
-beginning of the line, there are no characters in the line, and
-the last character typed was not bound to
delete-char
, then
-return EOF
.
-
- backward-delete-char (Rubout)
--
-
-Delete the character behind the cursor. A numeric argument means
-to kill the characters instead of deleting them.
-
-
quoted-insert (C-q, C-v)
--
-
-Add the next character typed to the line verbatim. This is
-how to insert key sequences like C-q, for example.
-
-
tab-insert (M-TAB)
--
-
-Insert a tab character.
-
-
self-insert (a, b, A, 1, !, ...)
--
-
-Insert yourself.
-
-
transpose-chars (C-t)
--
-
-Drag the character before the cursor forward over
-the character at the cursor, moving the
-cursor forward as well. If the insertion point
-is at the end of the line, then this
-transposes the last two characters of the line.
-Negative arguments don't work.
-
-
transpose-words (M-t)
--
-
-Drag the word behind the cursor past the word in front of the cursor
-moving the cursor over that word as well.
-
-
upcase-word (M-u)
--
-
-Uppercase the current (or following) word. With a negative argument,
-uppercase the previous word, but do not move the cursor.
-
-
downcase-word (M-l)
--
-
-Lowercase the current (or following) word. With a negative argument,
-lowercase the previous word, but do not move the cursor.
-
-
capitalize-word (M-c)
--
-
-Capitalize the current (or following) word. With a negative argument,
-capitalize the previous word, but do not move the cursor.
-
-
-
-
-
-
-
-
-
-kill-line (C-k)
--
-
-Kill the text from the current cursor position to the end of the line.
-
-
backward-kill-line (C-x Rubout)
--
-
-Kill backward to the beginning of the line.
-
-
unix-line-discard (C-u)
--
-
-Kill backward from the cursor to the beginning of the current line.
-The killed text is saved on the kill-ring.
-
-
kill-whole-line ()
--
-
-Kill all characters on the current line, no matter where the
-cursor is. By default, this is unbound.
-
-
kill-word (M-d)
--
-
-Kill from the cursor to the end of the current word, or if between
-words, to the end of the next word. Word boundaries are the same
-as
forward-word
.
-
- backward-kill-word (M-DEL)
--
-
-Kill the word behind the cursor. Word boundaries are the same
-as
backward-word
.
-
- unix-word-rubout (C-w)
--
-
-Kill the word behind the cursor, using white space as a word
-boundary. The killed text is saved on the kill-ring.
-
-
delete-horizontal-space ()
--
-
-Delete all spaces and tabs around point. By default, this is unbound.
-
-
kill-region ()
--
-
-Kill the text between the point and the mark (saved
-cursor position). This text is referred to as the region.
-By default, this command is unbound.
-
-
copy-region-as-kill ()
--
-
-Copy the text in the region to the kill buffer, so it can be yanked
-right away. By default, this command is unbound.
-
-
copy-backward-word ()
--
-
-Copy the word before point to the kill buffer.
-The word boundaries are the same as
backward-word
.
-By default, this command is unbound.
-
- copy-forward-word ()
--
-
-Copy the word following point to the kill buffer.
-The word boundaries are the same as
forward-word
.
-By default, this command is unbound.
-
- yank (C-y)
--
-
-Yank the top of the kill ring into the buffer at the current
-cursor position.
-
-
yank-pop (M-y)
--
-
-Rotate the kill-ring, and yank the new top. You can only do this if
-the prior command is yank or yank-pop.
-
-
-
-
-
-
-
-digit-argument (M-0, M-1, ... M--)
--
-
-Add this digit to the argument already accumulating, or start a new
-argument. M-- starts a negative argument.
-
-
universal-argument ()
--
-
-This is another way to specify an argument.
-If this command is followed by one or more digits, optionally with a
-leading minus sign, those digits define the argument.
-If the command is followed by digits, executing
universal-argument
-again ends the numeric argument, but is otherwise ignored.
-As a special case, if this command is immediately followed by a
-character that is neither a digit or minus sign, the argument count
-for the next command is multiplied by four.
-The argument count is initially one, so executing this function the
-first time makes the argument count four, a second time makes the
-argument count sixteen, and so on.
-By default, this is not bound to a key.
-
-
-
-
-
-
-
-
-complete (TAB)
--
-
-Attempt to do completion on the text before the cursor. This is
-application-specific. Generally, if you are typing a filename
-argument, you can do filename completion; if you are typing a command,
-you can do command completion; if you are typing in a symbol to GDB, you
-can do symbol name completion; if you are typing in a variable to Bash,
-you can do variable name completion, and so on.
-
-
possible-completions (M-?)
--
-
-List the possible completions of the text before the cursor.
-
-
insert-completions (M-*)
--
-
-Insert all completions of the text before point that would have
-been generated by
possible-completions
.
-
- menu-complete ()
--
-
-Similar to
complete
, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of menu-complete
steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
-An argument of n moves n positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to TAB
, but is unbound
-by default.
-
-
-
-
-
-
-
-
-start-kbd-macro (C-x ()
--
-
-Begin saving the characters typed into the current keyboard macro.
-
-
end-kbd-macro (C-x ))
--
-
-Stop saving the characters typed into the current keyboard macro
-and save the definition.
-
-
call-last-kbd-macro (C-x e)
--
-
-Re-execute the last keyboard macro defined, by making the characters
-in the macro appear as if typed at the keyboard.
-
-
-
-
-
-
-
-
-re-read-init-file (C-x C-r)
--
-
-Read in the contents of the inputrc file, and incorporate
-any bindings or variable assignments found there.
-
-
abort (C-g)
--
-
-Abort the current editing command and
-ring the terminal's bell (subject to the setting of
-
bell-style
).
-
- do-uppercase-version (M-a, M-b, M-x, ...)
--
-
-If the metafied character x is lowercase, run the command
-that is bound to the corresponding uppercase character.
-
-
prefix-meta (ESC)
--
-
-Make the next character typed be metafied. This is for keyboards
-without a meta key. Typing `ESC f' is equivalent to typing
-`M-f'.
-
-
undo (C-_, C-x C-u)
--
-
-Incremental undo, separately remembered for each line.
-
-
revert-line (M-r)
--
-
-Undo all changes made to this line. This is like executing the
undo
-command enough times to get back to the beginning.
-
- tilde-expand (M-~)
--
-
-Perform tilde expansion on the current word.
-
-
set-mark (C-@)
--
-
-Set the mark to the current point. If a
-numeric argument is supplied, the mark is set to that position.
-
-
exchange-point-and-mark (C-x C-x)
--
-
-Swap the point with the mark. The current cursor position is set to
-the saved position, and the old cursor position is saved as the mark.
-
-
character-search (C-])
--
-
-A character is read and point is moved to the next occurrence of that
-character. A negative count searches for previous occurrences.
-
-
character-search-backward (M-C-])
--
-
-A character is read and point is moved to the previous occurrence
-of that character. A negative count searches for subsequent
-occurrences.
-
-
insert-comment (M-#)
--
-
-The value of the
comment-begin
-variable is inserted at the beginning of the current line,
-and the line is accepted as if a newline had been typed.
-
- dump-functions ()
--
-
-Print all of the functions and their key bindings to the
-Readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an inputrc file. This command is unbound by default.
-
-
dump-variables ()
--
-
-Print all of the settable variables and their values to the
-Readline output stream. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an inputrc file. This command is unbound by default.
-
-
dump-macros ()
--
-
-Print all of the Readline key sequences bound to macros and the
-strings they ouput. If a numeric argument is supplied,
-the output is formatted in such a way that it can be made part
-of an inputrc file. This command is unbound by default.
-
-
-
-
-
-
-
-
-While the Readline library does not have a full set of vi
-editing functions, it does contain enough to allow simple editing
-of the line. The Readline vi
mode behaves as specified in
-the POSIX 1003.2 standard.
-
-
-
-In order to switch interactively between emacs
and vi
-editing modes, use the command M-C-j (toggle-editing-mode).
-The Readline default is emacs
mode.
-
-
-
-When you enter a line in vi
mode, you are already placed in
-`insertion' mode, as if you had typed an `i'. Pressing ESC
-switches you into `command' mode, where you can edit the text of the
-line with the standard vi
movement keys, move to previous
-history lines with `k' and subsequent lines with `j', and
-so forth.
-
-
-
-
-
-
-
-
-This chapter describes the interface between the GNU Readline Library and
-other programs. If you are a programmer, and you wish to include the
-features found in GNU Readline
-such as completion, line editing, and interactive history manipulation
-in your own programs, this section is for you.
-
-
-
-
-
-
-
-
-Many programs provide a command line interface, such as mail
,
-ftp
, and sh
. For such programs, the default behaviour of
-Readline is sufficient. This section describes how to use Readline in
-the simplest way possible, perhaps to replace calls in your code to
-gets()
or fgets ()
.
-
-
-
-
-
-The function readline ()
prints a prompt and then reads and returns
-a single line of text from the user. The line readline
-returns is allocated with malloc ()
; you should free ()
-the line when you are done with it. The declaration for readline
-in ANSI C is
-
-
-
-
-char *readline (char *prompt);
-
-
-
-So, one might say
-
-
-char *line = readline ("Enter a line: ");
-
-
-
-in order to read a line of text from the user.
-The line returned has the final newline removed, so only the
-text remains.
-
-
-
-If readline
encounters an EOF
while reading the line, and the
-line is empty at that point, then (char *)NULL
is returned.
-Otherwise, the line is ended just as if a newline had been typed.
-
-
-
-If you want the user to be able to get at the line later, (with
-C-p for example), you must call add_history ()
to save the
-line away in a history list of such lines.
-
-
-
-
-add_history (line)
;
-
-
-
-For full details on the GNU History Library, see the associated manual.
-
-
-
-It is preferable to avoid saving empty lines on the history list, since
-users rarely have a burning need to reuse a blank line. Here is
-a function which usefully replaces the standard gets ()
library
-function, and has the advantage of no static buffer to overflow:
-
-
-
-
-/* A static variable for holding the line. */
-static char *line_read = (char *)NULL;
-
-/* Read a string, and return a pointer to it. Returns NULL on EOF. */
-char *
-rl_gets ()
-{
- /* If the buffer has already been allocated, return the memory
- to the free pool. */
- if (line_read)
- {
- free (line_read);
- line_read = (char *)NULL;
- }
-
- /* Get a line from the user. */
- line_read = readline ("");
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-}
-
-
-
-This function gives the user the default behaviour of TAB
-completion: completion on file names. If you do not want Readline to
-complete on filenames, you can change the binding of the TAB key
-with rl_bind_key ()
.
-
-
-
-
-int rl_bind_key (int key, int (*function)());
-
-
-
-rl_bind_key ()
takes two arguments: key is the character that
-you want to bind, and function is the address of the function to
-call when key is pressed. Binding TAB to rl_insert ()
-makes TAB insert itself.
-rl_bind_key ()
returns non-zero if key is not a valid
-ASCII character code (between 0 and 255).
-
-
-
-Thus, to disable the default TAB behavior, the following suffices:
-
-
-rl_bind_key ('\t', rl_insert);
-
-
-
-This code should be executed once at the start of your program; you
-might write a function called initialize_readline ()
which
-performs this and other desired initializations, such as installing
-custom completers (see section Custom Completers).
-
-
-
-
-
-
-
-Readline provides many functions for manipulating the text of
-the line, but it isn't possible to anticipate the needs of all
-programs. This section describes the various functions and variables
-defined within the Readline library which allow a user program to add
-customized functionality to Readline.
-
-
-
-
-
-
-
-
-For readabilty, we declare a new type of object, called
-Function. A Function
is a C function which
-returns an int
. The type declaration for Function
is:
-
-
-
-typedef int Function ();
-
-
-
-The reason for declaring this new type is to make it easier to write
-code describing pointers to C functions. Let us say we had a variable
-called func which was a pointer to a function. Instead of the
-classic C declaration
-
-
-
-int (*)()func;
-
-
-
-we may write
-
-
-
-Function *func;
-
-
-
-Similarly, there are
-
-
-
-
-typedef void VFunction ();
-typedef char *CPFunction (); and
-typedef char **CPPFunction ();
-
-
-
-for functions returning no value, pointer to char
, and
-pointer to pointer to char
, respectively.
-
-
-
-
-
-
-
-In order to write new functions for Readline, you need to know the
-calling conventions for keyboard-invoked functions, and the names of the
-variables that describe the current state of the line read so far.
-
-
-
-The calling sequence for a command foo
looks like
-
-
-
-
-foo (int count, int key)
-
-
-
-where count is the numeric argument (or 1 if defaulted) and
-key is the key that invoked this function.
-
-
-
-It is completely up to the function as to what should be done with the
-numeric argument. Some functions use it as a repeat count, some
-as a flag, and others to choose alternate behavior (refreshing the current
-line as opposed to refreshing the screen, for example). Some choose to
-ignore it. In general, if a
-function uses the numeric argument as a repeat count, it should be able
-to do something useful with both negative and positive arguments.
-At the very least, it should be aware that it can be passed a
-negative argument.
-
-
-
-
-
-
-
-These variables are available to function writers.
-
-
-
-
-- Variable: char * rl_line_buffer
-
-
-This is the line gathered so far. You are welcome to modify the
-contents of the line, but see section Allowing Undoing.
-
-
-
-
-
-- Variable: int rl_point
-
-
-The offset of the current cursor position in
rl_line_buffer
-(the point).
-
-
-
-
-
-- Variable: int rl_end
-
-
-The number of characters present in
rl_line_buffer
. When
-rl_point
is at the end of the line, rl_point
and
-rl_end
are equal.
-
-
-
-
-
-- Variable: int rl_mark
-
-
-The mark (saved position) in the current line. If set, the mark
-and point define a region.
-
-
-
-
-
-- Variable: int rl_done
-
-
-Setting this to a non-zero value causes Readline to return the current
-line immediately.
-
-
-
-
-
-- Variable: int rl_pending_input
-
-
-Setting this to a value makes it the next keystroke read. This is a
-way to stuff a single character into the input stream.
-
-
-
-
-
-- Variable: char * rl_prompt
-
-
-The prompt Readline uses. This is set from the argument to
-
readline ()
, and should not be assigned to directly.
-
-
-
-
-
-- Variable: char * rl_library_version
-
-
-The version number of this revision of the library.
-
-
-
-
-
-- Variable: char * rl_terminal_name
-
-
-The terminal type, used for initialization.
-
-
-
-
-
-- Variable: char * rl_readline_name
-
-
-This variable is set to a unique name by each application using Readline.
-The value allows conditional parsing of the inputrc file
-(see section Conditional Init Constructs).
-
-
-
-
-
-- Variable: FILE * rl_instream
-
-
-The stdio stream from which Readline reads input.
-
-
-
-
-
-- Variable: FILE * rl_outstream
-
-
-The stdio stream to which Readline performs output.
-
-
-
-
-
-- Variable: Function * rl_startup_hook
-
-
-If non-zero, this is the address of a function to call just
-before
readline
prints the first prompt.
-
-
-
-
-
-- Variable: Function * rl_event_hook
-
-
-If non-zero, this is the address of a function to call periodically
-when readline is waiting for terminal input.
-
-
-
-
-
-- Variable: Function * rl_getc_function
-
-
-If non-zero,
readline
will call indirectly through this pointer
-to get a character from the input stream. By default, it is set to
-rl_getc
, the default readline
character input function
-(see section Utility Functions).
-
-
-
-
-
-- Variable: VFunction * rl_redisplay_function
-
-
-If non-zero,
readline
will call indirectly through this pointer
-to update the display with the current contents of the editing buffer.
-By default, it is set to rl_redisplay
, the default readline
-redisplay function (see section Redisplay).
-
-
-
-
-
-- Variable: Keymap rl_executing_keymap
-
-
-This variable is set to the keymap (see section Selecting a Keymap) in which the
-currently executing readline function was found.
-
-
-
-
-
-- Variable: Keymap rl_binding_keymap
-
-
-This variable is set to the keymap (see section Selecting a Keymap) in which the
-last key binding occurred.
-
-
-
-
-
-
-
-
-
-
-
-
-The user can dynamically change the bindings of keys while using
-Readline. This is done by representing the function with a descriptive
-name. The user is able to type the descriptive name when referring to
-the function. Thus, in an init file, one might find
-
-
-
-
-Meta-Rubout: backward-kill-word
-
-
-
-This binds the keystroke Meta-Rubout to the function
-descriptively named backward-kill-word
. You, as the
-programmer, should bind the functions you write to descriptive names as
-well. Readline provides a function for doing that:
-
-
-
-
-- Function: int rl_add_defun (char *name, Function *function, int key)
-
-
-Add name to the list of named functions. Make function be
-the function that gets called. If key is not -1, then bind it to
-function using
rl_bind_key ()
.
-
-
-
-
-Using this function alone is sufficient for most applications. It is
-the recommended way to add a few functions to the default functions that
-Readline has built in. If you need to do something other
-than adding a function to Readline, you may need to use the
-underlying functions described below.
-
-
-
-
-
-
-
-Key bindings take place on a keymap. The keymap is the
-association between the keys that the user types and the functions that
-get run. You can make your own keymaps, copy existing keymaps, and tell
-Readline which keymap to use.
-
-
-
-
-- Function: Keymap rl_make_bare_keymap ()
-
-
-Returns a new, empty keymap. The space for the keymap is allocated with
-
malloc ()
; you should free ()
it when you are done.
-
-
-
-
-
-- Function: Keymap rl_copy_keymap (Keymap map)
-
-
-Return a new keymap which is a copy of map.
-
-
-
-
-
-- Function: Keymap rl_make_keymap ()
-
-
-Return a new keymap with the printing characters bound to rl_insert,
-the lowercase Meta characters bound to run their equivalents, and
-the Meta digits bound to produce numeric arguments.
-
-
-
-
-
-- Function: void rl_discard_keymap (Keymap keymap)
-
-
-Free the storage associated with keymap.
-
-
-
-
-Readline has several internal keymaps. These functions allow you to
-change which keymap is active.
-
-
-
-
-- Function: Keymap rl_get_keymap ()
-
-
-Returns the currently active keymap.
-
-
-
-
-
-- Function: void rl_set_keymap (Keymap keymap)
-
-
-Makes keymap the currently active keymap.
-
-
-
-
-
-- Function: Keymap rl_get_keymap_by_name (char *name)
-
-
-Return the keymap matching name. name is one which would
-be supplied in a
set keymap
inputrc line (@xref{Readline Init File}).
-
-
-
-
-
-- Function: char * rl_get_keymap_name (Keymap keymap)
-
-
-Return the name matching keymap. name is one which would
-be supplied in a
set keymap
inputrc line (@xref{Readline Init File}).
-
-
-
-
-
-
-
-
-You associate keys with functions through the keymap. Readline has
-several internal keymaps: emacs_standard_keymap
,
-emacs_meta_keymap
, emacs_ctlx_keymap
,
-vi_movement_keymap
, and vi_insertion_keymap
.
-emacs_standard_keymap
is the default, and the examples in
-this manual assume that.
-
-
-
-These functions manage key bindings.
-
-
-
-
-- Function: int rl_bind_key (int key, Function *function)
-
-
-Binds key to function in the currently active keymap.
-Returns non-zero in the case of an invalid key.
-
-
-
-
-
-- Function: int rl_bind_key_in_map (int key, Function *function, Keymap map)
-
-
-Bind key to function in map. Returns non-zero in the case
-of an invalid key.
-
-
-
-
-
-- Function: int rl_unbind_key (int key)
-
-
-Bind key to the null function in the currently active keymap.
-Returns non-zero in case of error.
-
-
-
-
-
-- Function: int rl_unbind_key_in_map (int key, Keymap map)
-
-
-Bind key to the null function in map.
-Returns non-zero in case of error.
-
-
-
-
-
-- Function: int rl_unbind_function_in_map (Function *function, Keymap map)
-
-
-Unbind all keys that execute function in map.
-
-
-
-
-
-- Function: int rl_unbind_command_in_map (char *command, Keymap map)
-
-
-Unbind all keys that are bound to command in map.
-
-
-
-
-
-- Function: int rl_generic_bind (int type, char *keyseq, char *data, Keymap map)
-
-
-Bind the key sequence represented by the string keyseq to the arbitrary
-pointer data. type says what kind of data is pointed to by
-data; this can be a function (
ISFUNC
), a macro
-(ISMACR
), or a keymap (ISKMAP
). This makes new keymaps as
-necessary. The initial keymap in which to do bindings is map.
-
-
-
-
-
-- Function: int rl_parse_and_bind (char *line)
-
-
-Parse line as if it had been read from the
inputrc
file and
-perform any key bindings and variable assignments found
-(@xref{Readline Init File}).
-
-
-
-
-
-- Function: int rl_read_init_file (char *filename)
-
-
-Read keybindings and variable assignments from filename
-(@xref{Readline Init File}).
-
-
-
-
-
-
-
-
-These functions allow you to find out what keys invoke named functions
-and the functions invoked by a particular key sequence.
-
-
-
-
-- Function: Function * rl_named_function (char *name)
-
-
-Return the function with name name.
-
-
-
-
-
-- Function: Function * rl_function_of_keyseq (char *keyseq, Keymap map, int *type)
-
-
-Return the function invoked by keyseq in keymap map.
-If map is NULL, the current keymap is used. If type is
-not NULL, the type of the object is returned in it (one of
ISFUNC
,
-ISKMAP
, or ISMACR
).
-
-
-
-
-
-- Function: char ** rl_invoking_keyseqs (Function *function)
-
-
-Return an array of strings representing the key sequences used to
-invoke function in the current keymap.
-
-
-
-
-
-- Function: char ** rl_invoking_keyseqs_in_map (Function *function, Keymap map)
-
-
-Return an array of strings representing the key sequences used to
-invoke function in the keymap map.
-
-
-
-
-
-- Function: void rl_function_dumper (int readable)
-
-
-Print the readline function names and the key sequences currently
-bound to them to
rl_outstream
. If readable is non-zero,
-the list is formatted in such a way that it can be made part of an
-inputrc
file and re-read.
-
-
-
-
-
-- Function: void rl_list_funmap_names ()
-
-
-Print the names of all bindable Readline functions to
rl_outstream
.
-
-
-
-
-
-
-
-
-Supporting the undo command is a painless thing, and makes your
-functions much more useful. It is certainly easy to try
-something if you know you can undo it. I could use an undo function for
-the stock market.
-
-
-
-If your function simply inserts text once, or deletes text once, and
-uses rl_insert_text ()
or rl_delete_text ()
to do it, then
-undoing is already done for you automatically.
-
-
-
-If you do multiple insertions or multiple deletions, or any combination
-of these operations, you should group them together into one operation.
-This is done with rl_begin_undo_group ()
and
-rl_end_undo_group ()
.
-
-
-
-The types of events that can be undone are:
-
-
-
-
-enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
-
-
-
-Notice that UNDO_DELETE
means to insert some text, and
-UNDO_INSERT
means to delete some text. That is, the undo code
-tells undo what to undo, not how to undo it. UNDO_BEGIN
and
-UNDO_END
are tags added by rl_begin_undo_group ()
and
-rl_end_undo_group ()
.
-
-
-
-
-- Function: int rl_begin_undo_group ()
-
-
-Begins saving undo information in a group construct. The undo
-information usually comes from calls to
rl_insert_text ()
and
-rl_delete_text ()
, but could be the result of calls to
-rl_add_undo ()
.
-
-
-
-
-
-- Function: int rl_end_undo_group ()
-
-
-Closes the current undo group started with
rl_begin_undo_group
-()
. There should be one call to rl_end_undo_group ()
-for each call to rl_begin_undo_group ()
.
-
-
-
-
-
-- Function: void rl_add_undo (enum undo_code what, int start, int end, char *text)
-
-
-Remember how to undo an event (according to what). The affected
-text runs from start to end, and encompasses text.
-
-
-
-
-
-- Function: void free_undo_list ()
-
-
-Free the existing undo list.
-
-
-
-
-
-- Function: int rl_do_undo ()
-
-
-Undo the first thing on the undo list. Returns
0
if there was
-nothing to undo, non-zero if something was undone.
-
-
-
-
-Finally, if you neither insert nor delete text, but directly modify the
-existing text (e.g., change its case), call rl_modifying ()
-once, just before you modify the text. You must supply the indices of
-the text range that you are going to modify.
-
-
-
-
-- Function: int rl_modifying (int start, int end)
-
-
-Tell Readline to save the text between start and end as a
-single undo unit. It is assumed that you will subsequently modify
-that text.
-
-
-
-
-
-
-
-
-
-- Function: void rl_redisplay ()
-
-
-Change what's displayed on the screen to reflect the current contents
-of
rl_line_buffer
.
-
-
-
-
-
-- Function: int rl_forced_update_display ()
-
-
-Force the line to be updated and redisplayed, whether or not
-Readline thinks the screen display is correct.
-
-
-
-
-
-- Function: int rl_on_new_line ()
-
-
-Tell the update routines that we have moved onto a new (empty) line,
-usually after ouputting a newline.
-
-
-
-
-
-- Function: int rl_reset_line_state ()
-
-
-Reset the display state to a clean state and redisplay the current line
-starting on a new line.
-
-
-
-
-
-- Function: int rl_message (va_alist)
-
-
-The arguments are a string as would be supplied to
printf
. The
-resulting string is displayed in the echo area. The echo area
-is also used to display numeric arguments and search strings.
-
-
-
-
-
-- Function: int rl_clear_message ()
-
-
-Clear the message in the echo area.
-
-
-
-
-
-
-
-
-
-- Function: int rl_insert_text (char *text)
-
-
-Insert text into the line at the current cursor position.
-
-
-
-
-
-- Function: int rl_delete_text (int start, int end)
-
-
-Delete the text between start and end in the current line.
-
-
-
-
-
-- Function: char * rl_copy_text (int start, int end)
-
-
-Return a copy of the text between start and end in
-the current line.
-
-
-
-
-
-- Function: int rl_kill_text (int start, int end)
-
-
-Copy the text between start and end in the current line
-to the kill ring, appending or prepending to the last kill if the
-last command was a kill command. The text is deleted.
-If start is less than end,
-the text is appended, otherwise prepended. If the last command was
-not a kill, a new kill ring slot is used.
-
-
-
-
-
-
-
-
-
-- Function: int rl_read_key ()
-
-
-Return the next character available. This handles input inserted into
-the input stream via pending input (see section Readline Variables)
-and
rl_stuff_char ()
, macros, and characters read from the keyboard.
-
-
-
-
-
-- Function: int rl_getc (FILE *)
-
-
-Return the next character available from the keyboard.
-
-
-
-
-
-- Function: int rl_stuff_char (int c)
-
-
-Insert c into the Readline input stream. It will be "read"
-before Readline attempts to read characters from the terminal with
-
rl_read_key ()
.
-
-
-
-
-
-- Function: rl_extend_line_buffer (int len)
-
-
-Ensure that
rl_line_buffer
has enough space to hold len
-characters, possibly reallocating it if necessary.
-
-
-
-
-
-- Function: int rl_initialize ()
-
-
-Initialize or re-initialize Readline's internal state.
-
-
-
-
-
-- Function: int rl_reset_terminal (char *terminal_name)
-
-
-Reinitialize Readline's idea of the terminal settings using
-terminal_name as the terminal type (e.g.,
vt100
).
-
-
-
-
-
-- Function: int alphabetic (int c)
-
-
-Return 1 if c is an alphabetic character.
-
-
-
-
-
-- Function: int numeric (int c)
-
-
-Return 1 if c is a numeric character.
-
-
-
-
-
-- Function: int ding ()
-
-
-Ring the terminal bell, obeying the setting of
bell-style
.
-
-
-
-
-The following are implemented as macros, defined in chartypes.h
.
-
-
-
-
-- Function: int uppercase_p (int c)
-
-
-Return 1 if c is an uppercase alphabetic character.
-
-
-
-
-
-- Function: int lowercase_p (int c)
-
-
-Return 1 if c is a lowercase alphabetic character.
-
-
-
-
-
-- Function: int digit_p (int c)
-
-
-Return 1 if c is a numeric character.
-
-
-
-
-
-- Function: int to_upper (int c)
-
-
-If c is a lowercase alphabetic character, return the corresponding
-uppercase character.
-
-
-
-
-
-- Function: int to_lower (int c)
-
-
-If c is an uppercase alphabetic character, return the corresponding
-lowercase character.
-
-
-
-
-
-- Function: int digit_value (int c)
-
-
-If c is a number, return the value it represents.
-
-
-
-
-
-
-
-
-An alternate interface is available to plain readline()
. Some
-applications need to interleave keyboard I/O with file, device, or
-window system I/O, typically by using a main loop to select()
-on various file descriptors. To accomodate this need, readline can
-also be invoked as a `callback' function from an event loop. There
-are functions available to make this easy.
-
-
-
-
-- Function: void rl_callback_handler_install (char *prompt, Vfunction *lhandler)
-
-
-Set up the terminal for readline I/O and display the initial
-expanded value of prompt. Save the value of lhandler to
-use as a callback when a complete line of input has been entered.
-
-
-
-
-
-- Function: void rl_callback_read_char ()
-
-
-Whenever an application determines that keyboard input is available, it
-should call
rl_callback_read_char()
, which will read the next
-character from the current input source. If that character completes the
-line, rl_callback_read_char
will invoke the lhandler
-function saved by rl_callback_handler_install
to process the
-line. EOF
is indicated by calling lhandler with a
-NULL
line.
-
-
-
-
-
-- Function: void rl_callback_handler_remove ()
-
-
-Restore the terminal to its initial state and remove the line handler.
-This may be called from within a callback as well as independently.
-
-
-
-
-
-
-
-
-Here is a function which changes lowercase characters to their uppercase
-equivalents, and uppercase characters to lowercase. If
-this function was bound to `M-c', then typing `M-c' would
-change the case of the character under point. Typing `M-1 0 M-c'
-would change the case of the following 10 characters, leaving the cursor on
-the last character changed.
-
-
-
-
-/* Invert the case of the COUNT following characters. */
-int
-invert_case_line (count, key)
- int count, key;
-{
- register int start, end, i;
-
- start = rl_point;
-
- if (rl_point >= rl_end)
- return (0);
-
- if (count < 0)
- {
- direction = -1;
- count = -count;
- }
- else
- direction = 1;
-
- /* Find the end of the range to modify. */
- end = start + (count * direction);
-
- /* Force it to be within range. */
- if (end > rl_end)
- end = rl_end;
- else if (end < 0)
- end = 0;
-
- if (start == end)
- return (0);
-
- if (start > end)
- {
- int temp = start;
- start = end;
- end = temp;
- }
-
- /* Tell readline that we are modifying the line, so it will save
- the undo information. */
- rl_modifying (start, end);
-
- for (i = start; i != end; i++)
- {
- if (uppercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
- else if (lowercase_p (rl_line_buffer[i]))
- rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
- }
- /* Move point to on top of the last character changed. */
- rl_point = (direction == 1) ? end - 1 : start;
- return (0);
-}
-
-
-
-
-
-
-
-Typically, a program that reads commands from the user has a way of
-disambiguating commands and data. If your program is one of these, then
-it can provide completion for commands, data, or both.
-The following sections describe how your program and Readline
-cooperate to provide this service.
-
-
-
-
-
-
-
-
-In order to complete some text, the full list of possible completions
-must be available. That is, it is not possible to accurately
-expand a partial word without knowing all of the possible words
-which make sense in that context. The Readline library provides
-the user interface to completion, and two of the most common
-completion functions: filename and username. For completing other types
-of text, you must write your own completion function. This section
-describes exactly what such functions must do, and provides an example.
-
-
-
-There are three major functions used to perform completion:
-
-
-
-
--
-
-The user-interface function
rl_complete ()
. This function is
-called with the same arguments as other Readline
-functions intended for interactive use: count and
-invoking_key. It isolates the word to be completed and calls
-completion_matches ()
to generate a list of possible completions.
-It then either lists the possible completions, inserts the possible
-completions, or actually performs the
-completion, depending on which behavior is desired.
-
- -
-
-The internal function
completion_matches ()
uses your
-generator function to generate the list of possible matches, and
-then returns the array of these matches. You should place the address
-of your generator function in rl_completion_entry_function
.
-
- -
-
-The generator function is called repeatedly from
-
completion_matches ()
, returning a string each time. The
-arguments to the generator function are text and state.
-text is the partial word to be completed. state is zero the
-first time the function is called, allowing the generator to perform
-any necessary initialization, and a positive non-zero integer for
-each subsequent call. When the generator function returns
-(char *)NULL
this signals completion_matches ()
that there are
-no more possibilities left. Usually the generator function computes the
-list of possible completions when state is zero, and returns them
-one at a time on subsequent calls. Each string the generator function
-returns as a match must be allocated with malloc()
; Readline
-frees the strings when it has finished with them.
-
-
-
-
-
-- Function: int rl_complete (int ignore, int invoking_key)
-
-
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-
completion_matches ()
). The default is to do filename completion.
-
-
-
-
-
-- Variable: Function * rl_completion_entry_function
-
-
-This is a pointer to the generator function for
completion_matches
-()
. If the value of rl_completion_entry_function
is
-(Function *)NULL
then the default filename generator function,
-filename_completion_function ()
, is used.
-
-
-
-
-
-
-
-
-Here is the complete list of callable completion functions present in
-Readline.
-
-
-
-
-- Function: int rl_complete_internal (int what_to_do)
-
-
-Complete the word at or before point. what_to_do says what to do
-with the completion. A value of `?' means list the possible
-completions. `TAB' means do standard completion. `*' means
-insert all of the possible completions. `!' means to display
-all of the possible completions, if there is more than one, as well as
-performing partial completion.
-
-
-
-
-
-- Function: int rl_complete (int ignore, int invoking_key)
-
-
-Complete the word at or before point. You have supplied the function
-that does the initial simple matching selection algorithm (see
-
completion_matches ()
and rl_completion_entry_function
).
-The default is to do filename
-completion. This calls rl_complete_internal ()
with an
-argument depending on invoking_key.
-
-
-
-
-
-- Function: int rl_possible_completions (int count, int invoking_key))
-
-
-List the possible completions. See description of
rl_complete
-()
. This calls rl_complete_internal ()
with an argument of
-`?'.
-
-
-
-
-
-- Function: int rl_insert_completions (int count, int invoking_key))
-
-
-Insert the list of possible completions into the line, deleting the
-partially-completed word. See description of
rl_complete ()
.
-This calls rl_complete_internal ()
with an argument of `*'.
-
-
-
-
-
-- Function: char ** completion_matches (char *text, CPFunction *entry_func)
-
-
-Returns an array of
(char *)
which is a list of completions for
-text. If there are no completions, returns (char **)NULL
.
-The first entry in the returned array is the substitution for text.
-The remaining entries are the possible completions. The array is
-terminated with a NULL
pointer.
-
-
-
-entry_func is a function of two args, and returns a
-(char *)
. The first argument is text. The second is a
-state argument; it is zero on the first call, and non-zero on subsequent
-calls. entry_func returns a NULL
pointer to the caller
-when there are no more matches.
-
-
-
-
-
-- Function: char * filename_completion_function (char *text, int state)
-
-
-A generator function for filename completion in the general case. Note
-that completion in Bash is a little different because of all
-the pathnames that must be followed when looking up completions for a
-command. The Bash source is a useful reference for writing custom
-completion functions.
-
-
-
-
-
-- Function: char * username_completion_function (char *text, int state)
-
-
-A completion generator for usernames. text contains a partial
-username preceded by a random character (usually `~'). As with all
-completion generators, state is zero on the first call and non-zero
-for subsequent calls.
-
-
-
-
-
-
-
-
-
-- Variable: Function * rl_completion_entry_function
-
-
-A pointer to the generator function for
completion_matches ()
.
-NULL
means to use filename_entry_function ()
, the default
-filename completer.
-
-
-
-
-
-- Variable: CPPFunction * rl_attempted_completion_function
-
-
-A pointer to an alternative function to create matches.
-The function is called with text, start, and end.
-start and end are indices in
rl_line_buffer
saying
-what the boundaries of text are. If this function exists and
-returns NULL
, or if this variable is set to NULL
, then
-rl_complete ()
will call the value of
-rl_completion_entry_function
to generate matches, otherwise the
-array of strings returned will be used.
-
-
-
-
-
-- Variable: CPFunction * rl_filename_quoting_function
-
-
-A pointer to a function that will quote a filename in an application-
-specific fashion. This is called if filename completion is being
-attempted and one of the characters in
rl_filename_quote_characters
-appears in a completed filename. The function is called with
-text, match_type, and quote_pointer. The text
-is the filename to be quoted. The match_type is either
-SINGLE_MATCH
, if there is only one completion match, or
-MULT_MATCH
. Some functions use this to decide whether or not to
-insert a closing quote character. The quote_pointer is a pointer
-to any opening quote character the user typed. Some functions choose
-to reset this character.
-
-
-
-
-
-- Variable: CPFunction * rl_filename_dequoting_function
-
-
-A pointer to a function that will remove application-specific quoting
-characters from a filename before completion is attempted, so those
-characters do not interfere with matching the text against names in
-the filesystem. It is called with text, the text of the word
-to be dequoted, and quote_char, which is the quoting character
-that delimits the filename (usually `'' or `"'). If
-quote_char is zero, the filename was not in an embedded string.
-
-
-
-
-
-- Variable: Function * rl_char_is_quoted_p
-
-
-A pointer to a function to call that determines whether or not a specific
-character in the line buffer is quoted, according to whatever quoting
-mechanism the program calling readline uses. The function is called with
-two arguments: text, the text of the line, and index, the
-index of the character in the line. It is used to decide whether a
-character found in
rl_completer_word_break_characters
should be
-used to break words for the completer.
-
-
-
-
-
-- Variable: int rl_completion_query_items
-
-
-Up to this many items will be displayed in response to a
-possible-completions call. After that, we ask the user if she is sure
-she wants to see them all. The default value is 100.
-
-
-
-
-
-- Variable: char * rl_basic_word_break_characters
-
-
-The basic list of characters that signal a break between words for the
-completer routine. The default value of this variable is the characters
-which break words for completion in Bash, i.e.,
-
" \t\n\"\\'`@$><=;|&{("
.
-
-
-
-
-
-- Variable: char * rl_basic_quote_characters
-
-
-List of quote characters which can cause a word break.
-
-
-
-
-
-- Variable: char * rl_completer_word_break_characters
-
-
-The list of characters that signal a break between words for
-
rl_complete_internal ()
. The default list is the value of
-rl_basic_word_break_characters
.
-
-
-
-
-
-- Variable: char * rl_completer_quote_characters
-
-
-List of characters which can be used to quote a substring of the line.
-Completion occurs on the entire substring, and within the substring
-
rl_completer_word_break_characters
are treated as any other character,
-unless they also appear within this list.
-
-
-
-
-
-- Variable: char * rl_filename_quote_characters
-
-
-A list of characters that cause a filename to be quoted by the completer
-when they appear in a completed filename. The default is the null string.
-
-
-
-
-
-- Variable: char * rl_special_prefixes
-
-
-The list of characters that are word break characters, but should be
-left in text when it is passed to the completion function.
-Programs can use this to help determine what kind of completing to do.
-For instance, Bash sets this variable to "$@" so that it can complete
-shell variables and hostnames.
-
-
-
-
-
-- Variable: int rl_completion_append_character
-
-
-When a single completion alternative matches at the end of the command
-line, this character is appended to the inserted completion text. The
-default is a space character (` '). Setting this to the null
-character (`\0') prevents anything being appended automatically.
-This can be changed in custom completion functions to
-provide the "most sensible word separator character" according to
-an application-specific command line syntax specification.
-
-
-
-
-
-- Variable: int rl_ignore_completion_duplicates
-
-
-If non-zero, then disallow duplicates in the matches. Default is 1.
-
-
-
-
-
-- Variable: int rl_filename_completion_desired
-
-
-Non-zero means that the results of the matches are to be treated as
-filenames. This is always zero on entry, and can only be changed
-within a completion entry generator function. If it is set to a non-zero
-value, directory names have a slash appended and Readline attempts to
-quote completed filenames if they contain any embedded word break
-characters.
-
-
-
-
-
-- Variable: int rl_filename_quoting_desired
-
-
-Non-zero means that the results of the matches are to be quoted using
-double quotes (or an application-specific quoting mechanism) if the
-completed filename contains any characters in
-
rl_filename_quote_chars
. This is always non-zero
-on entry, and can only be changed within a completion entry generator
-function. The quoting is effected via a call to the function pointed to
-by rl_filename_quoting_function
.
-
-
-
-
-
-- Variable: int rl_inhibit_completion
-
-
-If this variable is non-zero, completion is inhibit<ed. The completion
-character will be inserted as any other bound to
self-insert
.
-
-
-
-
-
-- Variable: Function * rl_ignore_some_completions_function
-
-
-This function, if defined, is called by the completer when real filename
-completion is done, after all the matching names have been generated.
-It is passed a
NULL
terminated array of matches.
-The first element (matches[0]
) is the
-maximal substring common to all matches. This function can
-re-arrange the list of matches as required, but each element deleted
-from the array must be freed.
-
-
-
-
-
-- Variable: Function * rl_directory_completion_hook
-
-
-This function, if defined, is allowed to modify the directory portion
-of filenames Readline completes. It is called with the address of a
-string (the current directory name) as an argument. It could be used
-to expand symbolic links or shell variables in pathnames.
-
-
-
-
-
-
-
-
-Here is a small application demonstrating the use of the GNU Readline
-library. It is called fileman
, and the source code resides in
-`examples/fileman.c'. This sample application provides
-completion of command names, line editing features, and access to the
-history list.
-
-
-
-
-/* fileman.c -- A tiny application which demonstrates how to use the
- GNU Readline library. This application interactively allows users
- to manipulate files and their modes. */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-
-#include <readline/readline.h>
-#include <readline/history.h>
-
-extern char *getwd ();
-extern char *xmalloc ();
-
-/* The names of functions that actually do the manipulation. */
-int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
-int com_delete (), com_help (), com_cd (), com_quit ();
-
-/* A structure which contains information on the commands this program
- can understand. */
-
-typedef struct {
- char *name; /* User printable name of the function. */
- Function *func; /* Function to call to do the job. */
- char *doc; /* Documentation for this function. */
-} COMMAND;
-
-COMMAND commands[] = {
- { "cd", com_cd, "Change to directory DIR" },
- { "delete", com_delete, "Delete FILE" },
- { "help", com_help, "Display this text" },
- { "?", com_help, "Synonym for `help'" },
- { "list", com_list, "List files in DIR" },
- { "ls", com_list, "Synonym for `list'" },
- { "pwd", com_pwd, "Print the current working directory" },
- { "quit", com_quit, "Quit using Fileman" },
- { "rename", com_rename, "Rename FILE to NEWNAME" },
- { "stat", com_stat, "Print out statistics on FILE" },
- { "view", com_view, "View the contents of FILE" },
- { (char *)NULL, (Function *)NULL, (char *)NULL }
-};
-
-/* Forward declarations. */
-char *stripwhite ();
-COMMAND *find_command ();
-
-/* The name of this program, as taken from argv[0]. */
-char *progname;
-
-/* When non-zero, this global means the user is done using this program. */
-int done;
-
-char *
-dupstr (s)
- int s;
-{
- char *r;
-
- r = xmalloc (strlen (s) + 1);
- strcpy (r, s);
- return (r);
-}
-
-main (argc, argv)
- int argc;
- char **argv;
-{
- char *line, *s;
-
- progname = argv[0];
-
- initialize_readline (); /* Bind our completer. */
-
- /* Loop reading and executing lines until the user quits. */
- for ( ; done == 0; )
- {
- line = readline ("FileMan: ");
-
- if (!line)
- break;
-
- /* Remove leading and trailing whitespace from the line.
- Then, if there is anything left, add it to the history list
- and execute it. */
- s = stripwhite (line);
-
- if (*s)
- {
- add_history (s);
- execute_line (s);
- }
-
- free (line);
- }
- exit (0);
-}
-
-/* Execute a command line. */
-int
-execute_line (line)
- char *line;
-{
- register int i;
- COMMAND *command;
- char *word;
-
- /* Isolate the command word. */
- i = 0;
- while (line[i] && whitespace (line[i]))
- i++;
- word = line + i;
-
- while (line[i] && !whitespace (line[i]))
- i++;
-
- if (line[i])
- line[i++] = '\0';
-
- command = find_command (word);
-
- if (!command)
- {
- fprintf (stderr, "%s: No such command for FileMan.\n", word);
- return (-1);
- }
-
- /* Get argument to command, if any. */
- while (whitespace (line[i]))
- i++;
-
- word = line + i;
-
- /* Call the function. */
- return ((*(command->func)) (word));
-}
-
-/* Look up NAME as the name of a command, and return a pointer to that
- command. Return a NULL pointer if NAME isn't a command name. */
-COMMAND *
-find_command (name)
- char *name;
-{
- register int i;
-
- for (i = 0; commands[i].name; i++)
- if (strcmp (name, commands[i].name) == 0)
- return (&commands[i]);
-
- return ((COMMAND *)NULL);
-}
-
-/* Strip whitespace from the start and end of STRING. Return a pointer
- into STRING. */
-char *
-stripwhite (string)
- char *string;
-{
- register char *s, *t;
-
- for (s = string; whitespace (*s); s++)
- ;
-
- if (*s == 0)
- return (s);
-
- t = s + strlen (s) - 1;
- while (t > s && whitespace (*t))
- t--;
- *++t = '\0';
-
- return s;
-}
-
-/* **************************************************************** */
-/* */
-/* Interface to Readline Completion */
-/* */
-/* **************************************************************** */
-
-char *command_generator ();
-char **fileman_completion ();
-
-/* Tell the GNU Readline library how to complete. We want to try to complete
- on command names if this is the first word in the line, or on filenames
- if not. */
-initialize_readline ()
-{
- /* Allow conditional parsing of the ~/.inputrc file. */
- rl_readline_name = "FileMan";
-
- /* Tell the completer that we want a crack first. */
- rl_attempted_completion_function = (CPPFunction *)fileman_completion;
-}
-
-/* Attempt to complete on the contents of TEXT. START and END bound the
- region of rl_line_buffer that contains the word to complete. TEXT is
- the word to complete. We can use the entire contents of rl_line_buffer
- in case we want to do some simple parsing. Return the array of matches,
- or NULL if there aren't any. */
-char **
-fileman_completion (text, start, end)
- char *text;
- int start, end;
-{
- char **matches;
-
- matches = (char **)NULL;
-
- /* If this word is at the start of the line, then it is a command
- to complete. Otherwise it is the name of a file in the current
- directory. */
- if (start == 0)
- matches = completion_matches (text, command_generator);
-
- return (matches);
-}
-
-/* Generator function for command completion. STATE lets us know whether
- to start from scratch; without any state (i.e. STATE == 0), then we
- start at the top of the list. */
-char *
-command_generator (text, state)
- char *text;
- int state;
-{
- static int list_index, len;
- char *name;
-
- /* If this is a new word to complete, initialize now. This includes
- saving the length of TEXT for efficiency, and initializing the index
- variable to 0. */
- if (!state)
- {
- list_index = 0;
- len = strlen (text);
- }
-
- /* Return the next name which partially matches from the command list. */
- while (name = commands[list_index].name)
- {
- list_index++;
-
- if (strncmp (name, text, len) == 0)
- return (dupstr(name));
- }
-
- /* If no names matched, then return NULL. */
- return ((char *)NULL);
-}
-
-/* **************************************************************** */
-/* */
-/* FileMan Commands */
-/* */
-/* **************************************************************** */
-
-/* String to pass to system (). This is for the LIST, VIEW and RENAME
- commands. */
-static char syscom[1024];
-
-/* List the file(s) named in arg. */
-com_list (arg)
- char *arg;
-{
- if (!arg)
- arg = "";
-
- sprintf (syscom, "ls -FClg %s", arg);
- return (system (syscom));
-}
-
-com_view (arg)
- char *arg;
-{
- if (!valid_argument ("view", arg))
- return 1;
-
- sprintf (syscom, "more %s", arg);
- return (system (syscom));
-}
-
-com_rename (arg)
- char *arg;
-{
- too_dangerous ("rename");
- return (1);
-}
-
-com_stat (arg)
- char *arg;
-{
- struct stat finfo;
-
- if (!valid_argument ("stat", arg))
- return (1);
-
- if (stat (arg, &finfo) == -1)
- {
- perror (arg);
- return (1);
- }
-
- printf ("Statistics for `%s':\n", arg);
-
- printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
- finfo.st_nlink,
- (finfo.st_nlink == 1) ? "" : "s",
- finfo.st_size,
- (finfo.st_size == 1) ? "" : "s");
- printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
- printf (" Last access at: %s", ctime (&finfo.st_atime));
- printf (" Last modified at: %s", ctime (&finfo.st_mtime));
- return (0);
-}
-
-com_delete (arg)
- char *arg;
-{
- too_dangerous ("delete");
- return (1);
-}
-
-/* Print out help for ARG, or for all of the commands if ARG is
- not present. */
-com_help (arg)
- char *arg;
-{
- register int i;
- int printed = 0;
-
- for (i = 0; commands[i].name; i++)
- {
- if (!*arg || (strcmp (arg, commands[i].name) == 0))
- {
- printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
- printed++;
- }
- }
-
- if (!printed)
- {
- printf ("No commands match `%s'. Possibilties are:\n", arg);
-
- for (i = 0; commands[i].name; i++)
- {
- /* Print in six columns. */
- if (printed == 6)
- {
- printed = 0;
- printf ("\n");
- }
-
- printf ("%s\t", commands[i].name);
- printed++;
- }
-
- if (printed)
- printf ("\n");
- }
- return (0);
-}
-
-/* Change to the directory ARG. */
-com_cd (arg)
- char *arg;
-{
- if (chdir (arg) == -1)
- {
- perror (arg);
- return 1;
- }
-
- com_pwd ("");
- return (0);
-}
-
-/* Print out the current working directory. */
-com_pwd (ignore)
- char *ignore;
-{
- char dir[1024], *s;
-
- s = getwd (dir);
- if (s == 0)
- {
- printf ("Error getting pwd: %s\n", dir);
- return 1;
- }
-
- printf ("Current directory is %s\n", dir);
- return 0;
-}
-
-/* The user wishes to quit using this program. Just set DONE non-zero. */
-com_quit (arg)
- char *arg;
-{
- done = 1;
- return (0);
-}
-
-/* Function which tells you that you can't do this. */
-too_dangerous (caller)
- char *caller;
-{
- fprintf (stderr,
- "%s: Too dangerous for me to distribute. Write it yourself.\n",
- caller);
-}
-
-/* Return non-zero if ARG is a valid argument for CALLER, else print
- an error message and return zero. */
-int
-valid_argument (caller, arg)
- char *caller, *arg;
-{
- if (!arg || !*arg)
- {
- fprintf (stderr, "%s: Argument required.\n", caller);
- return (0);
- }
-
- return (1);
-}
-
-
-
-
-
-
-
i
-
-interaction, readline
-
-r
-
-readline, function
-
-
-
-
-
-
-
-
(
-
-(int
-
-a
-
-abort (C-g)
-accept-line (Newline, Return)
-alphabetic
-
-b
-
-backward-char (C-b)
-backward-delete-char (Rubout)
-backward-kill-line (C-x Rubout)
-backward-kill-word (M-DEL)
-backward-word (M-b)
-beginning-of-history (M-<)
-beginning-of-line (C-a)
-bell-style
-
-c
-
-call-last-kbd-macro (C-x e)
-capitalize-word (M-c)
-character-search (C-])
-character-search-backward (M-C-])
-clear-screen (C-l)
-comment-begin
-complete (TAB)
-completion-query-items
-completion_matches
-convert-meta
-copy-backward-word ()
-copy-forward-word ()
-copy-region-as-kill ()
-
-d
-
-delete-char (C-d)
-delete-horizontal-space ()
-digit-argument (M-0, M-1, ... M--)
-digit_p
-digit_value
-ding
-disable-completion
-do-uppercase-version (M-a, M-b, M-x, ...)
-downcase-word (M-l)
-dump-functions ()
-dump-macros ()
-dump-variables ()
-
-e
-
-editing-mode
-enable-keypad
-end-kbd-macro (C-x ))
-end-of-history (M->)
-end-of-line (C-e)
-exchange-point-and-mark (C-x C-x)
-expand-tilde
-
-f
-
-filename_completion_function
-forward-char (C-f)
-forward-search-history (C-s)
-forward-word (M-f)
-free_undo_list
-
-h
-
-history-search-backward ()
-history-search-forward ()
-horizontal-scroll-mode
-
-i
-
-input-meta
-insert-comment (M-#)
-insert-completions (M-*)
-
-k
-
-keymap
-kill-line (C-k)
-kill-region ()
-kill-whole-line ()
-kill-word (M-d)
-
-l
-
-lowercase_p
-
-m
-
-mark-modified-lines
-menu-complete ()
-meta-flag
-
-n
-
-next-history (C-n)
-non-incremental-forward-search-history (M-n)
-non-incremental-reverse-search-history (M-p)
-numeric
-
-o
-
-output-meta
-
-p
-
-possible-completions (M-?)
-prefix-meta (ESC)
-previous-history (C-p)
-
-q
-
-quoted-insert (C-q, C-v)
-
-r
-
-re-read-init-file (C-x C-r)
-readline
-redraw-current-line ()
-reverse-search-history (C-r)
-revert-line (M-r)
-rl_add_defun
-rl_add_undo
-rl_attempted_completion_function
-rl_basic_quote_characters
-rl_basic_word_break_characters
-rl_begin_undo_group
-rl_bind_key
-rl_bind_key_in_map
-rl_binding_keymap
-rl_callback_handler_install
-rl_callback_handler_remove
-rl_callback_read_char
-rl_char_is_quoted_p
-rl_clear_message
-rl_complete, rl_complete
-rl_complete_internal
-rl_completer_quote_characters
-rl_completer_word_break_characters
-rl_completion_append_character
-rl_completion_entry_function, rl_completion_entry_function
-rl_completion_query_items
-rl_copy_keymap
-rl_copy_text
-rl_delete_text
-rl_directory_completion_hook
-rl_discard_keymap
-rl_do_undo
-rl_done
-rl_end
-rl_end_undo_group
-rl_event_hook
-rl_executing_keymap
-rl_filename_completion_desired
-rl_filename_dequoting_function
-rl_filename_quote_characters
-rl_filename_quoting_desired
-rl_filename_quoting_function
-rl_forced_update_display
-rl_function_dumper
-rl_function_of_keyseq
-rl_generic_bind
-rl_get_keymap
-rl_get_keymap_by_name
-rl_get_keymap_name
-rl_getc
-rl_getc_function
-rl_ignore_completion_duplicates
-rl_ignore_some_completions_function
-rl_inhibit_completion
-rl_initialize
-rl_insert_completions
-rl_insert_text
-rl_instream
-rl_invoking_keyseqs
-rl_invoking_keyseqs_in_map
-rl_kill_text
-rl_library_version
-rl_line_buffer
-rl_list_funmap_names
-rl_make_bare_keymap
-rl_make_keymap
-rl_mark
-rl_message
-rl_modifying
-rl_named_function
-rl_on_new_line
-rl_outstream
-rl_parse_and_bind
-rl_pending_input
-rl_point
-rl_possible_completions
-rl_prompt
-rl_read_init_file
-rl_read_key
-rl_readline_name
-rl_redisplay
-rl_redisplay_function
-rl_reset_line_state
-rl_reset_terminal
-rl_set_keymap
-rl_special_prefixes
-rl_startup_hook
-rl_stuff_char
-rl_terminal_name
-rl_unbind_command_in_map
-rl_unbind_function_in_map
-rl_unbind_key
-rl_unbind_key_in_map
-
-s
-
-self-insert (a, b, A, 1, !, ...)
-set-mark (C-@)
-show-all-if-ambiguous
-start-kbd-macro (C-x ()
-
-t
-
-tab-insert (M-TAB)
-tilde-expand (M-~)
-to_lower
-to_upper
-transpose-chars (C-t)
-transpose-words (M-t)
-
-u
-
-undo (C-_, C-x C-u)
-universal-argument ()
-unix-line-discard (C-u)
-unix-word-rubout (C-w)
-upcase-word (M-u)
-uppercase_p
-username_completion_function
-
-v
-
-visible-stats
-
-y
-
-yank (C-y)
-yank-last-arg (M-., M-_)
-yank-nth-arg (M-C-y)
-yank-pop (M-y)
-
-
-
-
-This document was generated on 2 April 1998 using the
-texi2html
-translator version 1.51.
-
-
diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps
deleted file mode 100644
index ef8e8e9a705..00000000000
--- a/readline/doc/readline.ps
+++ /dev/null
@@ -1,4946 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
-%%Title: readline.dvi
-%%Pages: 54
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 596 842
-%%DocumentPaperSizes: A4
-%%EndComments
-%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi
-%DVIPSParameters: dpi=300, comments removed
-%DVIPSSource: TeX output 1998.04.02:1444
-%%BeginProcSet: tex.pro
-/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
-mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
-ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
-isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
-hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
-TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
-forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
-/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
-/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
-/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
-string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
-/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
-N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
-if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
-cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
-0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
-add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
-/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
-known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
-/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
-65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
-0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
-{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
-getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
-ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
-RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
-false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
-round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
-rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
-{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
-B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
-4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
-p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
-a}B /bos{/SS save N}B /eos{SS restore}B end
-%%EndProcSet
-TeXDict begin 39158280 55380996 1000 300 300 (readline.dvi)
-@start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1
-47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46
-D E /Fc 1 59 df<60F0F06004047D830B>58 D E /Fd 53 127
-df<60F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600417789614>33
-D<071C00071C00071C00071C00071C00FFFF80FFFF807FFF800E38000E38000E38000E38
-000E38000E38000E38007FFF80FFFF80FFFF801C70001C70001C70001C70001C70001117
-7F9614>35 D<0180038006000C001C0018003800700070007000E000E000E000E000E000
-E000E000E000E000700070007000380018001C000C00060003800180091D799914>40
-D<80C0603038181C0E0E0E0707070707070707070E0E0E1C18383060C080081D7C9914>
-I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E638C0380038003800F107E
-9214>I<70F8FCFC7C0C1830E0C0060A798414>44 DI<70F8
-F8F8700505798414>I<07C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00E
-E00EE00EE00E701C701C383838381C700FE007C00F177E9614>48
-D<0300030007000F003F00F7004700070007000700070007000700070007000700070007
-000700070007007FF07FF00C177C9614>I<0006001E003E00F801F003C00F801F003C00
-F800F000F8003C001F000F8003C001F000F8003E001E00060F157E9514>60
-D62 D<1FE03FF8701CE00EE00E400E003C007000E001C003
-800380038003800300000000000000000003000780078003000F177E9614>I<01E007F0
-0E38181C38FC71FC731E771EEE0EEE0EEE0EEE0EEE0EEE0EEE0E771C731871F038E01806
-0E1E07F801F00F177E9614>I<01C00003E00003E0000360000360000770000770000770
-000770000630000E38000E38000E38000E38001C1C001FFC001FFC001C1C001C1C00380E
-00380E00FE3F80FE3F8011177F9614>II<01F1
-8007FF800E1F801C0780380780700380700380700380E00000E00000E00000E00000E000
-00E00000E000007003807003807003803807001C07000E0E0007FC0001F00011177F9614
->III76
-DII82 D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE0
-0FF001F8001C001E000E600EE00EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF
-80E1C380E1C380E1C380E1C38001C00001C00001C00001C00001C00001C00001C00001C0
-0001C00001C00001C00001C00001C00001C00001C0000FF8000FF80011177F9614>I93
-D95 D<1FC0007FF000707800201800001C00001C0007FC00
-1FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>97
-DI<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03
-F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C
-3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001F
-EFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000
-380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE070007
-000700070007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001F
-FF80383B80301800701C00701C00701C003018003838003FF00037C0007000007000003F
-F8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011
-197F8F14>II<06000F000F0006000000000000000000FF00FF00070007000700
-070007000700070007000700070007000700FFF8FFF80D187C9714>I107
-DI
-II<07C01FF03C78701C701CE00EE00EE00E
-E00EE00EE00E701C783C3C781FF007C00F107E8F14>II<03E7000FF700
-1C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F001C3F00
-0FF70007C700000700000700000700000700000700000700003FE0003FE013187F8F14>
-II<0FD83FF86038C038C038F0007F803FF0
-07F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFF
-FC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<
-FC3F00FC3F001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
-1C07001C1F000FFFE003E7E01310808F14>III<7E3F007E3F001E3C000E7800077000
-07E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F
-8F14>II<3FFF7FFF700E701C7038007000E001C0038007000E001C0738
-077007FFFFFFFF10107F8F14>I<1C103F38E7E041C00D047D9614>126
-D E /Fe 2 121 df<7070F06004047D830B>46 D<3FC7E007838007020003840003C800
-01D80000F00000E00000F00001F000013800023800041C00081E00381E00FC3FC013107F
-8F14>120 D E /Ff 38 123 df<00FE000381000601800E03801C01001C00001C00001C
-00001C00001C0000FFFF801C03801C03801C03801C03801C03801C03801C03801C03801C
-03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
-D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
-801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
-801C0380FF9FF0141A809915>I<60F0F07010101020204040040B7D830B>44
-DI<03000700FF00070007000700070007000700070007000700
-070007000700070007000700070007000700070007007FF80D187D9713>49
-D<0F80106020304038803CC01CE01C401C003C003800380070006000C001800100020004
-040804100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C
-001C0038007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F97
-13>I<001800180038007800F800B8013802380238043808381838103820384038C038FF
-FF00380038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000
-200020002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E18
-7E9713>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E0
-07E007600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008
-80108010002000400040008001800100030003000700060006000E000E000E000E000E00
-040010197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF830
-7C601E600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C
-600EE006E006E007E007E0076007700F3017182707C700070006000E000C700C70186030
-30600F8010187F9713>I<1FC000387000383800101C00001C00001C0003FC001E1C0038
-1C00701C00E01C00E01C80E01C80E03C80705F801F8F0011107F8F13>97
-DI<07F81C1C381C70087000E000E000E000E000E000E000
-7000700438081C1807E00E107F8F11>I<003F0000070000070000070000070000070000
-070000070000070000070003E7000C1700180F00300700700700E00700E00700E00700E0
-0700E00700E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C303018
-7018600CE00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<01F007
-180E381C101C001C001C001C001C001C00FFC01C001C001C001C001C001C001C001C001C
-001C001C001C001C001C00FF800D1A80990C>I<0FCF0018718030300070380070380070
-38007038003030001860002FC0006000006000007000003FF0003FFC001FFE00600F00C0
-0300C00300C00300C00300600600381C0007E00011187F8F13>II<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A>I<
-FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FC01C0F00
-1C0C001C18001C20001C40001CE0001DE0001E70001C78001C38001C1C001C1E001C0F00
-1C0F80FF9FE0131A809914>107 DI
-II<07E01C38300C700E6006E007E007E007
-E007E007E0076006700E381C1C3807E010107F8F13>II<03E1000C1300180B00
-300F00700700E00700E00700E00700E00700E00700E00700700700700700380F001C3700
-07C700000700000700000700000700000700000700003FE013177F8F14>II<1F20
-60E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>
-I<0800080008000800180018003800FFC038003800380038003800380038003800382038
-203820382018201C4007800B177F960F>I
-IIIIII E /Fg 2 42 df<00E001C00380078007000F001E001E001C003C00
-3C0038007800780078007000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000700078007800780038003C003C001C001E001E000F0007000780038001C000E0
-0B2E7CA112>40 DI
-E /Fh 28 123 df<000FF83F00007FFDFFC001FC1FE3E003F03FC7E007E03FC7E00FC03F
-87E00FC03F83C00FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80
-00FFFFFFFC00FFFFFFFC000FC01F80000FC01F80000FC01F80000FC01F80000FC01F8000
-0FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000F
-C01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80007FF8FFF8007FF8
-FFF80023237FA221>11 D<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000F
-C03F000FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800F
-C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800F
-C01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F807F
-F8FFF07FF8FFF01C237FA220>I<00180030006000C001C00380078007000F001E001E00
-3E003C003C007C007C007C007800F800F800F800F800F800F800F800F800F800F800F800
-F800F80078007C007C007C003C003C003E001E001E000F0007000780038001C000C00060
-003000180D317BA416>40 D<07FE00001FFF80003F07E0003F03F0003F01F0003F01F800
-1E01F8000001F8000001F800003FF80003FDF8001F81F8003E01F8007C01F800F801F800
-F801F800F801F800F801F8007C02F8007E0CF8001FF87F8007E03F8019167E951C>97
-DI<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC00
-00FC0000FC0000FC00007C00007E00007E00003E00181F00300FC06007FFC000FF001516
-7E9519>I<0001FF000001FF0000003F0000003F0000003F0000003F0000003F0000003F
-0000003F0000003F0000003F0000003F0000003F0000FE3F0007FFBF000FC1FF001F007F
-003E003F007E003F007C003F007C003F00FC003F00FC003F00FC003F00FC003F00FC003F
-00FC003F00FC003F007C003F007E003F003E003F001F007F000F81FF0007FF3FE001FC3F
-E01B237EA220>I<00FE0007FF800F83C01E01E03E00F07E00F07C00F87C0078FC0078FF
-FFF8FFFFF8FC0000FC0000FC00007C00007C00003E00183E00181F00300F80E003FFC000
-FF0015167E951A>I<001F8000FFE001F1F003E3F007E3F00FC3F00FC1E00FC0000FC000
-0FC0000FC0000FC0000FC000FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC000
-0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000
-7FFC007FFC0014237EA212>I<00FE0F8003FF9FC00F83E3C01F01F3C01E00F0003E00F8
-003E00F8003E00F8003E00F8003E00F8001E00F0001F01F0000F83E0000BFF800008FE00
-0018000000180000001C0000001FFFE0001FFFFC000FFFFF0007FFFF001FFFFF807C001F
-C078000FC0F80007C0F80007C0F80007C07C000F803E001F001F807E000FFFFC0001FFE0
-001A217F951D>II<1E003F007F807F807F807F803F001E00000000000000000000
-000000FF80FF801F801F801F801F801F801F801F801F801F801F801F801F801F801F801F
-801F801F801F80FFF0FFF00C247EA30F>I107 DIII<00FF0007FFE00F81F01F00F83E007C7C003E7C003E7C003EFC00
-3FFC003FFC003FFC003FFC003FFC003FFC003F7C003E7E007E3E007C1F00F80F81F007FF
-E000FF0018167E951D>II<00FE030007FF07000FC1CF001F00DF003F007F007E003F007E003F007C003F00FC00
-3F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F007E003F007E003F003E00
-7F001F00FF000FC1FF0007FF3F0000FC3F0000003F0000003F0000003F0000003F000000
-3F0000003F0000003F0000003F000001FFE00001FFE01B207E951E>II<07F9801FFF80
-380780700380F00180F00180F80000FF0000FFF8007FFE003FFF001FFF8007FF80003FC0
-C007C0C003C0E003C0E003C0F00380FC0F00EFFE00C3F80012167E9517>I<0180000180
-000180000180000380000380000780000780000F80003F8000FFFF00FFFF001F80001F80
-001F80001F80001F80001F80001F80001F80001F80001F80001F80001F81801F81801F81
-801F81801F81800F83000FC30007FE0001F80011207F9F16>III<
-FFF3FF83FCFFF3FF83FC1F807C00E00FC07C00C00FC03E00C00FE03E01C007E07F018007
-E07F018003F07F030003F0CF830003F8CF870001F9CFC60001F987C60000FD87EC0000FF
-03EC0000FF03FC00007F03F800007E01F800003E01F000003C00F000003C00F000001800
-600026167F9529>III<7FFFF07FFFF07C07E0700FC060
-1FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0701F
-80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E /Fi
-29 122 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC0001
-F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E00013157D99
-1A>42 D<007C3801FF3807FFF80F83F81E00F81C00783800783800387000387000387000
-00E00000E00000E00000E00000E00000E00000E00000E000007000007000387000383800
-383800381C00701E00F00F83E007FFC001FF80007C00151E7E9D1A>67
-D69 D<7FFFFCFFFFFC7FFFFC
-0E001C0E001C0E001C0E001C0E001C0E00000E00000E03800E03800E03800FFF800FFF80
-0FFF800E03800E03800E03800E00000E00000E00000E00000E00000E00000E00000E0000
-7FE000FFE0007FE000161E7F9D1A>I73 D<7F03F8FF87FC7F03F81C01E01C03C01C03801C07001C0F001C1E001C1C00
-1C38001C78001CF0001CF8001DF8001FDC001F9C001F0E001E0F001E07001C07801C0380
-1C01C01C01C01C00E01C00E01C00707F00FCFF81FE7F00FC171E7F9D1A>75
-D<7FE000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00
-000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E001C0E00
-1C0E001C0E001C0E001C7FFFFCFFFFFC7FFFFC161E7F9D1A>I80 D86 D<7FFFC0FFFFE0FFFFE07FFFC013047D7E1A>95 D<1FF0003FFC007FFE0078
-0F00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380E0
-0380700780780F803FFFFC1FFDFC07F0FC16157D941A>97 DI<00FF8003FFC00FFFE01F01E03C00C078000070000070
-0000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003
-FFC000FE0014157D941A>I<001FC0001FC0001FC00001C00001C00001C00001C00001C0
-0001C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0
-E001C0E001C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>
-I<01F80007FF000FFF801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFF
-F0E000007000007000007800703C00701F01F00FFFE003FF8000FE0014157D941A>I<00
-07E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000
-E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
-E00000E00000E0003FFF807FFFC03FFF80151E7F9D1A>I104 D<01C00003E00003E00003E00001C000000000000000
-0000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E00000E000
-00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80
-121F7C9E1A>I108
-D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C
-001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
-007F1F1F00FF9F9F807F1F1F00191580941A>II<01F00007FC001FFF003E0F803C07807803C0
-7001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F80
-1FFF0007FC0001F00013157D941A>II<7F81F8FF8FFC7F9FFE03FE1E03F80C03E00003E00003C00003
-80000380000380000380000380000380000380000380000380000380007FFF00FFFF007F
-FF0017157F941A>114 D<0180000380000380000380000380000380000380007FFFE0FF
-FFE0FFFFE003800003800003800003800003800003800003800003800003800003800003
-807003807003807003807001C1E001FFE000FF80003F00141C7F9B1A>116
-DI<7F
-C7FCFFC7FE7FC7FC0E00E00E00E00E00E00701C00701C00701C003838003838003838001
-C70001C70001C70000EE0000EE0000EE00007C00007C0000380017157F941A>I<7FC7F8
-7FCFFC7FC7F80703C003838003C70001EF0000FE00007C00007800003800007C0000EE00
-01EE0001C7000383800783C00701C07FC7FCFFC7FE7FC7FC17157F941A>120
-D<7FC7FCFFC7FE7FC7FC0E00E00E00E00700E00701C00781C00381C003838001C38001C3
-8001C70000E70000E70000E600006600006E00003C00003C00003C000038000038000038
-0000780000700030700078E00071E0007FC0003F80001E000017207F941A>I
-E /Fj 1 59 df<70F8F8F87005057C840D>58 D E /Fk 6 102 df<06000F001F800F80
-0F800380070007000F000E003C007C00F0006000090E769B18>39
-D<7FFFC0FFFFE0FFFFE07FFFC013047C8F18>45 D<003E1800FFB801FFF807C1F8078078
-0E00781E00781C0070380030380000700000700000700000E00000E00000E00000E00000
-E00000E00000E000C07001C07001C07003C03807803C0F001FFE000FFC0003F000151C7C
-9B18>67 D<07E01F800FE03FC007E03F8003B02E0003B06E0003B06E0003B0CE000730DC
-000731DC0007319C0007319C0007339C0007331C000E3338000E3738000E3638000E3E38
-000E3C38000E1838001C0070001C0070001C0070001C0070001C0070001C007000FE03F8
-00FF03FC00FE03F8001A1C7F9B18>77 D<6000F000F000F000F8007800780078007C003C
-003C003C003E001E001E001E001F000F000F000F000F8007800780078007C003C003C003
-C003C003E001E001E001E001F000F000600C24789F18>92 D<00F80007FE000FFF001F07
-803C03807801C07001C0E001C0E001C0FFFFC0FFFFC0FFFF80E00000E00000E003007007
-80780F003FFE001FFC0007F00012147B9318>101 D E /Fl 52 122
-df<3C7EFFFFFFFF7E3C08087C8711>46 D<007F800003FFF00007E1F8000F807C001F00
-3E003F003F003E001F007E001F807E001F807E001F807E001F80FE001FC0FE001FC0FE00
-1FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE00
-1FC0FE001FC07E001F807E001F807E001F807E001F803F003F003F003F001F003E000F80
-7C0007E1F80003FFF000007F80001A237EA21F>48 D<001C00003C0000FC00FFFC00FFFC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC007FFFFC7FFFFC16237CA21F>I<01FF0007FFC01E07F038
-03F86001FC7C00FEFE00FEFE00FFFE007FFE007F7C007F3800FF0000FF0000FE0000FE00
-01FC0001F80003F00007E0000780000F00001E00003C0000700000E00301C00303800707
-00060600060FFFFE1FFFFE3FFFFE7FFFFCFFFFFCFFFFFC18237DA21F>I<01FF0007FFE0
-1E03F03801F83C01FC7E00FE7E00FE7E00FE3E00FE1C01FE0001FC0001FC0003F80007F0
-000FC001FF0001FF000007E00001F00001F80000FC0000FE0000FF0000FF1000FF7C00FF
-FE00FFFE00FFFE00FEFE00FE7C01FC7001F83E07F00FFFC001FF0018237DA21F>I<0000
-380000007800000078000000F8000001F8000003F8000007F8000006F800000CF800001C
-F8000038F8000030F8000060F80000E0F80001C0F8000180F8000300F8000700F8000E00
-F8001C00F8001800F8003000F8007000F800E000F800FFFFFFC0FFFFFFC00001F8000001
-F8000001F8000001F8000001F8000001F8000001F800007FFFC0007FFFC01A237EA21F>
-I<18000C1F007C1FFFF81FFFF01FFFE01FFFC01FFF801FFC001800001800001800001800
-0018000018FF001BFFE01F03F01C00F80800FC00007E00007E00007E00007F00007F7800
-7FFC007FFC007FFC007FFC007EF8007E6000FC7000FC3801F81E07E007FFC001FE001823
-7DA21F>I<001FC0007FF001F03803E00C07803E0F807E1F007E3F007E3F007E7E003C7E
-00007E00007E0000FE3FC0FE7FF0FE80F8FF80FCFF007CFF007EFE007EFE007FFE007FFE
-007FFE007F7E007F7E007F7E007F7E007F3E007E3F007E1F007C0F80F807C1F003FFC000
-7F0018237DA21F>I<300000003C0000003FFFFFC03FFFFFC03FFFFF807FFFFF007FFFFE
-007FFFFC006000180060001800E0003000C0006000C000C0000001800000018000000300
-0000060000000E0000000E0000001C0000001C0000003C0000003C000000780000007800
-0000F8000000F8000000F8000000F8000001F8000001F8000001F8000001F8000001F800
-0001F8000000F00000006000001A257DA41F>I<00FF8003FFE00F01F81C007C38003C38
-001E78001E78001E7C001E7E001E7F803C7FE03C3FF8781FFDF01FFFC00FFFC003FFE003
-FFF80FFFFC1E1FFC3C07FE7803FE7800FFF0003FF0001FF0000FF0000FF0000FF0000E78
-000E78001C3C00381F80F007FFE001FF0018237DA21F>I<00FF0003FFC00F83E01F00F0
-3F00F87E007C7E007C7E007EFE007EFE007EFE007EFE007FFE007FFE007FFE007F7E007F
-7E00FF3E00FF3F01FF1F017F0FFE7F03FC7F00007F00007E00007E3C007E7E00FC7E00FC
-7E00F87E00F07C01F03003E01C0F800FFF0003F80018237DA21F>I<00001C0000000000
-1C00000000003E00000000003E00000000003E00000000007F00000000007F0000000000
-FF8000000000FF8000000000FF80000000019FC0000000019FC0000000031FE000000003
-0FE0000000070FF00000000607F00000000607F00000000C07F80000000C03F80000001C
-03FC0000001801FC0000001801FC0000003000FE0000003000FE0000007FFFFF0000007F
-FFFF000000E0007F800000C0003F800000C0003F80000180003FC0000180001FC0000380
-001FE0000300000FE0000300000FE00007000007F000FFF000FFFF80FFF000FFFF802925
-7EA42E>65 DI<0000FF8008000FFFF018003FC03C7800FE00
-06F801F80003F803F00001F807E00000F80FC00000781FC00000783F800000383F800000
-387F800000187F000000187F00000018FF00000000FF00000000FF00000000FF00000000
-FF00000000FF00000000FF00000000FF00000000FF000000007F000000007F000000187F
-800000183F800000183F800000181FC00000300FC000003007E000006003F00000C001F8
-00018000FE000700003FC01E00000FFFF8000000FFC00025257DA42C>I69 DI72
-DI75 DI<
-FFF8000000FFF8FFFC000001FFF803FC000001FE00037E0000037E00037E0000037E0003
-7E0000037E00033F0000067E00033F0000067E00031F80000C7E00031F80000C7E00030F
-C000187E00030FC000187E000307E000307E000307E000307E000307E000307E000303F0
-00607E000303F000607E000301F800C07E000301F800C07E000300FC01807E000300FC01
-807E0003007E03007E0003007E03007E0003007E03007E0003003F06007E0003003F0600
-7E0003001F8C007E0003001F8C007E0003000FD8007E0003000FD8007E00030007F0007E
-00030007F0007E00030007F0007E00030003E0007E00078003E0007E00FFFC01C01FFFF8
-FFFC01C01FFFF835257EA43A>II82 D<00FF008007FFE3800F80F7801E001F803C000F807800078078000380F80003
-80F8000180F8000180FC000180FC000000FF0000007FE000007FFE00003FFFE0003FFFF8
-001FFFFE0007FFFF0003FFFF80007FFF800003FFC000003FC000000FE0000007E0000007
-E0C00003E0C00003E0C00003E0C00003C0E00003C0F00007C0F8000780FC000F00FFC03E
-00E3FFF800803FE0001B257DA422>I<7FFFFFFFF87FFFFFFFF87E00FE01F87800FE0078
-7000FE00386000FE00186000FE0018E000FE001CE000FE000CC000FE000CC000FE000CC0
-00FE000CC000FE000C0000FE00000000FE00000000FE00000000FE00000000FE00000000
-FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
-00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
-000000FE000000FFFFFE0000FFFFFE0026247EA32B>II<
-FFFF8001FFE0FFFF8001FFE007F800001C0003F80000180003F80000180003FC00003800
-01FC0000300001FE0000700000FE0000600000FF00006000007F0000C000007F8000C000
-003F80018000003F80018000003FC0038000001FC0030000001FE0070000000FE0060000
-000FF00600000007F00C00000007F00C00000003F81800000003F81800000003FC380000
-0001FC3000000001FE7000000000FE6000000000FF60000000007FC0000000007FC00000
-00003F80000000003F80000000003F80000000001F00000000001F00000000000E000000
-00000E0000002B257FA42E>II89 D<07FF00001FFFE0003E03F0003F00F8003F00FC003F007E001E007E000000
-7E0000007E0000007E00001FFE0003FE7E000FC07E001F007E003E007E007E007E00FC00
-7E00FC007E00FC007E00FC00BE007E01BE003F073E001FFE1FE007F00FE01B187E971E>
-97 DI<007FE003FFF807C07C1F80FC1F00FC3F00FC
-7E00787E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00007E00007F0000
-3F000C1F800C1FC01807E07003FFE0007F0016187E971B>I<0000FFC00000FFC000000F
-C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000F
-C000000FC000000FC0007F0FC003FFCFC00FE0FFC01F803FC03F000FC03F000FC07E000F
-C07E000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000FC0FE000F
-C07E000FC07E000FC03F000FC03F001FC01F803FC00FC0EFC003FFCFFC00FE0FFC1E267E
-A522>I<007F0003FFC007C1F00F80F81F00F83F007C7E007C7E007EFE007EFE007EFFFF
-FEFFFFFEFE0000FE0000FE00007E00007E00007E00063F00061F000C0F801807E07003FF
-E0007F8017187E971C>I<001FC0007FF001F8F003E1F807E1F807C1F80FC0F00FC0000F
-C0000FC0000FC0000FC0000FC0000FC000FFFF00FFFF000FC0000FC0000FC0000FC0000F
-C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
-C0000FC0000FC0000FC000FFFE00FFFE0015267EA513>I<01FF07C007FFDFE00F83F1E0
-1F01F1E03E00F8007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC003E00F800
-1F01F0000F83E0000FFFC00011FF00003000000030000000380000003C0000003FFFE000
-1FFFFC001FFFFE000FFFFF001FFFFF803C003F8078000FC0F80007C0F80007C0F80007C0
-F80007C07C000F803E001F001F807E0007FFF80000FFC0001B247E971F>II<0F001F803FC03FC03FC03FC01F800F0000000000000000000000
-000000007FC07FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
-0FC00FC00FC00FC00FC00FC0FFF8FFF80D277EA611>I107 DIII<007F800003FFF00007C0F8001F807E003F003F
-003F003F007E001F807E001F80FE001FC0FE001FC0FE001FC0FE001FC0FE001FC0FE001F
-C0FE001FC0FE001FC07E001F807E001F803F003F003F003F001F807E000FC0FC0003FFF0
-00007F80001A187E971F>II114 D<07F8C01FFFC03C07C07001C0
-F000C0F000C0F000C0FC0000FF80007FFC007FFE003FFF800FFFC003FFC0001FE00003E0
-C001E0C001E0E001E0E001C0F003C0FC0780EFFF00C3FC0013187E9718>I<00C00000C0
-0000C00000C00001C00001C00001C00003C00007C0000FC0001FC000FFFFC0FFFFC00FC0
-000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
-600FC0600FC0600FC0600FC0600FC06007E0C007E1C001FF80007E0013237FA218>IIIIII
-E /Fm 28 122 df<0003E0001C1800381800703C00E03C00E03801C00001C00001C00001
-C00001C0000380007FFFF00380700380700380700380700700E00700E00700E00700E007
-00E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF0FF016207E9F
-19>12 D45 D<07FFFFF800F80078007800380078001800F00018
-00F0000800F0000800F0000800F0000800F0000801E0080001E0080001E0080001E01800
-01E0380001FFF80003C0300003C0100003C0100003C0100003C0100003C0000007800000
-07800000078000000780000007800000078000000F0000000F800000FFFC00001D1F7E9E
-1E>70 D<07FF803FE000F8001F000078000C00007800180000F000200000F000400000F0
-00800000F001000000F002000000F008000001E010000001E020000001E060000001E0F0
-000001E1F0000001E4F8000003C878000003D07C000003E03C000003C03E000003C01E00
-0003C01F000007800F000007800F80000780078000078007C000078003C000078003E000
-0F0001E0000F8003F000FFF00FFE00231F7E9E23>75 D<07F8000C0C001E06001E07001C
-070000070000070000070000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F0
-1E10F02E20784F401F878014147D9317>97 D<0700003F00000F00000700000700000E00
-000E00000E00000E00000E00000E00001C00001C7C001D83001E01801C01C01C00E03800
-E03800F03800F03800F03800F03800F07001E07001E07001C07003C0700380700700E80E
-00CC380083E00014207B9F19>I<00FE000383000E07801C0780380700380000780000F0
-0000F00000F00000F00000E00000E00000E00000F00000F001007002003804001C180007
-E00011147D9314>I<0000380001F8000078000038000038000070000070000070000070
-0000700000700000E000FCE00382E00601E01C01E03C00E03801C07801C0F001C0F001C0
-F001C0F001C0E00380E00380E00380E00380F00380700780380F001C378007C7E015207D
-9F19>I<00F800070E000E07001C0700380380780380700380F00380F00380FFFF80F000
-00E00000E00000E00000E00000F001007002003004001C180007E00011147D9314>I<00
-07C0001C600030F00060F000E0E000C00001C00001C00001C00001C00001C0000380003F
-FC000380000380000380000380000700000700000700000700000700000700000E00000E
-00000E00000E00000E00000E00001C00001E0000FFC00014207F9F0E>I<00000E003E11
-00E1A301C1C20381E00780E00701E00F01E00F01E00F01E00703C007038007870004FC00
-0800000800001800001C00000FFF000FFFC00FFFE01800F0300030600030C00030C00030
-C000306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E0
-0001C00001C00001C00001C00001C00001C000038000038F800390E003A0E003C0600380
-600780E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01
-C01C03801E03C0FF8FF014207E9F19>I<01C003E003E003C00180000000000000000000
-00000003801F800780038003800700070007000700070007000E000E000E000E000E000E
-001C001E00FF800B1F7F9E0C>I<00E00007E00001E00000E00000E00001C00001C00001
-C00001C00001C00001C0000380000381FC0380F00380C003818003810007040007080007
-1800073800077C00071C000E1C000E0E000E0E000E0F000E07000E07801C03801E07C0FF
-8FF016207E9F18>107 D<00E007E001E000E000E001C001C001C001C001C001C0038003
-8003800380038003800700070007000700070007000E000E000E000E000E000E001C001E
-00FF800B207F9F0C>I<0387C07C001F9861860007A072070003C0340300038038030007
-80780700070070070007007007000700700700070070070007007007000E00E00E000E00
-E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FFCFFC
-FFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E00700E00700E0
-0700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF8FF014147E
-9319>I<00FC000387000E01801C00C03800E03800E07000F0F000F0F000F0F000F0F000
-F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007E00014147D9317>I<00
-E3E00007EC380000F01C0000E00E0000E00F0001C0070001C0078001C0078001C0078001
-C0078001C0078003800F0003800F0003800E0003801E0003801C00038038000740700007
-61C000071F00000700000007000000070000000E0000000E0000000E0000000E0000001E
-000000FFC00000191D809319>I<00FC200382600702601E01E03C01E03801C07801C0F0
-01C0F001C0F001C0F001C0E00380E00380F00380F00380F00780700780380F001C370007
-C700000700000700000700000E00000E00000E00000E00001E0000FFC0131D7D9318>I<
-038E001FB38007C78003C7800383000780000700000700000700000700000700000E0000
-0E00000E00000E00000E00000E00001C00001E0000FFC00011147E9312>I<01F9060708
-031803180138023C001F001FF007FC01FE001F40074003400360036006F004C81887E010
-147F9312>I<0080010001000100030007000F001E00FFF80E000E000E000E001C001C00
-1C001C001C001C00380038103810381038103820382018400F800D1C7C9B12>I<1C0380
-FC1F803C07801C03801C0380380700380700380700380700380700380700700E00700E00
-700E00700E00701E00701E00703C00305E001F9F8011147B9319>III<1FF0FF03C07801C07001C04000E0C000E180007300007600003C00003C00001C0000
-2E00004E000087000107000203800403800C01C03C03E0FE07FC18147F9318>I<0FF83F
-8001E00E0001C00C0001C0080001E0080000E0100000E0300000E0200000E04000007040
-0000708000007080000071000000390000003A0000003E0000003C000000380000001800
-00001000000010000000200000002000000040000070C00000F0800000F1000000E60000
-0078000000191D809318>I E /Fn 38 124 df<60F0F070101020204040040A7D960A>
-39 D45 D<06000E00FE000E000E000E000E000E000E000E000E
-000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
-D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107
-0002038002038002038007FFC00401C00401C00800E00800E01800F03800F0FE03FE1717
-7F961A>65 DI<00FC100383300E00B01C0070380030300030700010600010E000
-10E00000E00000E00000E00000E00000E000106000107000103000203800201C00400E00
-8003830000FC0014177E9619>IIII76
-DII80
-D82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC001C000E
-0006800680068006C004E008D81087E00F177E9614>I<7FFFF860381840380840380880
-380480380480380400380000380000380000380000380000380000380000380000380000
-380000380000380000380000380000380003FF8016177F9619>II91
-D<3FC0706070302038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>97
-DI<003E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C
-3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007
-CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060007008301018
-3007C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C00
-1C001C001C001C001C001C001C001C001C007F800C1780960B>I<0F9E18E33060707070
-707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE010157F
-8D12>I<0300078007800300000000000000000000001F80038003800380038003800380
-0380038003800380038003800380038003804380E300E7007C00091D82960B>106
-DII<07C018303018600C600CE00EE00EE00EE00EE00E701C3018
-183007C00F0E7F8D12>111 DI<07C2001C2600381E00700E00600E00E00E00E00E00E00E00E00E0060
-0E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E00003F8011147F8D
-13>I
-I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<
-080008000800180018003800FFC038003800380038003800380038003840384038403840
-1C800F000A147F930E>II
-119 DII123 D E /Fo
-2 106 df<00800180030003000300060006000C000C000C001800180018003000300060
-0060006000C000C000600060006000300030001800180018000C000C000C000600060003
-00030003000180008009267D9B0F>104 DI
-E /Fp 8 89 df<0007F008003C0C1800E0033801C000B8078000780F0000380E0000381E
-0000183C0000183C0000087C0000087800000878000000F8000000F8000000F8000000F8
-000000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E
-0000780E0000780F0000780780007801C000B800E00118003C0E080007F00020217C9F27
->71 D73
-D78 D<001FE0000070380001C00E
-0003800700070003800F0003C01E0001E03C0000F03C0000F07C0000F87C0000F8780000
-78F800007CF800007CF800007CF800007CF800007CF800007CF800007CF800007CF80000
-7C780000787C0000F87C0000F83C0000F03E0001F01E0001E00F0003C007000380038007
-0001E01E0000703800001FE0001E217C9F26>II<03F0200C0C601803E03000E06000E0600060E00060E00020E00020E000
-20F00000F800007C00007F80003FFC001FFF0007FF8001FFC0000FE00003E00001E00000
-F0000070800070800070800070800070C00060C000E0E000C0F80180C6030081FC001421
-7C9F1C>83 D85
-D<7FF807FE000FE001F00007C001C00003E000800001E001000001F002000000F8060000
-0078040000003C080000003E180000001F100000000F200000000FC000000007C0000000
-03C000000001E000000003F000000006F80000000478000000087C000000183E00000010
-1E000000201F000000400F800000C0078000008003C000010003E000030001F000070000
-F0001F8001F800FFC007FF80211F7E9E25>88 D E /Fq 34 121
-df<0001C0000003C000000FC000007FC0001FFFC000FFFFC000FFBFC000E03FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC0007FFFFFF07FFF
-FFF07FFFFFF01C2E7AAD28>49 D<003FE00001FFFE0007FFFF800F80FFC01E003FE03800
-1FF07C000FF87E0007FCFF0007FCFF8007FEFF8007FEFF8003FEFF8003FE7F0003FE3E00
-07FE000007FE000007FC000007FC00000FF800000FF800000FF000001FE000001FC00000
-3F8000007F0000007E000000F8000001F0000003E0000007C000000F0000001E000E003C
-000E0038000E0070001E00E0001C01C0001C0300003C07FFFFFC0FFFFFFC1FFFFFFC3FFF
-FFFC7FFFFFF8FFFFFFF8FFFFFFF8FFFFFFF81F2E7CAD28>I<000003FF80018000003FFF
-F003800001FFFFFC07800007FF003F0F80001FF800079F80003FC00001FF8000FF800000
-FF8001FE0000007F8003FC0000003F8007FC0000001F8007F80000000F800FF00000000F
-801FF000000007801FF000000007803FE000000007803FE000000003807FE00000000380
-7FE000000003807FC000000000007FC00000000000FFC00000000000FFC00000000000FF
-C00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0
-0000000000FFC000000000007FC000000000007FC000000000007FE000000000007FE000
-000003803FE000000003803FE000000003801FF000000003801FF000000007800FF00000
-00070007F8000000070007FC0000000E0003FC0000001E0001FE0000001C0000FF800000
-7800003FC00000F000001FF80003E0000007FF003F80000001FFFFFE000000003FFFF800
-00000003FF80000031317CB03A>67 D69
-DI<000003FF00030000007FFFF007000001FFFFFC0F0000
-07FF007E1F00001FF0000FBF00007FC00003FF0000FF800001FF0001FE0000007F0003FC
-0000007F0007FC0000003F000FF80000001F000FF00000001F001FF00000000F001FF000
-00000F003FE000000007003FE000000007007FE000000007007FE000000007007FC00000
-000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000
-0000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000000
-00FFC00007FFFFF87FC00007FFFFF87FE00007FFFFF87FE0000001FF003FE0000001FF00
-3FE0000001FF001FF0000001FF001FF0000001FF000FF0000001FF000FF8000001FF0007
-FC000001FF0003FC000001FF0001FE000001FF0000FF800001FF00007FC00003FF00001F
-F800077F000007FF003E3F000001FFFFFC1F0000007FFFF00F00000003FF80030035317C
-B03F>I73
-D76 D78 D80
-D82 D<7FFFFFFFFFFF007FFFFFFFFFFF007FFFFFFFFFFF007FC00FF801FF007E000F
-F8003F007C000FF8001F0078000FF8000F0078000FF8000F0070000FF8000700F0000FF8
-000780F0000FF8000780F0000FF8000780E0000FF8000380E0000FF8000380E0000FF800
-0380E0000FF8000380E0000FF800038000000FF800000000000FF800000000000FF80000
-0000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000
-00000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000
-000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000000
-0FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000F
-F800000000000FF800000000000FF800000000000FF800000000000FF8000000007FFFFF
-FF0000007FFFFFFF0000007FFFFFFF000031307DAF38>84 DII<00FFF0000003FFFF00000F803F80000FC00F
-E0001FE007F0001FE007F0001FE003F8000FC003FC00078003FC00000003FC00000003FC
-00000003FC00000003FC000000FFFC00001FFFFC0000FFE3FC0003FC03FC000FF003FC00
-1FC003FC003FC003FC007F8003FC007F8003FC00FF0003FC00FF0003FC00FF0003FC00FF
-0007FC00FF0007FC007F800DFC003FC01DFE001FE078FFF007FFE07FF000FF803FF02420
-7E9F27>97 D<01F8000000FFF8000000FFF8000000FFF80000000FF800000007F8000000
-07F800000007F800000007F800000007F800000007F800000007F800000007F800000007
-F800000007F800000007F800000007F800000007F800000007F83FE00007F8FFFC0007FB
-E07F0007FF001F8007FE000FC007FC000FE007F80007F007F80007F807F80007F807F800
-03FC07F80003FC07F80003FC07F80003FE07F80003FE07F80003FE07F80003FE07F80003
-FE07F80003FE07F80003FE07F80003FE07F80003FC07F80003FC07F80003FC07F80007F8
-07F80007F807F80007F007FC000FE007FE000FC007E7003F8007C3C0FE000780FFF80007
-003FC00027327EB12D>I<000FFF00007FFFC001FC01F003F003F007E007F80FE007F81F
-C007F83FC003F03FC001E07F8000007F8000007F800000FF800000FF800000FF800000FF
-800000FF800000FF800000FF800000FF8000007F8000007F8000007F8000003FC0001C3F
-C0001C1FC000380FE0003807E0007003F001E001FC07C0007FFF00000FF8001E207D9F24
->I<0000000FC0000007FFC0000007FFC0000007FFC00000007FC00000003FC00000003F
-C00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0
-0000003FC00000003FC00000003FC00000003FC00007F83FC0003FFF3FC000FE07BFC003
-F801FFC007E0007FC00FE0007FC01FC0003FC03FC0003FC03FC0003FC07F80003FC07F80
-003FC07F80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF80003FC0FF8000
-3FC0FF80003FC0FF80003FC07F80003FC07F80003FC07F80003FC03FC0003FC03FC0003F
-C01FC0003FC00FE0007FC007E000FFC003F003FFE001FC0F3FFE007FFE3FFE000FF03FFE
-27327DB12D>I<000FFC00007FFF8001FC0FC003F003E007E001F00FE001F81FC000FC3F
-C000FE3FC000FE7F80007E7F80007F7F80007FFF80007FFF80007FFFFFFFFFFFFFFFFFFF
-800000FF800000FF800000FF8000007F8000007F8000007F8000003FC000071FC000071F
-C0000E0FE0000E07F0001C03F8007800FE03E0003FFFC00007FE0020207E9F25>I<0001
-FE00000FFF80001FC3C0007F07E000FE0FF001FE0FF001FC0FF003FC0FF003FC07E003FC
-018003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000FFFF
-FC00FFFFFC00FFFFFC0003FC000003FC000003FC000003FC000003FC000003FC000003FC
-000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
-000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC
-000003FC00007FFFF0007FFFF0007FFFF0001C327EB119>I<001FF007C000FFFE3FE001
-F83F79F007E00FC3F00FE00FE1F00FC007E0E01FC007F0001FC007F0003FC007F8003FC0
-07F8003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0000FC007E0000FE00F
-E00007E00FC00003F83F000006FFFE00000E1FF000000E000000001E000000001E000000
-001F000000001F800000001FFFFF80000FFFFFF0000FFFFFFC0007FFFFFE0003FFFFFF00
-03FFFFFF800FFFFFFFC03F00007FC07E00001FE07C00000FE0FC000007E0FC000007E0FC
-000007E0FC000007E07E00000FC03E00000F803F00001F800FC0007E0007F803FC0001FF
-FFF000001FFF0000242F7E9F28>I<01F8000000FFF8000000FFF8000000FFF80000000F
-F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8
-00000007F800000007F800000007F800000007F800000007F800000007F800000007F807
-F80007F83FFE0007F8783F0007F8C03F8007F9801FC007FB001FC007FE001FE007FC001F
-E007FC001FE007FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0
-07F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
-F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFF
-C3FFFFFFFFC3FFFFFFFFC3FFFF28327DB12D>I<03C00007E0000FF0001FF8001FF8001F
-F8001FF8000FF00007E00003C00000000000000000000000000000000000000000000000
-000000000001F8007FF8007FF8007FF80007F80007F80007F80007F80007F80007F80007
-F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
-F80007F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>I<
-01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800
-07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
-07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
-07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFC0
-FFFFC0FFFFC012327DB117>108 D<03F007F8001FE000FFF03FFE00FFF800FFF0783F01
-E0FC00FFF0C03F8300FE000FF1801FC6007F0007F3001FCC007F0007F6001FF8007F8007
-FC001FF0007F8007FC001FF0007F8007FC001FF0007F8007F8001FE0007F8007F8001FE0
-007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
-F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0
-007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007
-F8001FE0007F8007F8001FE0007F8007F8001FE0007F8007F8001FE0007F80FFFFC3FFFF
-0FFFFCFFFFC3FFFF0FFFFCFFFFC3FFFF0FFFFC3E207D9F43>I<03F007F800FFF03FFE00
-FFF0783F00FFF0C03F800FF1801FC007F3001FC007F6001FE007FC001FE007FC001FE007
-FC001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
-001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F800
-1FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE0FFFFC3FFFFFFFFC3FF
-FFFFFFC3FFFF28207D9F2D>I<0007FC0000007FFFC00001FC07F00003F001F80007E000
-FC000FC0007E001FC0007F003FC0007F803F80003F807F80003FC07F80003FC07F80003F
-C0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0FF80003FE0
-FF80003FE07F80003FC07F80003FC07F80003FC03FC0007F803FC0007F801FC0007F000F
-E000FE0007E000FC0003F803F80001FE0FF000007FFFC0000007FC000023207E9F28>I<
-01F83FE000FFF8FFFC00FFFBE07F00FFFF003F8007FE001FC007FC000FE007F8000FF007
-F80007F807F80007F807F80007FC07F80003FC07F80003FC07F80003FE07F80003FE07F8
-0003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FE07F80003FC07F800
-07FC07F80007FC07F80007F807F80007F807F8000FF007FC000FE007FE001FC007FF003F
-8007FBC0FE0007F8FFF80007F83FC00007F800000007F800000007F800000007F8000000
-07F800000007F800000007F800000007F800000007F800000007F800000007F8000000FF
-FFC00000FFFFC00000FFFFC00000272E7E9F2D>I<03F03F00FFF07FC0FFF1C3E0FFF187
-E00FF30FF007F60FF007F60FF007FC07E007FC03C007FC000007FC000007F8000007F800
-0007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
-0007F8000007F8000007F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE0
-00FFFFE0001C207E9F21>114 D<01FF860007FFFE001F00FE003C003E0078001E007800
-0E00F8000E00F8000E00F8000E00FC000000FF800000FFFC00007FFFC0003FFFF0003FFF
-F8001FFFFC0007FFFE0001FFFF00003FFF000000FF8000003F8060001F80E0000F80E000
-0F80F0000F80F0000F00F8000F00FC001E00FE001C00FF807800F3FFF000C07F80001920
-7D9F20>I<001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C00
-00007C0000007C000000FC000001FC000003FC000007FC00001FFFFE00FFFFFE00FFFFFE
-0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
-0003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC038003FC03
-8003FC038003FC038003FC038003FC038003FC038001FC038001FC070000FE0700007F0E
-00003FFC000007F000192E7FAD1F>I<01F80007E0FFF803FFE0FFF803FFE0FFF803FFE0
-0FF8003FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007
-F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8
-001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8001FE007F8003FE007F800
-3FE003F8007FE003F8007FE001FC00DFF000FE039FFF007FFF1FFF000FFC1FFF28207D9F
-2D>I119 D<7FFF807FFC7FFF807FFC7FFF807FFC03
-FC000F0001FE001E0000FF003C0000FF803800007FC07800003FC0F000001FE1E000000F
-F3C000000FFF80000007FF00000003FE00000001FE00000000FF00000000FF80000000FF
-C0000001FFC0000003DFE00000078FF00000078FF800000F07FC00001E03FE00003C01FE
-00007800FF0000F000FF8001E0007FC003E0003FE0FFFC01FFFFFFFC01FFFFFFFC01FFFF
-28207F9F2B>I E /Fr 1 14 df<0000FF00000007FFE000001F00F8000078001E0000E0
-000700018000018003000000C006000000600C000000300C000000301800000018300000
-000C300000000C6000000006600000000660000000066000000006C000000003C0000000
-03C000000003C000000003C000000003C000000003C000000003C000000003C000000003
-6000000006600000000660000000066000000006300000000C300000000C18000000180C
-000000300C00000030060000006003000000C0018000018000E00007000078001E00001F
-00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fs 55 122
-df<0006000C00180038007000E001E003C003C0078007800F800F001F001F003E003E00
-3E007E007E007E007C007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00
-FC00FC007C007C007E007E007E003E003E003E001F001F000F000F800780078003C003C0
-01E000E0007000380018000C00060F3C7AAC1A>40 D<3C007F00FF80FF80FFC0FFC0FFC0
-7FC03EC000C000C00180018001800300030006000E001C00380010000A157B8813>44
-D<1C007F007F00FF80FF80FF807F007F001C0009097B8813>46 D<000E00001E00007E00
-07FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFEFFFFFE
-17277BA622>49 D<00FF800007FFF0000FFFFC001E03FE003800FF807C003F80FE003FC0
-FF001FC0FF001FE0FF000FE0FF000FE07E000FE03C001FE000001FE000001FC000001FC0
-00003F8000003F0000007E000000FC000000F8000001F0000003E00000078000000F0000
-001E0000003C00E0007000E000E000E001C001C0038001C0060001C00FFFFFC01FFFFFC0
-3FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007
-FFFC000F81FE001F007F003F807F003F803F803F803F803F803F801F803F801F003F8000
-007F0000007F0000007E000000FC000001F8000007F00000FFC00000FFC0000001F80000
-007E0000003F0000003F8000001FC000001FC000001FE000001FE03C001FE07E001FE0FF
-001FE0FF001FE0FF001FC0FF003FC0FE003F807C007F003F01FE001FFFFC0007FFF00000
-FF80001B277DA622>I<00000F0000000F0000001F0000003F0000007F000000FF000001
-FF000001FF000003BF0000073F00000E3F00001C3F00003C3F0000383F0000703F0000E0
-3F0001C03F0003803F0007803F0007003F000E003F001C003F0038003F0070003F00F000
-3F00FFFFFFF8FFFFFFF8FFFFFFF800007F0000007F0000007F0000007F0000007F000000
-7F0000007F0000007F00001FFFF8001FFFF8001FFFF81D277EA622>I<180003001F801F
-001FFFFE001FFFFC001FFFF8001FFFF0001FFFC0001FFF00001C0000001C0000001C0000
-001C0000001C0000001C0000001C0000001C7FC0001DFFF8001F80FC001E003F0008003F
-0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001F
-E0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF0
-0000FF80001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE0
-7FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E000
-0001C0000001C000000380000007800000070000000F0000001F0000001E0000003E0000
-003E0000007E0000007C0000007C000000FC000000FC000000FC000000FC000001FC0000
-01FC000001FC000001FC000001FC000001FC000001FC000000F80000007000001C297CA8
-22>55 D<007F800001FFF00007FFF8000FC0FC001F803E003F001F007E001F807E001F80
-7E000F80FE000FC0FE000FC0FE000FC0FE000FE0FE000FE0FE000FE0FE000FE0FE000FE0
-7E001FE07E001FE03F003FE01F002FE00F80CFE007FF8FE001FF0FE000080FE000000FC0
-00000FC000000FC000001F803E001F807F001F807F003F007F003E007F007E007E00FC00
-3E03F8001FFFE0000FFF800001FE00001B277DA622>57 D<000007800000000007800000
-00000FC0000000000FC0000000000FC0000000001FE0000000001FE0000000003FF00000
-00003FF0000000003FF00000000077F80000000077F800000000F7FC00000000E3FC0000
-0000E3FC00000001C1FE00000001C1FE00000003C1FF0000000380FF0000000380FF0000
-0007007F80000007007F8000000F007FC000000E003FC000000E003FC000001C001FE000
-001C001FE000003FFFFFF000003FFFFFF000003FFFFFF00000700007F80000700007F800
-00F00007FC0000E00003FC0001E00003FE0001C00001FE0001C00001FE0003C00001FF00
-FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E297EA833>65 DI<00007FE0030007FFFC07001FFFFF
-0F007FF00F9F00FF0001FF01FC0000FF03F800007F07F000003F0FE000001F1FC000001F
-1FC000000F3F8000000F3F800000077F800000077F800000077F00000000FF00000000FF
-00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00
-0000007F000000007F800000007F800000073F800000073F800000071FC00000071FC000
-000E0FE000000E07F000001C03F800003C01FC00007800FF0001F0007FF007C0001FFFFF
-800007FFFE0000007FF00028297CA831>IIII<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000
-FF0001FF0001FC0000FF0003F800007F0007F000003F000FE000001F001FC000001F001F
-C000000F003F8000000F003F80000007007F80000007007F80000007007F0000000000FF
-0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
-0000000000FF0000000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F
-800000FF003F800000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003
-F80000FF0001FC0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000
-007FF003002D297CA835>III75
-DIII<0000FFC00000000FFFFC0000003F807F000000FE001FC00001F800
-07E00003F00003F00007E00001F8000FE00001FC001FC00000FE001FC00000FE003F8000
-007F003F8000007F007F8000007F807F0000003F807F0000003F807F0000003F80FF0000
-003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000
-003FC0FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000
-007F803F8000007F003F8000007F001FC00000FE001FC00000FE000FE00001FC0007F000
-03F80003F80007F00001FC000FE00000FE001FC000003FC0FF0000000FFFFC00000000FF
-C000002A297CA833>II<0000FFC00000000FFFFC0000003FC0FF000000FE001FC00001FC000FE000
-03F00003F00007F00003F8000FE00001FC001FC00000FE001FC00000FE003F8000007F00
-3F8000007F007F8000007F807F8000007F807F0000003F807F0000003F80FF0000003FC0
-FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0
-FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000007F80
-3F8000007F003F8000007F001FC00000FE001FC03E00FE000FE07F81FC0007E0C1C1F800
-03F18063F00001F98067E00000FF803FC000003FC07F0000000FFFFC00000000FFF800C0
-0000003C00C00000001E00C00000001E01C00000001F83C00000001FFFC00000000FFF80
-0000000FFF800000000FFF0000000007FF0000000003FE0000000001FC0000000000F800
-2A357CA833>II<00FF806003FFF0E00FFFF8E01F80FDE03F001FE03E0007E07C0003E0
-7C0003E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFC0000
-7FFFE0003FFFF8001FFFFE001FFFFF0007FFFF8003FFFFC000FFFFC0000FFFE000007FE0
-00001FF000000FF0000007F0E00003F0E00003F0E00003F0E00003F0F00003E0F00003E0
-F80007E0FC0007C0FF000F80FFE03F80E3FFFE00E1FFFC00C01FF0001C297CA825>I<7F
-FFFFFFFF807FFFFFFFFF807FFFFFFFFF807F807F807F807C007F800F8078007F80078078
-007F80078070007F800380F0007F8003C0F0007F8003C0E0007F8001C0E0007F8001C0E0
-007F8001C0E0007F8001C0E0007F8001C000007F80000000007F80000000007F80000000
-007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
-007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
-007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000
-007F80000000FFFFFFC00000FFFFFFC00000FFFFFFC0002A287EA72F>IIII