Commit 4ba2c1e8 authored by Per Cederqvist's avatar Per Cederqvist

Obsolete file removed.

parent 15ef34a0
Vi i datorf|reningen Lysator vid Link|pings tekniska H|gskola har ett
kom-system som vi kallar LysKOM. Det {r |ppet f|r vem som helst att
prova att koppla upp sig och prova. Systemet {r under utveckling just
nu s} det finns fortfarande buggar men ge inte upp om det skulle
st{lla till problem. Har du tillg}ng till en UNIX-maskin med
internetanslutning och gnu-emacs skall det inte vara n}gra problem
(mer {n att det kan g} l}ngsamt).
H{r {r en liten beskrivning av hur du g|r f|r att komma in. Du m}ste
n{mligen ha ett litet program som din emacs k|r som vi skrivit:
1. cd; mkdir lyskom; cd lyskom
2. ftp ftp.lysator.liu.se
3. user ftp
4. Password ge din mailadress
5. cd /pub/lyskom/elisp-client
# betyder anv{nd det h|gsta existerande numret.
6. bin
7. get elisp-client-#.txt.Z
8. get lyskom-#.elc.Z
9. quit
10. uncompress *
11. mv lyskom-#.elc lyskom.elc
12. emacs $HOME/.emacs
13. M-> (autoload 'lyskom (expand-file-name "~/lyskom/lyskom")
"K|ra lyskom" t) C-x C-e C-x C-s
14. M-x lyskom <RET>
15. Ange server (kom.lysator.liu.se)
16. Ange ditt namn
17. Ange ett personligt l|sen
18. Det f|rsta som h{nder {r att du f}r skriva en presentation. Den
kommer att l{ggas in i m|tet presentationer av nya medlemmar som
alla kan l{sa. Vill du v{nta att skriva presentation s} g}r det
bra genom att du sl{nger den med C-c C-k (alla inl{gg sl{ngs s}),
vill du d{remot skicka in den s} anv{nd lite f|rfattartalanger n{r
du beskriver dig sj{lv. Det {r trevligare. Du skickar in med C-c
C-c. [r du ovan vid emacs editeringskommandon s} {r det nog b{st
att v{nta om du inte lyckas f} till en snygg presentation.
Kom ih}g, det kan h{nga sig ibland (Om det tar en minut att logga in
{r det normalt). N{r inget annat fungerar och man f}r en massa
"Symbols function definition is void: nil" kan du trycka 'r'. Funkar
inte det heller, till exempel i uppkopplingsskedet s} {r det bara att
d|da bufferten och b|rja om fr}n steg 14.
Har du inte internetanslutning utan ett eget n{tverk kan du inte
koppla upp dig mot oss utan du m}ste ist{llet h{mta en egen server som
du kan k|ra mot. Servern finns att h{mta med anonym ftp fr}n
ftp.lysator.liu.se i directoryt pub/lyskom/server. Om du vill ha den
med mail m}ste vi skicka manuellt. Skriv till kom@lysator.liu.se.
Lycka till.
LysKOM-Projektet
--------------------------------
Data- och programstrukturer i elisp-klienten.
--------------------------------
av Inge Wallin
<ingwa@isy.liu.se eller inge@lysator.liu.se>
26 februari 1991
delar h{mtade ur en dokumentation
skriven av Per Cederqvist
<ceder@lysator.liu.se>
Detta dokument beskriver de data- och programstrukturer som anv{nds i
LysKOM-klienten skriven i elisp. Anv{ndningen av klienten beskrivs i
dokumentet 'LysKOM-projektet: En klient skriven i GNU-emacs-lisp.' av
Per Cederqvist och Inge Wallin och ber|rs inte h{r.
De som framf|r allt har anledning att l{sa det h{r dokumentet {r
programmerare som skall ut|ka eller underh}lla elispklienten. N{r
detta dokument skrivs {r versionsnumret 0.27 och eventuellt kan vissa
detaljer ha {ndrats vid l{stillf{llet, men i stort borde informationen
st{mma.
================================================================
kapitelrubriker:
* Kom-k|er och asynkront beteende
* Hur man skriver ett nytt kommando
* Cachening av olika datatyper
* Hur prefetch g}r till och vad som prefetchas
* Hur klienten v{ljer defaultkommando
* Read-info, read-info-listor och hur klienten v{ljer l{sordning.
* Asynkrona meddelanden
* Parsning av det som kommer fr}n servern
Fler?
================================================================
Kapitel: Kom-k|er och asynkront beteende
================================================================
(H{r b|rjar ceders text. Den m}ste eventuellt skrivas om lite.)
KOM-QUEUE
Kommunikationen med servern sker via en stream. Klienten skickar
fr}gor, och f}r svar efter ett tag. Dessa anrop, och en hel massa
annat, styrs via ett system av k|er.
En kom-queue har ett namn. Namnet {r en elisp-lisp-atom, t ex "main"
eller "kalle".
ATT ANROPA FUNKTIONER VIA EN KOM-QUEUE
Det enklaste man kan g|ra med en kom-queue {r att anropa en
elisp-funktion. F|r att g|ra det anv{nder man funktionen lyskom-run.
Den tar minst tv} argument.
* Function: lyskom-run KOM-QUEUE FUNCTION &rest FUNCTION-ARGS
Den h{r funktionen k|ar ett funktionsanrop p} k|n med namnet
KOM-QUEUE. Ett litet exempel:
(prog1
(lyskom-run 'test 'message "%s %s\n" "Hej" "hopp")
(lyskom-run 'test 'message "Hall}!")
(lyskom-run 'test2 'message "Foobar"))
Det h{r exemplet s{ger att man skall g|ra f|ljande tre funktionsanrop:
1) (message "%s %s\n" "Hej" "hopp")
2) (message "Hall}!")
3) (message "Foobar")
Anrop 1 och 2 g|rs via kom-queue "test". Anrop 3 g|rs via "test2".
Eftersom anrop 1 och 2 g|rs via samma kom-queue s} {r man garanterad
att anrop 1 g|rs f|re anrop 2. Anrop 3 kan d{remot ske n{r som helst i
f|rh}llande till anrop 1 och 2.
ATT ANROPA SERVERN
Om man bara kunde k|a funktionsanrop med lyskom-run s} vore hela
konstruktionen ganska meningsl|s - man skulle lika g{rna kunna anropa
funktionen direkt. Men man kan {ven anv{nda k|n f|r att fr}ga
LysKOM-servern om saker och ting. Alla funktioner som anropar servern
har ett namn som b|rjar p} "initiate-". Alla tar ett namn p} en
kom-queue som f|rsta argument, och en funktion som andra argument. N{r
servern svarar kommer den funktionen (kallad "handler") att anropas
med svaret som argument.
Som exempel kan vi ta "initiate-get-time" som fr}gar servern vad
klockan {r.
* Function: initiate-get-time KOM-QUEUE HANDLER &rest DATA
Handlern kommer s} sm}ningom att anropas med ett
(apply HANDLER result DATA)
d{r "result" {r svaret fr}n servern, omgjort till ett internt
dataformat.
Man kan blanda initiate-* och lyskom-run-anrop hur som helst. Om de
g|rs via samma kom-queue s} kommer de olika handlers och funktioner
som man anger att utf|ras i sekvens. Om de g|rs via olika kom-queues
s} vet man inte i vilken ordning de utf|rs.
Exempel: Om man k|r f|ljande i en lyskom-buffert
(prog1
(lyskom-run 'foo 'lyskom-insert "Hej! Klockan {r ")
(initiate-get-time 'foo 'lyskom-print-date-and-time)
(lyskom-run 'foo 'lyskom-insert "(enligt servern).\n"))
s} f}r man:
Hej! Klockan {r 1990-10-31 21:04 (enligt servern).
Om man d{remot skriver:
(prog1
(lyskom-run 'foo 'lyskom-insert "Hej! Klockan {r ")
(initiate-get-time 'foo2 'lyskom-print-date-and-time)
(lyskom-run 'foo3 'lyskom-insert "(enligt servern).\n"))
blir svaret:
Hej! Klockan {r (enligt servern).
1990-10-31 21:06
Det kunde lika g{rna blivit
1990-10-31 21:07 (enligt servern).
Hej! Klockan {r
N{r man anv{nder en initiate-*-funktion s} skickas en f|rfr}gan till
servern. Den g}r iv{g direkt. N{r sedan svaret kommer parseas det
direkt och mellanlagras p} en lista (lyskom-call-data - endast modiga
torde titta p} den. Den {r h}rig... (och det finns en del buggar kvar
i version 0.11b)). Sedan k|rs alla handlers och funktioner i den
ordning som de ligger p} k|erna. (Man kan allts} se de olika k|erna
som n}gon form av l{ttviktsprocesser).
F|r att ytterligare kr}ngla till det hela s} finns det undantag fr}n
regeln att alla initiate-*-funktioner alltid fr}gar servern.
Initiate-get-text-stat {r ett av undantagen. Den har en cache s} att
den bara h{mtar en text-status en g}ng per session. I och med att allt
synkroniseras via kom-queues s} spelar det ingen roll om textstatusen
fanns i cachen eller inte. Programfl|det blir det samma i alla fall.
Att fr}ga om m}nga saker
Ofta vill man fr}ga om flera saker p} en g}ng. D} kan man anv{nda
lyskom-collect f|r att samla ihop flera resultat och skicka dom till
en 'multi-handler'.
* Function: lyskom-collect KOM-QUEUE
* Function: lyskom-use KOM-QUEUE MULTI-HANDLER &rest MULTI-HANDLER-DATA
lyskom-collect talar om att svaren fr}n alla anrop som g|rs via den
h{r k|n fram till n{sta lyskom-use ska lagras. N{r alla anrop {r klara
kommer MULTI-HANDLERn att anropas med
(apply MULTI-HANDLER (nconc result-list MULTI-HANDLER-DATA))
Ett exempel {r n{r man vill skriva ut en text. D} vill man veta b}de
text-statusen och text-massan (sj{lva texten). D} kan man till exempel
g|ra s} h{r (n}got f|renklat):
(defun print-text (text-status text-massa)
"Skriva en text"
...)
(prog1
(lyskom-run 'main 'lyskom-insert "B|rjar...\n")
(lyskom-collect 'main)
(initiate-get-text-stat 'main nil 18)
(initiate-get-text 'main nil 18)
(lyskom-use 'main 'print-text)
(lyskom-run 'main 'lyskom-insert "Klar!\n"))
(Om man anger nil i st{llet f|r en handler till initiate-*-rutinerna
inneb{r det att man inte bryr sig om svaret - i alla fall inte direkt
n{r det kommer).
En annan situation n{r man vill samla p} sig resultat {r n{r man har
en lista med n}got, till exempel textnummer, och vill fr}ga servern
samma fr}ga f|r allihop:
* Function: lyskom-collect-ignore-err KOM-QUEUE
* Function: lyskom-list-use KOM-QUEUE MULTI-HANDLER &rest MULTI-HANDLER-DATA
lyskom-collect-ignore-err fungerar precis som lyskom-collect med det
enda undantaget att anrop som misslyckas sl{ngs bort fr}n listan. Om
man anv{nder lyskom-collect kommer det att finnas ett element p}
listan som indikerar ett fel. Ofta {r det inget fel om ett anrop
misslyckas. D} ska man anv{nda lyskom-collect-ignore-err s} slipper
man ignorera felen sj{lv.
lyskom-list-use {r som lyskom-use med den enda skillnaden att
MULTI-HANDLERn kommer att anropas med
(apply MULTI-HANDLER result-list MULTI-HANDLER-DATA)
Man f}r allts} resultaten som en lista, och inte som ett antal
argument.
H{r {r ett exempel som r{knar ut hur m}nga rader det finns totalt i
inl{ggen 1, 2, 3 och 4. Om man inte f}r l{sa ett av inl{ggen kommer
sum-lines att f} en lista som bara inneh}ller tre textstatusar.
(defun sum-lines (text-stat-list)
(let ((sum 0))
(while text-stat-list
(setq sum (+ sum (text-stat->no-of-lines
(car text-stat-list))))
(setq text-stat-list (cdr text-stat-list)))
(lyskom-insert (format "Totalt antal rader: %d\n" sum))))
(prog1
(lyskom-collect-ignore-err 'foo)
(mapcar '(lambda (nr) (initiate-get-text-stat 'foo nil nr))
'(1 2 3 4))
(lyskom-list-use 'foo 'sum-lines))
ATT STANNA EN K\
* Function: lyskom-halt KOM-QUEUE
* Function: lyskom-resume KOM-QUEUE
Med hj{lp av dessa funktioner kan man stoppa och }terstarta en k|. Det
kan vara bra att kunna g|ra ibland. F|r exempel, se k{llkoden till
elisp-klienten.
FELHANTERING
Om man f}r ett felmeddelande fr}n servern s} m{rker handler eller
multi-handlern det genom att v{rdet {r nil i st{llet f|r den
<conf-stat eller vad man nu v{ntar sig> som man borde f}tt. S} {r det
i alla fall till och med version 0.12. N}gon g}ng i framtiden kommer
det att {ndras s} att man f}r en lista typ
(ERROR kom-errno kom-info)
d{r kom-errno och kom-info {r tal som tillsammans ber{ttar vad som
gick snett. Fr}n och med version 0.13 finns en
* Function: lyskom-err-info-p OBJECT
som returnerar t om OBJECT {r resultatet av ett anrop som
misslyckades, nil om anropet lyckades.
HUR MAN SKRIVER ETT KOMMANDO
F|ljande {r en mall:
(defun kom-foo ()
"Do be doo dum. No arguments."
(interactive)
(lyskom-start-of-command nil 'kom-foo)
...
(lyskom-end-of-command))
Kommandon skall b|rja p} "kom-". lyskom-start-of-command g|r s} att
anv{ndaren inte kan starta ett nytt kommando samtidigt.
lyskom-end-of-command skriver ut en prompt.
Om man vill skriva ut n}got i bufferten _skall_ man anv{nda
lyskom-insert i st{llet f|r insert. Den tar ett enda argument, en
str{ng.
Om man skriver ut n}got, och vet att det kan ta l}ng tid innan man
skriver ut resten, s} b|r man anropa lyskom-scroll. Den scrollar
sk{rmen s} att allt utskrivet syns, fast den scrollar aldrig s} mycket
att det man inte hunnit se f|rsvinner.
(Slut p} ceders text.)
================================================================
================================================================
Kapitel: Hur man skriver ett nytt kommando
================================================================
Kapitlets text h{r...
================================================================
================================================================
Kapitel: Cachening av olika datatyper
================================================================
Kapitlets text h{r...
================================================================
================================================================
Kapitel: Hur prefetch g}r till och vad som prefetchas
================================================================
Kapitlets text h{r...
================================================================
================================================================
Kapitel: Hur klienten v{ljer defaultkommando
================================================================
Kapitlets text h{r...
================================================================
================================================================
Kapitel: Read-info, read-info-listor och hur klienten v{ljer l{sordning.
================================================================
(Ursprungligen skriven av Linus. Kanske m}ste {ndras lite.)
F|r att man skall kunna ha full f|rdel av det system som jag skissar
p} och som fungerar just nu s} m}ste man t{nka sig ordningen som man
l{ser i som en slags stack. Allting staplas ovanp}.
Antag att du l{ser i ett m|te. D} har du i botten p} stacken en lista
som talar om vilka ol{sta du har. Ovanp} denna ligger kanske en lista
med inl{gg som du h}ller p} att l{sa i kommentarordning.
typ textnummer betydelse
----------------------------------------------------------------
COMM-TO <5 6> Kommentarer till inl{gg 4 som du l{ste nyss
CONF <5 6 7 8> Kvar att l{sa
Nu har du prompten "l{sa n{sta kommentar".
COMM-TO <7> Kommentar till inl{gg 5 som du l{ste nyss.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 7 8> Kvar att l{sa
Om du nu f}r f|r dig att g|ra ]terse alla av Linus Tolke Y till Fritt
Forum s} staplas denna lista ovanp}.
REVIEW <12 13 16 23> Inl{gg av Linus Tolke Y i Fritt Forum.
COMM-TO <7> Kommentar till inl{gg 5 som du l{ste nyss.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 7 8> Kvar att l{sa
Du l{ser ett.
REVIEW <13 16 23> Inl{gg av Linus Tolke Y i Fritt Forum som
v{ntar p} att du skall l{sa dem
COMM-TO <7> Kommentar till inl{gg 5 som ligger och v{ntar.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 7 8> Kvar att l{sa
Nu vill du forts{tta l{sa i m|tet: n i (n{sta inl{gg).
Du f}r prompten L{sa n{sta kommentar -
COMM-TO <7> Kommentar till inl{gg 5 som du strax l{ser
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 7 8> Kvar att l{sa
REVIEW <13 16 23> Inl{gg av Linus Tolke Y i Fritt Forum som
v{ntar p} att bli l{sta
Du l{ser. Du f}r se inl{gg 7.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 8> Kvar att l{sa
REVIEW <13 16 23>
Nu vill du forts{tta att {terse: } n ]terse n{sta.
Du f}r en ny prompt:
]terse n}sta text -
REVIEW <13 16 23> Du kommer att forts{tta l{sa dessa.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 8> Kvar att l{sa
Du l{ser: F}r se inl{gg 13.
REVIEW <16 23>
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 8> Kvar att l{sa
Nu vill du }terse tr{det som inl}gg 13 fanns i.
Tryck } t ]terse tr{d.
Du f}r se inl{gg 2.
REVIEW-TREE <3 10 11>(2)Kommentarer till inl{gg 2.
REVIEW <16 23> V{ntar.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 8> Kvar att l{sa
REVIEW-TREE {r en speciell typ som g|r att det byggs ett nytt tr{d av
alla kommentarer varje g}ng man l{ser ett inl{gg.
Du har nu prompten:
]terse n{sta kommentar -
Du l{ser (inl{gg 3)
REVIEW-TREE <13> (3) Kommentar till inl{gg 3 som v{ntar.
REVIEW-TREE <10 11>(2) Kommentarer till inl{gg 2 som v{ntar
REVIEW <16 23> V{ntar.
COMM-TO <6> Kommentar till inl{gg 4 som ligger och v{ntar.
CONF <6 8> Kvar att l{sa
Om du nu har villat bort dig och vill ha ett tips p} var du {r s}
finns funktionen: (]terse) Lista stack } l
Den ger utskriften:
]terse 1 kommentarer till inl{gg 3.
]terse 2 kommentarer till inl{gg 2.
]terse 2 inl{gg.
]terse n{sta kommentar -
Du har prompten: ]terse n{sta kommentar -
Om du ni vill komma tillbaka till att l{sa d{r du var i m|tet trycker du
]terse hoppa.
Du f}r d} prompten: L{sa n{sta kommentar -
Om man g|r n{sta m|te s} gl|ms bara alla andra typer {n CONF och n{sta
m|te plockas in.
(Denna text finns {ven i filen:
lll:/usr/local/src/2kom/doc/elisp-client-review
Sammanfattningen fr}n f|rra inl{gget finns i filen:
lll:/usr/local/src/2kom/doc/elisp-client-review-short)
(Slut p} linus text.)
================================================================
================================================================
Kapitel: Asynkrona meddelanden
================================================================
Kapitlets text h{r...
================================================================
================================================================
Kapitel: Parsning av det som kommer fr}n servern
================================================================
Kapitlets text h{r...
================================================================
Resten av denna fil inneh}ller lite saker }t emacs.
Local Variables:
mode:indented-swedish
eval:(auto-fill-mode 1)
End:
This diff is collapsed.
Detta {r en beskrivning p} det filformat som anv{nds av ramkomd.
ramkomd ver 1.00 sparar all data en g}ng ungef{r var 5:e minut. Vid
uppstart l{ser den in den sparade filen. Innan filen sparas tas en
backup av den. Det finns allts} alltid minst en, och f|r det mesta
tv}, kopior av inneh}llet.
Format:
dirty-flagga 6 tecken som antingen {r DIRTY\n eller CLEAN\n
next_free_num
conference 1 ... conference (next_free_num-1)
person 1 ... person (next_free_num-1)
next_text_num
text_stat 1 ... text_stat (next_text_num-1)
text_mass 1 ... text_mass (next_text_num-1)
B}de conference, person, text_stat och text_mass sparas som
@ f|r att indikera att den inte existerar
+ data d{r data sparas med hj{lp av rutinerna i
ram-output.c.
Text_mass: texter som inte existerar sparas som "0H".
K{llkodsfiler: ram-cache.c och ram-output.c inneh}ller det v{sentligaste.
\ No newline at end of file
A list of all libraries, what they contain, and where they come from:
-lclient-sup libraries/client-support "RPC" functions. kom_*.
-l
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment