From aaace67b48e9d93b460d9a9d423a3530e5b49d8a Mon Sep 17 00:00:00 2001 From: nobody <nomail@example.com> Date: Wed, 28 Aug 1991 02:36:37 +0000 Subject: [PATCH] This commit was manufactured by cvs2svn to create tag 'v0.31.7'. --- ChangeLog | 382 --------- FileList | 136 ---- Makefile | 58 -- doc/Buggar.fixade | 449 ----------- doc/Bugrapporter | 775 ------------------ doc/Distfile | 1 - doc/LOGG | 77 -- doc/Mailinglist | 13 - doc/Makefile | 28 - doc/Makefile.template | 39 - doc/README | 79 -- doc/coding-standards.txt | 73 -- doc/dbck.latexinfo | 97 --- doc/disc-cache.spec | 174 ---- doc/elisp-client.internals | 455 ----------- doc/elisp-client.user-manual | 802 ------------------- doc/fileformat | 26 - doc/ideer/cache | 36 - doc/ideer/cache-tankar | 114 --- doc/ideer/cache.spec | 73 -- doc/ideer/prot-B-analys | 325 -------- doc/ideer/versioner | 129 --- doc/libraries | 4 - doc/mall-swe.latexinfo | 90 --- doc/mall.latexinfo | 77 -- doc/man/Makefile | 29 - doc/man/dbck.8 | 105 --- doc/man/lyskom.5 | 294 ------- doc/man/lyskomd.8 | 95 --- doc/man/man3/isc3.x | 186 ----- doc/man/man5/lyskom.5 | 294 ------- doc/man/man5/ramkom.5 | 294 ------- doc/man/man8/dbck.8 | 105 --- doc/man/man8/lyskomd.8 | 95 --- doc/man/man8/ramkomd.8 | 95 --- doc/man/man8/updateLysKOM.8 | 13 - doc/man/updateLysKOM.8 | 13 - doc/misc_items | 43 - doc/mux.proto | 29 - doc/prot-A.bnf | 1067 ------------------------- doc/prot-A.slightly-obsolete | 230 ------ doc/prot-A.txt | 1067 ------------------------- doc/security-levels.txt | 50 -- doc/server-async.extend | 23 - doc/server.extend | 65 -- doc/skeleton.doc | 13 - foo | 0 scripts/Depend.make | 19 - scripts/List-Files | 25 - scripts/Makefile | 15 - scripts/Parallell-depend.make | 26 - scripts/RCS-depend.make | 27 - scripts/Summarize-Headers | 43 - scripts/import.make | 51 -- src/Makefile | 59 -- src/include/Makefile | 38 - src/include/compiler.h | 41 - src/include/config.h | 133 --- src/include/debug.h | 14 - src/include/dependencies | 0 src/include/kom-errno.h | 86 -- src/include/kom-types.h | 533 ------------ src/include/misc-types.h | 34 - src/include/server/Makefile | 27 - src/include/server/dependencies | 0 src/include/server/smalloc.h | 57 -- src/include/services.h | 477 ----------- src/libraries/Makefile | 56 -- src/libraries/libansi/Makefile | 40 - src/libraries/libansi/README | 5 - src/libraries/libansi/config.h | 8 - src/libraries/libansi/dependencies | 1 - src/libraries/libansi/libansi.a | Bin 1280 -> 0 bytes src/libraries/libansi/strerror.c | 23 - src/libraries/libcommon/ChangeLog | 15 - src/libraries/libcommon/Makefile | 71 -- src/libraries/libcommon/README | 2 - src/libraries/libcommon/dependencies | 26 - src/libraries/libcommon/kom-errno.c | 175 ---- src/libraries/libcommon/misc-parser.c | 182 ----- src/libraries/libcommon/misc-parser.h | 76 -- src/libraries/libcommon/parser.c | 418 ---------- src/libraries/libcommon/parser.h | 147 ---- src/libraries/libmisc/ChangeLog | 43 - src/libraries/libmisc/Makefile | 65 -- src/libraries/libmisc/README | 2 - src/libraries/libmisc/dependencies | 46 -- src/libraries/libmisc/numlist.c | 615 -------------- src/libraries/libmisc/numlist.h | 92 --- src/libraries/libmisc/numlist2.c | 99 --- src/libraries/libmisc/numlist2.h | 35 - src/libraries/libmisc/pom.c | 169 ---- src/libraries/libmisc/pom.h | 34 - src/libraries/libmisc/s-collat-tabs.c | 108 --- src/libraries/libmisc/s-collat-tabs.h | 35 - src/libraries/libmisc/s-string.c | 938 ---------------------- src/libraries/libmisc/s-string.h | 445 ----------- src/libraries/libmisc/testnumlist | Bin 32768 -> 0 bytes src/libraries/libmisc/testnumlist.c | 109 --- src/libraries/libmisc/zmalloc.c | 171 ---- src/libraries/libmisc/zmalloc.h | 116 --- 101 files changed, 14789 deletions(-) delete mode 100644 ChangeLog delete mode 100644 FileList delete mode 100644 Makefile delete mode 100644 doc/Buggar.fixade delete mode 100644 doc/Bugrapporter delete mode 100644 doc/Distfile delete mode 100644 doc/LOGG delete mode 100644 doc/Mailinglist delete mode 100644 doc/Makefile delete mode 100644 doc/Makefile.template delete mode 100644 doc/README delete mode 100644 doc/coding-standards.txt delete mode 100644 doc/dbck.latexinfo delete mode 100644 doc/disc-cache.spec delete mode 100644 doc/elisp-client.internals delete mode 100644 doc/elisp-client.user-manual delete mode 100644 doc/fileformat delete mode 100644 doc/ideer/cache delete mode 100644 doc/ideer/cache-tankar delete mode 100644 doc/ideer/cache.spec delete mode 100644 doc/ideer/prot-B-analys delete mode 100644 doc/ideer/versioner delete mode 100644 doc/libraries delete mode 100644 doc/mall-swe.latexinfo delete mode 100644 doc/mall.latexinfo delete mode 100644 doc/man/Makefile delete mode 100644 doc/man/dbck.8 delete mode 100644 doc/man/lyskom.5 delete mode 100644 doc/man/lyskomd.8 delete mode 100644 doc/man/man3/isc3.x delete mode 100644 doc/man/man5/lyskom.5 delete mode 100644 doc/man/man5/ramkom.5 delete mode 100644 doc/man/man8/dbck.8 delete mode 100644 doc/man/man8/lyskomd.8 delete mode 100644 doc/man/man8/ramkomd.8 delete mode 100644 doc/man/man8/updateLysKOM.8 delete mode 100644 doc/man/updateLysKOM.8 delete mode 100644 doc/misc_items delete mode 100644 doc/mux.proto delete mode 100644 doc/prot-A.bnf delete mode 100644 doc/prot-A.slightly-obsolete delete mode 100644 doc/prot-A.txt delete mode 100644 doc/security-levels.txt delete mode 100644 doc/server-async.extend delete mode 100644 doc/server.extend delete mode 100644 doc/skeleton.doc delete mode 100644 foo delete mode 100644 scripts/Depend.make delete mode 100755 scripts/List-Files delete mode 100644 scripts/Makefile delete mode 100644 scripts/Parallell-depend.make delete mode 100644 scripts/RCS-depend.make delete mode 100755 scripts/Summarize-Headers delete mode 100644 scripts/import.make delete mode 100644 src/Makefile delete mode 100644 src/include/Makefile delete mode 100644 src/include/compiler.h delete mode 100644 src/include/config.h delete mode 100644 src/include/debug.h delete mode 100644 src/include/dependencies delete mode 100644 src/include/kom-errno.h delete mode 100644 src/include/kom-types.h delete mode 100644 src/include/misc-types.h delete mode 100644 src/include/server/Makefile delete mode 100644 src/include/server/dependencies delete mode 100644 src/include/server/smalloc.h delete mode 100644 src/include/services.h delete mode 100644 src/libraries/Makefile delete mode 100644 src/libraries/libansi/Makefile delete mode 100644 src/libraries/libansi/README delete mode 100644 src/libraries/libansi/config.h delete mode 100644 src/libraries/libansi/dependencies delete mode 100644 src/libraries/libansi/libansi.a delete mode 100644 src/libraries/libansi/strerror.c delete mode 100644 src/libraries/libcommon/ChangeLog delete mode 100644 src/libraries/libcommon/Makefile delete mode 100644 src/libraries/libcommon/README delete mode 100644 src/libraries/libcommon/dependencies delete mode 100644 src/libraries/libcommon/kom-errno.c delete mode 100644 src/libraries/libcommon/misc-parser.c delete mode 100644 src/libraries/libcommon/misc-parser.h delete mode 100644 src/libraries/libcommon/parser.c delete mode 100644 src/libraries/libcommon/parser.h delete mode 100644 src/libraries/libmisc/ChangeLog delete mode 100644 src/libraries/libmisc/Makefile delete mode 100644 src/libraries/libmisc/README delete mode 100644 src/libraries/libmisc/dependencies delete mode 100644 src/libraries/libmisc/numlist.c delete mode 100644 src/libraries/libmisc/numlist.h delete mode 100644 src/libraries/libmisc/numlist2.c delete mode 100644 src/libraries/libmisc/numlist2.h delete mode 100644 src/libraries/libmisc/pom.c delete mode 100644 src/libraries/libmisc/pom.h delete mode 100644 src/libraries/libmisc/s-collat-tabs.c delete mode 100644 src/libraries/libmisc/s-collat-tabs.h delete mode 100644 src/libraries/libmisc/s-string.c delete mode 100644 src/libraries/libmisc/s-string.h delete mode 100755 src/libraries/libmisc/testnumlist delete mode 100644 src/libraries/libmisc/testnumlist.c delete mode 100644 src/libraries/libmisc/zmalloc.c delete mode 100644 src/libraries/libmisc/zmalloc.h diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index e1791c5c6..000000000 --- a/ChangeLog +++ /dev/null @@ -1,382 +0,0 @@ -Tue Mar 5 17:13:25 1991 Per Cederqvist (ceder at lave) - - * Depend.make: Bytt -MM mot -M, eftersom vi har includefiler inom - <> som {ndrar p} sig. - -Thu Feb 14 03:39:16 1991 Linus Tolke (linus at laila) - - * include/kom-types.h: Lagt till EMPTY_CONF_NO_LIST_i och - EMPTY_CONF_NO_LIST. - -Sat Dec 15 20:46:41 1990 Per Cederqvist (ceder at laila) - - * Depend.make: Jag bytte @\{63\} mot @@@* som {r mer portabelt. - -Tue Sep 18 20:46:42 1990 Per Cederqvist (ceder at lave) - - * get_time(): nytt format. Se services.h. - -Thu Sep 13 21:32:41 1990 Per Cederqvist (ceder at lave) - - * Ny port: 4894. Jag vill kunna k|ra nya ramkomd och gamla ramkomd - p} lave samtidigt... - -Tue Aug 28 13:53:36 1990 Per Cederqvist (ceder at lave) - - * Datafilerna heter nu ramkomd-data-2 och ramkomd-backup-2. De - anv{nds av den nya servern och inneh}ller de nya formaten p} - tider och textstatusar. - - De gamla filerna ramkomd-data och ramkomd-backup finns - fortfarande kvar och anv{nds av den gamla servern. Personer som - skapas i den kommer inte att finnas i den nya servern... - -Sun Aug 26 16:40:58 1990 Per Cederqvist (ceder at lage) - - * En klient i elisp har p}b|rjats. Den ligger under - 2kom/elisp-client/. - - * [ndringar p}g}r i servern. Just nu g}r den inte att k|ra. Jag - byter externt format p} Text_stat och time_t. I forts{ttningen - blir det en struct tm som |verf|rs. - -Tue Aug 21 19:27:07 1990 Per Cederqvist (ceder at lave) - - * get_text() tar nu tv} nya parametrar som anger f|rsta och sista - tecken i texten som man h{mtar. (Normalt torde det l|na sig att - h{mta hela texten p} en g}ng. Det {r nog bara om man k|r |ver - atlantlinan som det kanske blir segt.) - -Sat Aug 11 00:31:32 1990 Per Cederqvist (ceder at lave) - - * Nya funktioner: get_membership(), get_created_texts() - och get_members(). - - * Namnbyte: query_unread() heter nu query_read_texts(). S} - sm}ningom kommer jag att skriva en annan query_unread() som - returnerar antalet ol{sta brev en person har. - - * Till slut s} lyckades jag f} allt genom kompilatorn. Det gick }t - en del tid efter alla odokumenterade omorganisationer... Nu {r - bara fr}gan hur mycket som fungerar i verkligheten... - - * kom-types.c {r flyttad till server/ resp. isc-client/. Det gick inte - att ha det i samma fil l{ngre. - -Thu Aug 9 05:20:20 1990 Thomas Bellman (bellman at laila) - - * Makefilen {nnu mer f|rb{ttrad. Make depend mycket snyggare, - anv{nder ${MAKE} i st f make direkt. - - * Makefilen i toppdirret f|rb{ttrad, likaledes ig}r. Make clean i - toppdirret g}r nu ner och g|r make clean i underdirren ocks}. - Diverse andra f|rb{ttringar ocks} gjorda. - - * Lite omorganisationer gjorda ig}r. En del grejer nedflyttade i - directories f|r att f} ett renare toppdir. - -Fri Jul 27 01:21:45 1990 Per Cederqvist (ceder at lage) - - * Nu {r funktionerna i services.h dokumenterade, i alla fall lite - grann. Kommentarerna finns i server/services.c. De borde v{l - kopieras till services.h ocks}. Vi f}r v{l se om jag hinner det - n}gon g}ng p} denna sida ny}r... - -Wed Jul 25 14:35:52 1990 Per Cederqvist (ceder at lave) - - * F|ljande filer installerade: - - /usr/local/etc/ramkomd - /usr/local/etc/updateLysKOM - /usr/local/bin/kompost - /usr/local/bin/komlisten - - * ramkomd sparar numera alla texter, m|ten och personer var 15:e - minut. Det {r programmet /usr/local/etc/updateLysKOM som kopplar - upp sig och skickar anropet kom_sync() som vem som helst kan - g|ra. (Man beh|ver inte ens vara inloggad). updateLysKOM startas - fr}n min crontab p} lave. stdout skickas till 2kom/stdout, - stderr till 2kom/stderr. Alla logg-meddelanden kommer till - stderr. - - Om ramkomd inte {r ig}ng f|rs|ker updateLysKOM starta om - ramkomd. - - Data lagras i filerna /usr/local/src/2kom/db/ramkomd-data och - ramkomd-backup. - -Tue Jul 24 13:37:03 1990 Per Cederqvist (ceder at lave) - - * komlisten - ett program f|r att lyssna p} de asynkrona - meddelanden som skickas. 'komlisten lave 5 pw' eller 'komlisten - lave'. Den f|rsta varianten loggar in som person nummer 5 med - l|sen 'pw'. P} s} s{tt f}r den se alla texter som skapas i m|ten - d{r p 5 {r medlem. - -Mon Jul 23 04:01:55 1990 Per Cederqvist (ceder at lave) - - * kompost - ett program f|r att kolla om man har n}gon post i kom. - 'kompost lave 5' ser efter hur m}nga ol{sta brev person 5 har p} - det kom som k|r p} lave. - -Sun Jul 22 02:17:57 1990 Per Cederqvist (ceder at lave) - - * I kom/isc-client/ ligger k{llkoden till klient-sidan. Synopsis: - - #define CLIENT - #include "/usr/local/2kom/services.h" - - cc main.o ... -L/usr/local/2kom -lyskom - - * isc b|rjar bli klart (tror jag). Jag har i alla fall lyckats - koppla upp en micro-klient mot servern och skapat en person och - ett m|tet, och l}tit personen g} med i m|tet. - -Fri Jul 20 01:00:00 1990 Thomas Bellman (bellman at laila) - - * Backup tagen av hela LysKOM p} Inge Wallins optiska disk. - F|rhoppningsvis {r det helt i on|dan... - -Tue Jul 17 15:19:29 1990 Per Cederqvist (ceder at lave) - - * kom-types.h: Sista (?) {ndringen i Person-structen: - confs och no_of_confs har slagits ihop till - Membership_list conferences. - - Nu har vi inga pekare i Person-structen. Alla 'array/listor' - ligger inbakade i en list-typ. Det {r bara f|rvirrande att ha - det p} olika s{tt. Jag har just suttit i ett halvt dygn och - letat felet innan jag kom p} att confs pekade p} en variabel - lista... - -Sun Jul 15 04:43:20 1990 Thomas Bellman (bellman at laila) - - * Eftersom serverskrivarna (l{s Ceder) hade en del underliga - |nskem}l om att f} anv{nda konstiga funktioner som smalloc och - annat f|r minneshantering {ven i str{ngfunktionerna, tvingar jag - dem nu att anropa funktionen s_set_storage_management() f|r att - ange vilka funktioner som ska anv{ndas i st{llet f|r de vanliga. - Tyv{rr m}ste jag sj{lv g|ra det ocks}, men det {r betydligt - snyggare {n det s{tt som det l|stes p} innan. - -Fri Jul 13 13:12:23 1990 Per Cederqvist (ceder at laila) - - * kom-types.h: Jag lade till ett antal bitar i Personal_flags och - Priv_bits f|r framtida bruk. - - * kom-types.h: Person-structen: f{ltet 'texts' har bytt namn och - typ till 'Text_list created_texts'. - - * OMORGANISATION!!! Saker som l}g i kom-types.h som ska se - olika ut f|r server och klient, {r flyttade fr}n - client/client-types.h resp. server/server-types.h tillbaka till - kom-types.h. client/client-types.h och server/server-types.h {r - borttagna. - -Sat Jul 7 07:44:45 1990 Per Cederqvist (ceder at lave) - - * Det gick inte alls bra. Tydligen m}ste filerna som man cat:ar - ihop utg} fr}n samma directory... :-( - - * TAGS-filerna: I varje directory g|rs en TAGS-fil p} de filer som - finns d{r. I kom:/ g|rs en total TAGS-fil genom att cat:a ihop - dom. Jag {r inte helt s{ker p} att det {r s} smart, men vi f}r - se hur det g}r. - -Thu Jul 5 13:13:41 1990 Per Cederqvist (ceder at laila) - - * services.h: Ny funktion: delete_text(Text_no text_no); - -Tue Jul 3 01:12:50 1990 Thomas Bellman (bellman at laila) - - * services.h: Ny maskbit f|r get_person_stat(), GETP_READ_TEXTS, - som inneb{r att man vill ha listorna av l{sta texter tillsammans - med medlemskapslistan. Dessa ska inte skickas med om man inte - explicit ber om det; det finns query_unread(). - -Wed Jun 27 05:13:01 1990 Thomas Bellman (bellman at lave) - - * services.h: Alla funktionsdeklarationer {r omg{rdade av makrot - KOM_ som ser till att funktionerna heter 'kom_foo' p} - klientsidan och 'foo' p} serversidan. Detta {r beroende p} om - makrona CLIENT respektive SERVER {r definierade. Detta f|r att - vi ska slippa ha tv} services.h att underh}lla. - -Wed Jun 6 00:14:35 1990 Per Cederqvist (ceder at laila) - - * services.h: [ndrade 'String' till 'const String' i alla - funktionshuvuden. - - * glue: Directory som inneh}ller klister f|r att klistra ihop en - klient med servern. - - * services.h: Alla funktioner som f|rut hette 'foo' heter nu - 'kom_foo'. Anledningen {r att man vill kunna l{nka ihop klienten - och servern och f} ett singeluserkom innan Peter {r klar med - sitt paket... ;-) - -Tue May 29 16:17:53 1990 Per Cederqvist (ceder at lave) - - * services.h {r nu splittrad. server/services.h inneh}ller - funktionerna som de ser ut p} server-sidan, services.h som de - ser ut f|r klienten. - -Mon May 28 23:02:24 1990 Thomas Bellman (bellman at laila) - - * Summarize-Headers: Shell-script f|r att sammanfatta inneh}llet - i en .h-fil. - - * (Egentligen den 26:e) FileList inf|rd! En fil som inneh}ller - beskrivningar p} alla filer i ett dir. Shell-scriptet - List-Files f|r att lista vilka filer som inte {r beskrivna. - - * s-string.[ch]: Fler funktioner: s_skip_blanks(), s_strtol(). - -Sat May 26 15:02:48 1990 Per Cederqvist (ceder at laila) - - * Mailinglist: Ny fil som inneh}ller email-adresser p} alla de som - svarat p} mitt inl{gg i Linus-kom om mailinglistan. Det vore - fint om n}gon skickar ett mail till dom n{r LysKom {r ig}ng... - Tills vidare tar jag p} mig ansvaret f|r utskicken. - -Sat May 26 01:36:02 1990 Thomas Bellman (bellman at laila) - - * s-string.[hc]: Nya funktioner s_strhead() och s_usr_strhead(). - Testar om en str{ng {r en b|rjan p} en annan. - -Fri May 25 02:37:55 1990 Per Cederqvist (ceder at lave) - - * s-string.h: Nytt macro s_empty(str) som returnerar TRUE omm str - {r tom. - - * kom-types.h: Tog bort f{ltet 'Conf_type type' ur - Membership-structen. Det visar sig att det {r b{ttre att cacha - Conf_type tillsammans med namnet. - -Tue May 15 17:49:47 1990 Per Cederqvist (ceder at laila) - - * kom-types.h: Info_type och Info_datum: Ny typ: sent_at. - S} att man vet n{r en text {r skickad n{r den skickas i efterhand. - -Mon May 14 08:59:14 1990 Thomas Bellman (bellman at laila) - - * Biblioteket kom:/ansi-include skapat. Detta bibliotek - genoms|kes av cpp enligt Makefile (Template). I biblioteket - finns {n s} l{nge stdio.h, malloc.h och string.h. Strunta i - filen kom:/ansi.h. NU ska vi v{l {ntligen slippa ifr}n alla - problem vi haft med include-filer och odeklarerade funktioner. - Fyll g{rna p} med fler generella .h-filer. - -Sun May 13 23:12:23 1990 Per Cederqvist (ceder at lage) - - * kom-errno.[hc]: s} heter den nu. - -Sun May 13 23:05:23 1990 Thomas Bellman (bellman at laila) - - * s-string.[ch]: Skapad. V}r egen str{ngtyp (String) samt - funktioner f|r att manipulera dessa. - -Thu May 10 16:27:35 1990 Per Cederqvist (ceder at lage) - - * config.h: DEFENSIVE_CHECKS - definierad om vi {r defensiva. - -Wed May 9 17:34:31 1990 Linus Tolke (linus at laila) - - * Person-strukten anv{nder String och Mark_list ist{llet f|r - char * och Mark - - * Jag justerade ordningen f|r filerna som argument till etags. - Jag vill n{mligen n} typen Person p} mindre {n 3 steg! - -Tue May 8 19:36:44 1990 Per Cederqvist (ceder at lage) - - * bool heter numera Bool. - - * Ny typ: Success. Att anv{ndas av alla funktioner som returnerar - OK eller FAILURE. - -Fri May 4 01:25:23 1990 Per Cederqvist (ceder at lage) - - * services.h: create_conf tar nu {ven Conf_type type som argument. - P} s} vis kan ett hemligt m|te vara hemligt fr}n b|rjan. - -Thu May 3 00:56:35 1990 Per Cederqvist (ceder at lage) - - * kom-types.h: Nytt f{lt i Membership: Conf_type type - - * jin_errno heter numera kom_errno. - - * query_unread_mail heter numera query_unread och {r lite mer - flexibel - man kan fr}ga hur mycket ol{sta en viss person har - i ett visst m|te. - -Thu Apr 26 01:52:51 1990 Thomas Bellman (bellman at lage) - - * P{rm f|r listningar inskaffad. Gamla listningar av 2kom/ och - 2kom/client/ finns insatta. N{r ni tar ut listningar, s{tt in - dem i p{rmen. Den ligger i hyllan ovanf|r LLL. En gul p{rm - m{rkt "LysKOM". Observera att listningarna som sitter i den - just nu {r inaktuella, p g a.... - - * OMORGANISATION!!! Saker som l}g i kom-types.h som ska se - olika ut f|r server och klient, {r flyttade till - client/client-types.h resp. server/server-types.h. Samtidigt - togs types.h bort. - - * Listor i Person- och Conference-structarna {r nu egna typer. - - * 'get_person_stat()' och 'get_conf_stat()' tar numera en pekare - till en area d{r resultatet ska l{ggas. Dessutom skickar man - med en mask som talar om hur mycket information man vill ha. - -Wed Apr 25 02:38:32 1990 Thomas Bellman (bellman at laila) - - * Lade till 'footnote to' och 'footnote in' i misc_info. - - * Skapade 'kom-types.c' som typiskt inneh}ller konstanter och - annat som man tycker borde ligga i en .h-fil, men som inte kan - g|ra det om filen inkluderas i mer {n en k{llkodsfil. - -Wed Apr 25 00:49:01 1990 Per Cederqvist (ceder at laila) - - * services.h: add_member tar numera tv} parametrar f|r att ange - prioritet p} m|tet. add_member anv{nds {ven f|r att {ndra - prioritet p} ett m|te man redan {r med i. - -Sat Apr 21 13:52:12 1990 Per Cederqvist (ceder at lave) - - * Fixade en Makefile som generarar en TAGS-fil som inneh}ller allt - till servern. - - * kom-types.h: Nya privilegiebitar: admin och statistic. - -Fri Apr 20 14:09:26 1990 Per Cederqvist (ceder at lage) - - * kom-types.h: Ny typ Conf_nos. - - * services.h: Ny definition av lookup_name. Nu returneras en lista - med alla konferenser som matchar argumentet. - - * P} beg{ran av Bellman {r nu jin_errno en enum. - -Thu Apr 19 02:47:05 1990 Per Cederqvist (ceder at lave) - - * kom-types.h: Conf_type: nytt f{lt "no_stat". - Sec_bits: ny typ som anger vad en person vill h}lla - hemligt. - Person: nytt f{lt "flags". - -Wed Apr 18 00:08:22 1990 Per Cederqvist (ceder at lage) - - * services.h: get_marks har nu ingen parameter. Man kan bara titta - p} sina egna markeringar. - - * kom-types.h inkluderar nu {ven <stddef.h> - - * Skapade jin_errno.h. - - * services.h: alla funktioner som returnerade en struct - returnerar nu en pekare till motsvarande struct. - - * Ny funktion i services: query_unread_mail. (Se m 230) - diff --git a/FileList b/FileList deleted file mode 100644 index 55815ac0e..000000000 --- a/FileList +++ /dev/null @@ -1,136 +0,0 @@ -(Hey, Emacs, this is a -*- Indented-text -*- file!) - -* ansi-include/ - Directory containing ANSI-fied header files for the standard - libraries. - - -* ChangeLog - Log file where the progressing work and changes are sporadically - documented. You are encouraged to add an entry in this file - whenever you change something in this directory. - - -* client/ - Directory containing a TTY-based client for LysKOM, very similar to - the original KOM program from QZ. - - -* config.h - Configuration parameters for compiling. Contains among other - things all the stupid limits you really want to be without, all the - smart limits that has to be there to make it impossible to crash - the server, and lots of constants and configuration options. - - -* debug.h - Some #defines for debugging purposes. - - -* doc/ - Documentation of LysKOM; both internal and external. Also some - random thoughts members of the development team wanted to write - down during development. - - -* FileList - This file, describing all the files. - - -* kom-errno.c - Defines the variable 'kom_errno' and the function 'kom_perror()'. - Used for error handling in LysKOM. - - -* kom-errno.h - Defines the type 'Kom_err' and declares the variable 'kom_errno'. - The server sets the value of 'kom_errno' when an error occurs. - The function 'kom_perror()' is declared. - - -* kom-types.h - Declares the types used by LysKOM. Here are the types that are - common to both the server and the client. Types that look - different to the server and the client, are found in - 'server/server-types.h' and 'client/client-types.h' respectively. - - -* ldb/ - Directory containing the low-level database routines for the LysKOM - server. 'ldb' stands for Lyskom DataBase. - - -* List-Files - Shell script to list the files in this directory not documented in - the file 'FileList' (the one you are reading now). - - -* Mailinglist - List of mail addresses of people who want to be informed of the - progress of LysKOM. - - -* Makefile - Exactly what the name says. - - -* misc-types.h - Miscellaneous types and constants that are useful in many places in - LysKOM, but are not very LysKOM-specific. - - -* s-collat-tables.c - Collating tables used for the 's_usr_strcmp()' and - 's_usr_strhead()' functions in 's-string.h' - - -* s-collat-tables.h - Header file for 's-collat-tables.c' - - -* s-string.c - Routines for manipulating objects of type String as defined in - 's-string.h' - - -* s-string.h - Header file for 's-string.c' - Definies our own string type 'String', and declares the functions - in 's-string.c' - - -* server/ - Directory containing the LysKOM server, except for the low-level - database routines, which for historical reasons are in the separate - directory 'ldb/'. - - -* services.h - Declares all the services available from the LysKOM server. - - -* Summarize-Headers - Since we write our .h files with documentation in line, they - tend to get rather long, and it gets somewhat difficult to get - a quick overview of what functions are declared in the file. - This script cuts out all the "unnecessary" information: all - comments and all preprocessor lines (starting with #). - - -* TAGS - Tags table for use with Emacs. - - -* Template - Template for automatically generating 'Makefile'. 'Makefile' is - updated with the command 'make depend'. This should be given - whenever a change to 'Template' is done, or any new files are - added, or any dependecies are changed. Dependencies for normal C - files are generated automatically by this. - If 'Makefile' should become garbled, copy 'Template' to 'Makefile' - and do a 'make depend'. - - -* test-services/ - Directory containing programs to test parts of the server. Used by - ceder, and should not be distributed. diff --git a/Makefile b/Makefile deleted file mode 100644 index 8377be37d..000000000 --- a/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -TOPDIR = /usr/lyskom -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -SUBDIRS = doc junk scripts src - -all: includes libraries binaries - -includes: - -mkdir $(INCLUDEDIR) - for i in $(SUBDIRS) ; \ - do \ - echo making includes in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) includes) \ - done - - -libraries: - -mkdir $(LIBDIR) - for i in $(SUBDIRS) ; \ - do \ - echo making libraries in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) libraries) \ - done - - -binaries: - for i in $(SUBDIRS) ; \ - do \ - echo making binaries in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) binaries) \ - done - - -install: - for i in $(SUBDIRS) ; \ - do \ - echo making install in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) install) \ - done - - -depend: includes - for i in $(SUBDIRS) ; \ - do \ - echo making depend in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) depend); \ - done - - -clean: - $(RM) *~ core - for i in $(SUBDIRS); \ - do \ - echo making clean in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) clean) \ - done diff --git a/doc/Buggar.fixade b/doc/Buggar.fixade deleted file mode 100644 index 96c413569..000000000 --- a/doc/Buggar.fixade +++ /dev/null @@ -1,449 +0,0 @@ -1991-01-13 ceder@Lysator.LiU.SE 000066 ----------------------------------------------------------------------- -]tg{rdat av: ceder -Program: elisp-klient, servern -Till version: Servern 0.09 -Orsak: servern ger en lista tillbaka inneh}llande nollor ----------------------------------------------------------------------- -Om man f|rs|ker }terse raderade texter s} visas "Texten finns inte." -Det {r lite jobbigt om man t ex g|r "]terse alla av Pell Pell Pell". ----------------------------------------------------------------------- - - -1991-01-04 Bellman@Lysator.LiU.SE 000064 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 0.08 - klart ----------------------------------------------------------------------- -Ett inl{gg kan kommentera ett annat flera g}nger. ----------------------------------------------------------------------- - - -1990-12-18 Bellman@Lysator.LiU.SE 000062 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: servern -Till version: 0.07 - klart ----------------------------------------------------------------------- -Add-recipient tycks alltid s{tta mottagaren som vanlig mottagare {ven -om man anger cc-recpt. ----------------------------------------------------------------------- - -1990-12-09 linus@Lysator.LiU.SE 000058 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: Elisp-klienten -Till version: 0.18.1 - klart -Orsak: LUNATIX ----------------------------------------------------------------------- -Nanny klarar inte av att skicka paket som {r l{ngre {n 2048 tecken. -Elisp-klienten borde inte skicka st|rre paket utan borde dela p} l}nga -texter. ----------------------------------------------------------------------- - - -1990-12-06 linus@lysator.liu.se 000057 ----------------------------------------------------------------------- -]tg{rdas av: linus@lysator.liu.se -Program: Elisp-klienten -Till version: 0.18 - fixat ----------------------------------------------------------------------- -Filterna lyskom-init-filter och lyskom-filter gl|mmer i vissa fall att -s{tta tillbaka current buffer. Detta resulterar i ganska m}nga -Buffer is read-only *nanny* -I synnerhet p} fr}gan {r detta f|rsta g}ngen du k|r lyskom (yes/no): ----------------------------------------------------------------------- - - -1990-11-20 ceder@lysator.liu.se 000054 ----------------------------------------------------------------------- -]tg{rdas av: Inge Wallin -Program: elisp-klienten -Till version: 0.18.1 ----------------------------------------------------------------------- -N{r man skriver en presentation av ett m|te markeras den inte (alltid) -som presentation av servern. ----------------------------------------------------------------------- - - -1990-11-14 linus@lysator.liu.se 000051 ----------------------------------------------------------------------- -]tg{rdas av: Ingen }tg{rd. Felaktig buggrapport. -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -N{r jag l{ser med djup-f|rst flaggan satt och har l{st ett inl{gg som -har kommentarer s} l{ggs dessa ol{sta kommentarer upp i en egen -to-read-info. -N{r jag nu g|r n{sta m|te eller g}r till n}got annat m|te (utan att ha -l{st slut dessa kommentarer) f|rsvinner denna to-read-info. - -Den borde flyttas med till lyskom-to-do-list s} att man kommer in i -samma kommentarkedja n{sta g}ng man kommer till m|tet. ----------------------------------------------------------------------- - - -1990-11-12 ceder@lysator.liu.se 000050 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: fixat /ceder ----------------------------------------------------------------------- -Text-garbningen tar inte h{nsyn till om inl{gg {r skickade "nyss". Om -dom {r tillr{ckligt gamla s} raderas de {nd}. Felet ligger i -garb_text() i text-garb.c. ----------------------------------------------------------------------- - - -1990-11-11 ceder@lysator.liu.se 000049 ----------------------------------------------------------------------- -]tg{rdas av: (Ingen }tg{rd. F|rdelen med ett m{nniskol{sbart format - {r stora, och dessutom tj{nar man inte s} mycket.) -Program: protokoll -Till version: B ----------------------------------------------------------------------- -Ca dubbelt s} mycket data |verf|rs via TCP som det man f}r ut ur -anv{ndarinterfacet. Protokoll B b|r nog anv{nda r}a bytes, och inte -skicka tal i ASCII. ----------------------------------------------------------------------- - - -1990-11-11 ceder@lysator.liu.se 000047 ----------------------------------------------------------------------- -]tg{rdas av: pen -Program: server -Till version: 0.07 - klart -Orsak: Blocking writes. ----------------------------------------------------------------------- -Servern h{nger sig i flera minuter ibland, utan k{nd orsak. Efter upp -till 10 minuter hoppar den ig}ng igen av sig sj{lv. ----------------------------------------------------------------------- - - -1990-11-04 ceder@lysator.liu.se 000042 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klienten -Till version: 0.18.1 - klart ----------------------------------------------------------------------- -Det finns inget "endast"-kommando i elisp-klienten. ----------------------------------------------------------------------- - - -1990-10-28 ceder@lysator.liu.se 000040 ----------------------------------------------------------------------- -]tg{rdas av: linus@lysator.liu.se -Program: elisp-klienten -Till version: 0.12 ----------------------------------------------------------------------- -Subject: L{gga in en text. BUGFIX - -Jag k|r med -kom-write-texts-in-other-window t -och har retat mig p} att det alltid l{mnar 2 f|nster ({ven om jag bara -hade ett). - -N{r jag skulle fixa det m{rkte jag att det den gjorde egentligen var -ganska komplicerat och jag vill h{vda att min l|sning {r snyggare. -Jag har i koden i detta brev markerat var skillnaderna finns. -Kod utan markeringarna (och oindenterat) finns i -~linus/.el/lyskom-write.el. - -Dessa {r min tv} funktioner att ers{tta dem i lyskom.el: - - (defun lyskom-edit-text (proc misc-list subject &optional handler &rest data) - "Edit a text in a new buffer. - PROC is the associated process. - MISC-LIST is the default misc-list. - SUBJECT is subject (a string). - HANDLER is a function to call when the text has been created. - DATA is extra data to send to the function. HANDLER is called with - (apply HANDLER text-no DATA) - where text-no is the number of the text." - (setq lyskom-is-writing t) - (lyskom-end-of-command) - (let - ((buffer (generate-new-buffer - (concat (buffer-name (process-buffer proc)) "-edit"))) - (config (current-window-configuration))) - (cond - (kom-write-texts-in-other-window - (switch-to-buffer-other-window buffer)) - (t (switch-to-buffer buffer))) - (lyskom-edit-mode) - (setq lyskom-proc proc) - (make-local-variable 'lyskom-edit-handler) - (make-local-variable 'lyskom-edit-handler-data) -> (make-local-variable 'lyskom-edit-return-to-configuration) - (setq lyskom-edit-handler handler) - (setq lyskom-edit-handler-data data) -> (setq lyskom-edit-return-to-configuration config) - (lyskom-edit-insert-miscs misc-list subject) - (message "Tryck C-c C-c f|r att skicka in texten.")) - (set-buffer (process-buffer lyskom-proc))) - - (defun lyskom-create-text-handler (text-no edit-buffer) - "Handle an attempt to write a text." - (lyskom-tell-server "") - (cond - ((null text-no) - (lyskom-insert - (format "\nTexten kunde ej skapas. Felkod: %d.\n" lyskom-errno)) - (ding) - (message "Texten kunde ej skapas. Felkod: %d." lyskom-errno)) - (t - (lyskom-insert (format "\nText nummer %d skapad.\n" text-no)) - - ;; Immediately mark the text as read if kom-created-texts-are-read is set. - - (cond - (kom-created-texts-are-read - (lyskom-is-read text-no) - (initiate-get-text-stat 'background 'lyskom-mark-as-read - text-no) - (lyskom-run 'background 'set 'lyskom-dont-change-prompt nil))) - - - (set-buffer edit-buffer) ;Need local variables. - -> ;; Select the old configuration. - -> (set-window-configuration lyskom-edit-return-to-configuration) - - ;; Apply handler. - - (if lyskom-edit-handler - (let ((hnd lyskom-edit-handler) - (dta lyskom-edit-handler-data)) - (set-buffer (process-buffer lyskom-proc)) - (apply hnd text-no dta))) - (set-buffer (process-buffer lyskom-proc)) - - ;; Kill the edit-buffer. - - (kill-buffer edit-buffer))) - (lyskom-end-of-command)) ----------------------------------------------------------------------- - - -1990-10-25 mattias@lysator.liu.se 000036 ----------------------------------------------------------------------- -]tg{rdas av: ??? -Program: elispklienten och servern??? -Till version: ??? ----------------------------------------------------------------------- -Tomma texter fungerar inte s} bra. ----------------------------------------------------------------------- - - -1990-10-21 ceder@lysator.liu.se 000027 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: klart sedan l{nge ----------------------------------------------------------------------- -En person som {r raderad raderas inte helt. Man kan fortfarande skapa -texter med personen som mottagare. De f}r ett lokalt nummer i m|tet. -Suck. Allvarligt! ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000018 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: klart sedan l{nge ----------------------------------------------------------------------- -Det g}r inte att l{sa i kommentarsordning. "}k" {r inte generellt. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000017 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 6 - klart ----------------------------------------------------------------------- -Det g}r inte att markera texter. Det fattas kod i servern. ----------------------------------------------------------------------- - - -1990-10-20 ceder@lysator.liu.se 000016 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 6 - klart ----------------------------------------------------------------------- -Gamla inl{gg raderas aldrig. B|r }tg{rdas snarast! ----------------------------------------------------------------------- - - -1990-10-20 ceder@lysator.liu.se 000015 ----------------------------------------------------------------------- -]tg{rdas av: linus?? -Program: server -Till version: ??? ----------------------------------------------------------------------- -Asynkrona meddelanden {r inte f{rdigimplementerat. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000012 ----------------------------------------------------------------------- -]tg{rdas av: Linus -Program: elisp-klient -Till version: 0.16 - klart ----------------------------------------------------------------------- -Elisp-klienten borde skriva ut "Kommentar till text 289 av -<f|rfattare>". "Kommentar i text 435 av <f|rfattare>" borde skrivas -efter texten. ----------------------------------------------------------------------- - - -1990-10-20 ceder@lysator.liu.se 000011 ----------------------------------------------------------------------- -]tg{rdas av: Inge Wallin -Program: elisp-klient -Till version: ??? ----------------------------------------------------------------------- -Elisp-klienten borde skriva ut vilket kommando den h}ller p} att g|ra -s} fort man har startat det. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000009 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 0.04 - klart -Program: elisp-klient -Till version: 0.10 - klart -Program: libyskom.a -Till version: () - klart ----------------------------------------------------------------------- -who_is_on borde s{nda med en connection. ----------------------------------------------------------------------- - - -1990-10-20 ceder@lysator.liu.se 000008 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 0.04 - klart -Program: elisp-klient -Till version: 0.10 - klart -Program: libyskom.a -Till version: () - klart -Program: tty-klient (}tg{rdas av Bellman) -Till version: ----------------------------------------------------------------------- -get_conf_stat och get_person_stat beh|ver inte flaggan 'mask' l{ngre. -Den b|r tas bort. ----------------------------------------------------------------------- - - - -1990-10-20 Bellman@Lysator.LiU.SE 000007 ----------------------------------------------------------------------- -]tg{rdas av: Bellman -Program: elisp-klient -Till version: 0.10 - klart ----------------------------------------------------------------------- -Elisp-klienten: N{r man h}ller p} att skriva en text, borde den -tycka att raden "--- Skriv texten nedanf|r denna rad ---" skiljer -tv} stycken }t. Denna str{ng b|r f | vara en variabel, inte en -magisk str{ng mitt inne i k{llkoden. ----------------------------------------------------------------------- - - -1990-10-20 Bellman@Lysator.LiU.SE 000006 ----------------------------------------------------------------------- -]tg{rdas av: Bellman -Program: elisp-klient -Till version: 0.10 - klart ----------------------------------------------------------------------- -Elisp-klienten: Implementera "personligt (svar)". Borde vara -ganska enkelt. ----------------------------------------------------------------------- - - -1990-10-20 Bellman@Lysator.LiU.SE 000005 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klient -Till version: klart sedan l{nge ----------------------------------------------------------------------- -Elisp-klienten: f|r att ange att man vill kommentera ett annat -inl{gg {n det man nyss l{st, anger man inl{ggsnumret som argument -med C-u till k. Dvs n}got s}nt h{r: - (defun kom-write-comment (&optional arg) - (interactive "P") - (let ((text-to-comment (and arg lyskom-current-text))) - ...)) -eller vad variablerna nu heter. ----------------------------------------------------------------------- - - -1990-10-19 ingwa@isy.liu.se 000003 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klient -Till version: 0.11 - klart ----------------------------------------------------------------------- -Elisp-klienten b|r byta prompt n{r man st}r och v{ntar, fr}n -"(Se) tiden" till "(G} till) n{sta m|te" ----------------------------------------------------------------------- - - -1990-10-19 Tommy Persson @ LysKOM 000002 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klient -Till version: 0.10 - klart ----------------------------------------------------------------------- -703 1990-10-19 11:00 /20 rader/ Tommy Persson -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <41> -[rende: ]terse kommenterad --------------------------------------------------------- - -H{r kommer ett }terse kommenterat kommando: - -(defun kom-view-commented-text () - (interactive) - (let ((text-no nil)) - (save-excursion - (re-search-backward "/.*rader/" nil t) - (if (search-forward "Kommentar till text" nil t) - (setq text-no (read - (buffer-substring (point) - (save-excursion - (forward-word 1) - (point))))))) - (if text-no - (progn - (lyskom-start-of-command) - (lyskom-insert (format "]terse text nummer %d.\n" text-no)) - (lyskom-view-text text-no))))) - -(703) ----------------------------------------------------- ----------------------------------------------------------------------- - - -1990-10-18 Aronsson@Lysator.LiU.SE 000001 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: server -Till version: 0.04 - klart -Orsak: Aronsson var inloggad p} flera sessioner. N{r han - raderade sig sj{lv skulle han ha blivit utloggad fr}n - alla sessioner. ----------------------------------------------------------------------- -Jag k|rde r} telnet. Skrev kommandot 11 11 (delete-conf) 8 (Lars -Aronsson). Detta var i o.f.s. ett misstag, jag hade t{nkt g|ra 13 -(get-conf-stat). Men f|ljden blev att hela servern kraschade. ----------------------------------------------------------------------- diff --git a/doc/Bugrapporter b/doc/Bugrapporter deleted file mode 100644 index ec38dd74c..000000000 --- a/doc/Bugrapporter +++ /dev/null @@ -1,775 +0,0 @@ -Filen inneh}ller bugrapporter, ideer och andra f|rslag till -f|rb{ttringar p} LysKOM och dess ing}ende program. L{gg nya buggar -f|rst i filen. En mall f|r en buggrapport kan s{ttas in med C-x g m. - - -1991-03-03 ceder@lysator.liu.se 000072 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: -Orsak: ----------------------------------------------------------------------- -isc_getnextevent borde anv{nda ett write-set i select(). Som det {r nu -kan en klient f} v{nta 2 sekunder p} data. ----------------------------------------------------------------------- - -1991-02-28 Bellman@Lysator.LiU.Se 000071 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: -Orsak: ----------------------------------------------------------------------- -Version 0.28. Ibland f}r man prompten "L{sa n{sta text", trots att -man borde f}tt "G} till n{sta m|te" f|ljt av "L{sa n{sta text". ----------------------------------------------------------------------- - - - -1991-02-15 ceder@Lysator.LiU.SE 000070 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: -Orsak: ----------------------------------------------------------------------- -add_recipient med m}nga flera skickar ej ut n}got asynkront meddelande. ----------------------------------------------------------------------- - - - -1991-02-15 ceder@Lysator.LiU.SE 000069 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: -Orsak: ----------------------------------------------------------------------- -Det ska, genom att g|ra g|ra add_recipient, g} att {ndra en recpt till -cc_recpt (och inte bara }t andra h}llet). En mottagare ska, precis som -nu, inte f} vara b}de recpt och cc_recpt. ----------------------------------------------------------------------- - -1991-02-08 ceder@Lysator.LiU.SE 000068 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: -Orsak: ----------------------------------------------------------------------- -kom_info, som bl a inneh}ller motd_of_lyskom, sparas inte. N{r man -startar om servern {r all info gl|md. ----------------------------------------------------------------------- - -1991-02-05 linus@Lysator.LiU.SE 000067 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elispklienten och emacs 18.56 -Till version: -Orsak: ----------------------------------------------------------------------- -O{ndlig loop n}gonstans n{r filterfunktionerna anv{nds f}r Emacs 18.56 -att h{nga sig h}rt. (G}r ej att bryta med C-G utan forts{tter att k|ra -n{r jag svara jag p} fr}gan continuing? - -Jag har m{rkt det n{r -- Jag skapade ett nytt m|te (fick inte skriva presentation f|r den - h{ngde sig innan.) -- N{r jag skrev ett inl{gg och var i en annan buffert innan den fick - svar. ----------------------------------------------------------------------- - -1991-02-01 ceder@Lysator.LiU.SE 000066 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: -Orsak: ----------------------------------------------------------------------- -Det finns ingen gr{ns p} hur mycket man kan lagra i en utk| i -isc-rutinerna. ----------------------------------------------------------------------- - - -1991-01-10 Bellman@Lysator.LiU.SE 000065 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: ----------------------------------------------------------------------- -Info-strukturen b|r {ven inneh}lla hur l{nge servern varit uppe, och -annat sm}tt och gott som kan vara kul att veta. ----------------------------------------------------------------------- - - - -1991-01-03 ceder@Lysator.LiU.SE 000063 ----------------------------------------------------------------------- -]tg{rdas av: -Program: servern? speciell demon? -Till version: -Orsak: Kultv{rde. ----------------------------------------------------------------------- -Det kunde vara skoj att kunna g|ra "finger @lyskom.lysator.liu.se" och -f} n}got i stil med: - -@finger @lyskom.lysator.liu.se - - Wed 2-Jan-91 15:27:08 Up 718:34:00 - 3+2 Jobs Load av 0.20 0.07 0.00 - - No LysKOM administrator in attendance - - Job Line Activity User Where - 22 p1 Reading ceder LysKOM internals - 23 p2 Waiting noppe Inl{gg }t mig - 24 p3 Reading pell Hackers (@) Nanny - - 1 172 LDB OPERATOR - 2 173 KOMSTAT Statistikid f|r statistikinsamling - -(Pell Pell Pell kom med den exakta utformningen). ----------------------------------------------------------------------- - - -1990-12-13 Linus@Lysator.LiU.SE 000061 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: -Orsak: Emacs g|r inte uppdatering av minibufferten efter - sit-for tiden n{r den skrivit i message-arean. ----------------------------------------------------------------------- -Asynkrona meddelanden skriver |ver minibufferten n{r man {r i den. -Borde kunna stoppas n{r man h}ller p} i den bufferten. ------- fotnot av ceder: ----- -Det {r kanske b{ttre att l}ta klienten l{sa i den vanliga bufferten i -st{llet f|r i minibufferten. Nackdelen {r att det kanske blir sv}rt -att fixa completion. ----------------------------------------------------------------------- - - -1990-12-13 Linus@Lysator.LiU.SE 000060 ----------------------------------------------------------------------- -]tg{rdas av: Inge Wallin, ISY -Program: elisp-klienten -Till version: 0.18.5 -Orsak: ] k {r en v{ldigt enkel funktion. ----------------------------------------------------------------------- -} k borde g|ra }terse det kommenterade, samt alla inl{gg som detta -inl{gg {r fotnot till. ----------------------------------------------------------------------- - -1990-12-10 ceder@lysator.liu.se 000059 ----------------------------------------------------------------------- -]tg{rdas av: -Program: alla -Till version: ----------------------------------------------------------------------- -Det borde finnas ett s{tt att markera en region av en text. ----------------------------------------------------------------------- - -1990-11-25 ceder@lysator.liu.se 000056 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: ----------------------------------------------------------------------- -Det b|r finnas n}got s{tta att st{nga av asynkrona meddelanden (t ex -n{r man k|r r}tt). ----------------------------------------------------------------------- - - -1990-11-23 ceder@lysator.liu.se 000055 ----------------------------------------------------------------------- -]tg{rdas av: -Program: servern -Till version: ----------------------------------------------------------------------- -Det b|r finnas en gr{ns p} hur m}nga inl{gg man f}r markera som l{sta -i ett m|te, f|r att f|rhinda att n}gon f}r en alltf|r stor lista. -Denna bugg har l}g prioritet. --- -Fotnot (1991-01-24): N{r Inges paket f|r Numlist {r klart kommer det -h{r inte att spela n}gon roll. Denna bugg kr{ver ingen annan }tg{rd. ----------------------------------------------------------------------- - -1990-11-14 ceder@lysator.liu.se 000053 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: ----------------------------------------------------------------------- -Difftime anv{nds inte alltid n{r den borde anv{ndas. Det finns st{llen -d{r '-' anv{nds f|r att f} fram en diff i sekunder. ----------------------------------------------------------------------- - - -1990-11-14 ceder@lysator.liu.se 000052 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: ----------------------------------------------------------------------- -cached_get_garb_nice har ingenstans att h{mta garb_nice fr}n. Den -cacheas inte. I ramkomd {r det ju inget problem... ----------------------------------------------------------------------- - - -1990-11-11 ceder@lysator.liu.se 000048 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server eller elisp-klient -Till version: ----------------------------------------------------------------------- -N{r servern g}r ner kan det h{nda att man f}r l{sa om texter som man -har skrivit sj{lv under den sista sessionen. Det tyder p} en bugg - -sparas inte det ordentligt? Eller {r det klienten som g|r fel? Texten -markeras ju som l{st s} fort man skapar den. Eftersom texten har -hunnit sparas p} disk s} borde info om att man har l{st dom ocks} vara -sparat... ----------------------------------------------------------------------- - - -1990-11-11 pen@lysator.liu.se 000047 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-client -Till version: ----------------------------------------------------------------------- -Asyncrona meddelanden kan komma "f|r tidigt" och f|rst|ra. Om en text -skapas under inloggningssekvensen kan det h{nda att man f}r l{sa den -tv} g}nger. ----------------------------------------------------------------------- - - -1990-11-11 bellman@lysator.liu.se 000046 ----------------------------------------------------------------------- -]tg{rdas av: Linus Tolke Y -Program: elisp-client -Till version: 0.27 -Orsak: Macrot lyskom-traverse tilldelade elementet det - snurrade med. ----------------------------------------------------------------------- -Om 3 {r en fotnot till text 2 som {r en kommentar till text 1 s} f}r -man l{sa dom i ordning 1, 3, 2, fast det ju borde vara 1, 2, 3. ----------------------------------------------------------------------- - - - -1990-11-04 ceder@lysator.liu.se 000045 ----------------------------------------------------------------------- -]tg{rdas av: -Program: servern -Till version: ----------------------------------------------------------------------- -Servern censurerar inte de asyncrona meddelandena tillr{ckligt. Bl a -s} talar den om n{r man g}r till ett skyddat m|te. (tror jag) ----------------------------------------------------------------------- - - -1990-11-04 ceder@lysator.liu.se 000044 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -N{r man ska ange siffra i en minibuffert s} kommer den ibland till fel -buffert. Det finns {ven andra mystiska fel vad g{ller val av buffert. -Man f}r till exempel inte byta buffert n{r man h}ller p} att l{gga in -en text. ----------------------------------------------------------------------- - - -1990-11-04 ceder@lysator.liu.se 000043 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -Fel syntaxtabell n{r man skriver inl{gg. ---------- -Linus: Delvis avhj{lp av att man from version 0.12 kan v{lja vilken -mode som klienten anv{nder sig av innan den s{tter de speciella -lyskom-editflaggorna (lyskom-edit-mode-mode-hook). ----------------------------------------------------------------------- - - -1990-10-31 ceder@lysator.liu.se 000041 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -N{r man har skrivit en text byter klienten ut current buffert mot -LysKOM, och inte Lyskom-edit-bufferten. -kom-write-texts-in-other-window {r nil. ----------- -Sedan version 0.12 s} kommer bufferten ih}g vilken -`window-configuration' som g{llde innan man startade editeringen av -texten. ----------------------------------------------------------------------- - - -1990-10-28 ceder@lysator.liu.se 000039 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -Om man har kom-write-texts-in-other-window t s} kommer det inte n}gon -ny prompt n{r man skickar in texten. ----------------------------------------------------------------------- - - -1990-10-28 Aronsson@Lysator.LiU.SE 000038 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -1641 1990-10-28 01:14 /9 rader/ Lars Aronsson -Kommentar till text 1612 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <105> -[rende: Version 0.11b --------------------------------------------------------- -En ide {r denna: S} l{nge allt g}r bra k|r man Remote Procedure Calls -mot servern: Man skickar en fr}ga och inv{ntar ett svar. Hela tiden -k|r man med ett och samma fr}ge-ID (det d{r f|rsta numret). Det kan -man g|ra eftersom man ju inv{ntar svaret innan man skickar n{sta -fr}ga. N{r sedan anv{ndaren trycker R, s} |kar man fr}ge-ID med ett -och l{gger sig i topp-loopen. Nu skickar man en ny fr}ga (med nya -fr}ge-ID och som resultat av ett nytt kommando). Om det uteblivna -svaret p} en gammal fr}ga (f|re R) dyker upp, s} har det fel fr}ge-ID -och man ignorerar det (men l{ser bort hela - man vet ju datatypen). -(1641) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-25 ceder@lysator.liu.se 000037 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klienten -Till version: ----------------------------------------------------------------------- -Det finns }tskilliga st{llen d{r det inte kontrolleras att man inte -f|rs|ker g|ra n}got med en *-stat som {r nil. ----------------------------------------------------------------------- - - -1990-10-22 pell@isy.liu.se 000035 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -1371 1990-10-23 20:50 /3 rader/ Pell Pell Pell -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <82> -[rende: V{nta --------------------------------------------------------- -N{r man ligger i V{nta- och har kom i en icke-visad buffert och det kommer -ett nytt inl{gg, s} s{tts point till n}gon slumpvis plats i bufferten s} -att man alltid f}r b|rja med M-> innan man kan l{sa det nya inl{gget... /PPP -(1371) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-22 linus@Lysator.LiU.SE 000034 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -1383 1990-10-23 23:03 /16 rader/ Linus Tolke Y -Mottagare: MUD (erfarenhetsutbyte) <2> -[rende: Mitt hack f|r att fixa s} att alla kan se vilket inl{gg jag kommenterar. --------------------------------------------------------- -(defun lyskom-write-comment (text-stat subject) - "Write a comment to the text associated with TEXT-STAT." - (lyskom-start-of-command) - (cond - ((null text-stat) - (lyskom-insert "Jag f|rst}r inte vilken text du vill kommentera.") - (lyskom-end-of-command)) - (t - (lyskom-tell-server - (concat "Skriver kommentar till inl{gg " - (text-stat->text-no text-stat) - ".")) - (lyskom-edit-text lyskom-proc - (lyskom-comment-recipients text-stat) - subject)))) - -(1383) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-22 Flera olika 000033 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Allm{nna funderingar -Till version: B ----------------------------------------------------------------------- -1385 1990-10-23 23:07 /21 rader/ Lars Aronsson -Kommentar till text 1369 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <83> -[rende: Lagringsformat p} texter --------------------------------------------------------- -Ni har gjort en del antaganden "servern bryr sig inte om...", vilket -s{kert l}ter riktigt i era |ron. Visst skall det vara s}, visst skall -servern klara att lagra nulltecken och annat. Men det finns flera -niv}er i en server. Lite h|gre upp {n den rena lagringen kommer -tillhandah}llandet av tj{nsten att lagra meddelanden mellan m{nniskor. - -Det {r visserligen inte n|dv{ndigt att samma personer tillhandah}ller -tj{nsten som har skrivit programmet, om n}gon tar upp en LysKOM server -p} KTH f|r att |verf|ra bin{ra Commodore 64 program, s} -tillhandah}ller de ju en annan tj{nst {n den p} Laila LysKOM. Men jag -tror att det blir mest praktiskt om ni programmerare har hand {ven om -tj{nsten h{r p} Laila. - -[ven om deltagarna i Laila LysKOM har olika utrustning, s} m}ste ett -meddelande kunna n} alla och d} m}ste det finnas regler f|r hur det -lagrade skall tolkas. Som nu debatten om ISO 8859 (8 bitar) eller ISO -646 (7 bitar). Om jag vill skicka ett meddelande till andra m{niskor, -vill jag ju vara s{ker p} att det lagras s} att de kan l{sa det. Om -jag vill lagra bokstaven Q s} m}ste ni best{mma vad jag skall skicka. -Det enklaste s{ttet {r att h{nvisa till en standard. Det ligger b{st i -tiden (ni skriver ju i moderna ANSI-C) att d} v{lja ISO 8859-1. -(1385) ----------------------------------------------------- - -Kommentar till text 1369 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <84> -Kommentar i text 1394 -Kommentar i text 1413 -[rende: Lagringsformat p} texter --------------------------------------------------------- -Man skulle kunna lagra in info-byte f|r varje text som talar om vilken -teckenupps{ttning texten {r skriven i. (0 = SW-ASCII, 1 = US-ASCII, -2 = ISO n}nting), som klienten sedan f}r med varje text. Eller? - -(1391) ----------------------------------------------------- - -1413 1990-10-24 01:55 /4 rader/ Lars Aronsson -Kommentar till text 1391 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <86> -Kommentar i text 1414 -[rende: Lagringsformat p} texter --------------------------------------------------------- -Nej, pen, det {r f|r jobbigt. Klienten blir f|r stor. B{ttre att -"protokoll B" betyder 7-bit svensk ISO 646 och "protokoll A" betyder -8-bit ISO 8859-1, men att alla texter lagras i ISO 8859-1. -Men jag ser inget behov av att k|ra annat {n ISO 8859-1 rakt |ver. -(1413) ----------------------------------------------------- ----------------------------------------------------------------------- - - -1990-10-22 pell@isy.liu.se 000032 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -1232 1990-10-22 13:16 /3 rader/ Pell Pell Pell -Kommentar till text 1168 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <72> -[rende: Avbrott: hur ska det fungera? --------------------------------------------------------- -H|gt nummer h|g prioritet! D} har jag fel prioritet p} alla mina m|ten... -Fast oftast orkade jag inte fundera p} det n{r jag fick fr}gan. Sn{lla -ceder, g|r defaultsvar till de b}da fr}gorna om prioritet och placering. /PPP -(1232) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-22 Mange Nilsson @ LysKOM 000031 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -1189 1990-10-22 09:24 /11 rader/ Mange Nilsson (hmd) -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <69> -[rende: Vad h{nder? --------------------------------------------------------- -Med j{mna mellanrum nu under morgonen s} har jag f}tt: - Symbol's function definition is void: nil -efter att jag l{st en text. N{r man sen trycker p} RETURN s} kommer: - lyskom-format-object: no support for object -Fixas visserligen snabbt med ett kom-recover, men n}t fel {r det... - -H-Maneg -(1189) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-22 Mattias@Lysator.LiU.SE 000030 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Elisp-klient -Till version: ----------------------------------------------------------------------- -1162 1990-10-22 02:55 /3 rader/ Mattias Olofsson -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <64> -Kommentar i text 1178 -[rende: Bug? --------------------------------------------------------- - Om man skickar en tom str{ng (0H r}tt) som text i ett inl{gg s} -skrivs 'Det finns ingen s}dan text.' ut p} {renderaden i -elispklienten. Ska det vara s}? /mo -(1162) ----------------------------------------------------- - -1178 1990-10-22 06:13 /2 rader/ Mattias Olofsson -Kommentar till text 1162 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <68> -[rende: Bug? --------------------------------------------------------- - Dessutom markeras inte brevet som l{st, jag f}r l{sa det varje -g}ng jag startar elispklienten. /mo -(1178) ----------------------------------------------------- - -1314 1990-10-23 04:38 /2 rader/ Mattias Olofsson -Kommentar till text 1178 -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <75> -[rende: Bug? --------------------------------------------------------- - ...dessutom f}r jag l{sa det varje g}ng jag har g}tt med i ett nytt -m|te. /mo -(1314) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-22 ingwa@isy.liu.se 000029 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Elisp-klient -Till version: ----------------------------------------------------------------------- -1167 1990-10-22 03:59 /4 rader/ Inge Wallin -Mottagare: LysKOM Elisp-klient; buggar, nyheter och annat. <66> -[rende: Tr}kig sak --------------------------------------------------------- -Om man har haft en emacs stoppad l{nge med lyskom ig}ng s} f}r man -"text n skapad!" d{r olika n kan vara ganska m}nga. Klienten borde -inte skriva ut mer {n en "text n skapad!" n{r man v{ntar. - -(1167) ----------------------------------------------------- ----------------------------------------------------------------------- - - - -1990-10-21 Bellman@Lysator.LiU.SE 000028 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Elisp-klient -Till version: ----------------------------------------------------------------------- -Om man ger anger en text som inte finns till "k" eller "p", f}r -man till svar "Wrong type argument: cons, nil". Inte s} snyggt. ----------------------------------------------------------------------- - - - -1990-10-21 ceder@lysator.liu.se 000026 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -M|ten med h|g prioritet avbryter inte m|ten med l}g prioritet i elisp- -klienten. ----------------------------------------------------------------------- - - - -1990-10-21 ceder@lysator.liu.se 000025 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Klienten h{mtar samma m|tesstatus flera g}nger i rad i bland. -L|sning: en lista som h}ller reda p} vilka conf-stats man fr}gat efter -utan att f} svar. Om den finns p} listan s} k|r man en (lyskom-run -'cache-get-conf-stat conf-no) i st{llet f|r att fr}ga servern. ----------------------------------------------------------------------- - - - -1990-10-21 ceder@lysator.liu.se 000024 ----------------------------------------------------------------------- -]tg{rdas av: ceder -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Prefetchningen funkar inte s} bra ihop med kommentarl{sningen. Det g}r -att g|ra b{ttre. Conf-stat f|r f|rfattare o. dy. borde prefetchas. ----------------------------------------------------------------------- - - - -1990-10-20 Aronsson@Lysator.LiU.SE 000023 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Protokollspec (+alla program) -Till version: B ----------------------------------------------------------------------- -En del prylar i protokoll A g|r att det {r sv}rt att effektivt tolka -det som trillar in |ver linan. T.ex. kan man inte avg|ra om det {r en -INTEGER, en HOLLERITH eller en ARRAY som kommer utan att titta framf|r -sig. F|resl}s att HOLLERITH anges H4Htext samt att antal-element och -"{" byter plats f|r ARRAY. - -Typen BITSTRING borde kunna ers{ttas med en INTEGER d{r bitarna kodas -+1, +2, +4, +8, ... S} som den h{r get_xyz_stat-masken fungerade. -Nackdel: Sv}rare att handkoda bitstr{ngar, men skall vi vara s} -beroende av handkodning? - -Om jag med protokoll A vill veta vem som organiserar ett m|te, m}ste -jag best{lla hela get-conf-stat. Troligen har min klient en generell -rutin som mappar till protokollelementen och jag lagrar (l{s: -mallocerar) d{rf|r hela datastrukturen som kommer i svaret. Det kunde -vara beh{ndigt med fler, sm} funktioner som i princip returnerade ett -v{rde var. ----------------------------------------------------------------------- - - - -1990-10-20 Aronsson@Lysator.LiU.SE 000022 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Protokollspec (+alla program) -Till version: A++ ----------------------------------------------------------------------- -add-recipient-params: conference och type borde byta plats och d{rmed -bli en Misc-Info. ----------------------------------------------------------------------- - - - -1990-10-20 Aronsson@Lysator.LiU.SE 000021 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Protokollspec (+alla program) -Till version: A++ ----------------------------------------------------------------------- -Conf-List borde vara en ARRAY { Conf-No; Conf-Type }. Inte den hybrid -den {r idag. Se anm{rkning i protokollspecen. ----------------------------------------------------------------------- - - - -1990-10-20 Aronsson@Lysator.LiU.SE 000021 ----------------------------------------------------------------------- -]tg{rdas av: ----------------------------------------------------------------------- -Mattias Olofsson hj{lper mig korrigera specen av protokoll A. Han b|r -bli medlem i gruppen kom. ----------------------------------------------------------------------- - - - -1990-10-20 Aronsson@Lysator.LiU.SE 000020 ----------------------------------------------------------------------- -]tg{rdas av: -Program: Protokollspec (+alla program) -Till version: A++ ----------------------------------------------------------------------- -Bak}tkompatibilitet {r viktigt. Det finns redan en klient p} Chalmers -och en p} IDA, kanske en p} ISY. Att {ndra syntax p} protokoll A kan -skapa problem. B{ttre i s} fall att skapa nya funktioner (med h|gre -anropsnummer) som ers{tter de gamla och l}ta servern klara {ven de -gamla. T.ex. masken "255" skadar ju inte, den tar inte mycket plats. -Men om den {ndras och Johan Andersson Chalmers m}ste FTP:a en ny -klient, s} kanske han tr|ttnar helt. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000019 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Klienten fr}gar aldrig efter server-info. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000014 ----------------------------------------------------------------------- -]tg{rdas av: -Program: server -Till version: ----------------------------------------------------------------------- -Fixa s{kerhetsbuggen vid read_texts et c. Det b|r vara s} att man inte -f}r veta mappningen s} ofta som nu. Vilka texter som {r l{sta b|r -ocks} vara mer hemligt. Ett nytt anrop, query_unread(), b|r inf|ras. -Resultatet {r antalet ol{sat brev och _kanske_ Local_text_no f|r det -h|gsta nummret. - -(Det var l{nge sen jag skrev det h{r, och jag minns inte riktigt vad -jag menar, men man borde nog titta p} det h{r s} sm}ningom). ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000013 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Det borde finnas ett s{tt att uttr{da och om-prioritera sina m|ten. -Till exempel en ny mode i ett eget f|nster, typ dired. ----------------------------------------------------------------------- - - - -1990-10-20 ceder@lysator.liu.se 000010 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Elisp-klienten borde inte scrolla s} mycket n{r man k|r fr}n en -l}ngsam terminal. ----------------------------------------------------------------------- - - - -1990-10-20 Bellman@Lysator.LiU.SE 000004 ----------------------------------------------------------------------- -]tg{rdas av: -Program: elisp-klient -Till version: ----------------------------------------------------------------------- -Kommano f|r att spara en text p} fil i elisp-klienten vore -l{mpligt. Om man ger ett numeriskt argument, ska man spara det -inl{gget, annars det senast visade. ----------------------------------------------------------------------- - - - - -Local Variables: -mode:swedish -eval:(auto-fill-mode 1) -eval:(set-register ?m "1991-03--- user@Lysator.LiU.Se 0000-- ----------------------------------------------------------------------- -]tg{rdas av: -Program: -Till version: -Orsak: ----------------------------------------------------------------------- ----------------------------------------------------------------------- -") -End: diff --git a/doc/Distfile b/doc/Distfile deleted file mode 100644 index a82a44195..000000000 --- a/doc/Distfile +++ /dev/null @@ -1 +0,0 @@ -(/usr/local/src/2kom/doc) -> (nanny.lysator.liu.se) install; diff --git a/doc/LOGG b/doc/LOGG deleted file mode 100644 index 7f181f3f4..000000000 --- a/doc/LOGG +++ /dev/null @@ -1,77 +0,0 @@ -Det SIST SKRIVNA hamnar F\RST I FILEN /Aronsson. - -Loggfil d{r man skriver vad man g|r. Det {r b{ttre att du skriver lite -{n inte alls (mest riktat till mig sj{lv...). /lw 900402 ----------------------------------------------------------------------- - -3 juni 1991 Aronsson - -Uppdaterat prot-A.txt och i denna inkluderat prot-A.bnf. Satt -prot-A.bnf till att vara en symbolisk l{nk till txt-filen. - - -14 oktober 1990 Aronsson was here - -Lagt hit nedanst}ende filer. Originalen beh}ller jag hemma hos mig. - prot-A.txt Spec protokoll A. Textdelen. Svensk font. - prot-A.bnf Spec protokoll A. Koddelen. Engelsk font. - version Hantering av {ndringsf|rslag och versioner. - -1990-04-17 /ceder - -Tog bort den felaktiga definitionen av typen Connection ur kom-types.h. Den -riktiga finns i server/server.h. - -Flyttade definitioner av Persons, Marks, String och Map till kom-types.h. - -B|rjade anv{nda M-X Add-change-log-entry i st{llet. - -900407 /lw - -Det h{r {r c. Allts} b|r active_connection vara en pekare! (har {ndrat) - -Flyttade smalloc ("s{ker" malloc) till cache.c. - -Nu sparar ldb.c {ven texts-f{ltet i person-structen... - - -1990-04-04 /ceder - -[ndrade i Person-structen: Tog bort created_texts. La till -first_text, last_text och texts (en lista med globala textnummer de globala -textnummer som personen har skapat.) - -active_connection (server.h) {r index i arrayen connections (connections.c). - -Skapade filen doc/security-levels.txt d{r det anges vad de olika priv-bitarna -inneb{r. - -900404 /lw - -[ndrade ldb:s felhantering. Nu finns den! Fortfarande inte speciellt -snygg, men n}got b{ttre {n tidigare. Returnerar intern felkod i -ldb_errno och filhandtag till felande filen i ldb_errfileno. - - - -1990-04-02 /ceder - -Fr}n och med nu anv{nder vi ISO-standard f|r datum. (:-) - -kom-types.h: Tog bort flags och lade till user_area i Person-structen. - -900402 /lw -Vi flyttade om filerna. Under ldb ligger nu i princip endast ldb.c och -ldb.h. Under client ligger de filer som {r specifika f|r klienten och -under server ligger de server-specifika filerna. doc-directoryt -inneh}ller dokumentationen f|r det vi h}ller p} med. - -Direkt under 2kom ligger f|r n{rvarande allt som {r gemensamt f|r -s}v{l klient som server. Det {r types.h och kom-types.h (varf|r {r det -uppdelat i tv} filer?) samt services.h som tidigare hette atomic.h. - -Jag har f|rresten tagit bort parametern connection som alla funktioner -i atomic.h hade. Fr}n klientens synvinkel finns inte den parametern -och det verkar f}nigt att ha den i servern. Om man har samma parameter -till samtliga funktioner tycker jag det {r ganska vettigt att i -st{llet anv{nda en global variabel. diff --git a/doc/Mailinglist b/doc/Mailinglist deleted file mode 100644 index b23018269..000000000 --- a/doc/Mailinglist +++ /dev/null @@ -1,13 +0,0 @@ -uda@ida.liu.se -anders@lage.lysator.liu.se -tpe@ida.liu.se -kjell@saturn.ucsc.edu -jsk@lysator.liu.se -pell@lysator.liu.se -rolff@komunity.se -nixon@lysator.liu.se -riw@lysator.liu.se -magnus_k@lysator.liu.se -SLARTIBARTFAST@eLinor.lysator.liu.se -ingwa@isy.liu.se -Per_Cederqvist@f114.n204.z2.pclink.se diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 78a834ae4..000000000 --- a/doc/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -TOPDIR = /usr/lyskom -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -SUBDIRS = man - -all:; -depend:; -includes:; -libraries:; -binaries:; - -clean: - $(RM) *~ core - for i in $(SUBDIRS); \ - do \ - echo making clean in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) clean) \ - done - -install: - for i in $(SUBDIRS); \ - do \ - echo installing directory in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) install) \ - done - diff --git a/doc/Makefile.template b/doc/Makefile.template deleted file mode 100644 index 66e77e197..000000000 --- a/doc/Makefile.template +++ /dev/null @@ -1,39 +0,0 @@ -# Makefile for LysKOM -# -############################################################################### -# -# SPECIAL CONSIDERATIONS: -# -# - Requires GNU make. -# - CC, OPTIMIZE-FLAGS and other make variables are passed down -# in the environment. -# - C compiler must be ANSI conformant. -# -############################################################################### -# -# SPECIAL TARGETS: -############################################################################### - -# Directories that you might want to override via the environment. - -ifndef TOPDIR -TOPDIR := /usr/lyskom/src -endif - -ifndef SCRIPTDIR -SCRIPTDIR := $(TOPDIR)/scripts -endif - -include $(SCRIPTDIR)/import.make - - -# All directories that make should traverse to when doing clean etc. - -SUBDIRS = doc include junk lib scripts src - -all: - for i in $(SUBDIRS) ; \ - do \ - echo making all in directory $$i; \ - (cd $$i; $(MAKE) all) \ - done diff --git a/doc/README b/doc/README deleted file mode 100644 index f761ca78a..000000000 --- a/doc/README +++ /dev/null @@ -1,79 +0,0 @@ -Detta directory inneh}ller dokumentation om lyskom-projektet - -All utveckling av filer i detta bibliotek g|rs p} LLL. [ndra inga -filer p} Nanny. Kopiera filerna till Nanny med hj{lp av rdist. - -OBS!! Om ni l{gger till en ny dokumentationsfil, tar bort n}gon eller - kombinerar tv} eller flera, {ndra d} {ven i den h{r filen!! - - -F|ljande dokumentation finns i detta directory (30 april 1991): - -LOGG En loggfil som beskriver aktiviteten under tidiga delar av - projektet. Mest av nostalgiskt intresse och n{r vi n}gon g}ng - skall dokumentera hur vi gjorde't. - -README Denna fil. - -dbck.latexinfo - Beskriver dbck, programmet som kontrollerar och kompakterar en - lyskom-databas. - -elisp-client.internals - Beskriver ing}ende hur elispklienten fungerar internt. L}ngt - ifr}n klar. - -elisp-client.user-manual - Beskriver alla aspekter av hur man anv{nder elispklienten. - -fileformat - Beskriver filformatet f|r lyskom-databasen. Inaktuell sedan - l{nge. Den h{r filen beh|ver skrivas om. - -ideer/ Directory som inneh}ller filer med ideer om framtida finesser. - Endast dokumentation om saker som faktiskt {r implementerade - f}r placeras direkt under 2kom/doc. Ideer skall l{ggas i det - h{r directoryt. - -mall-swe.latexinfo - H{r {r en mall som kan anv{ndas f|r alla latexinfo-filer - skrivna p} svenska. - -mall.latexinfo - Samma som ovan, fast p} engelska. - -misc_items - Beskriver vad som kan ing} i en lista av misc-info - (i servern?). - -mux.proto - Beskriver protokollet mux <-> server. - -prot-A.bnf - Aronssons ov{rderliga dokument som inneh}ller en formell - beskrivning av protokoll A. - -prot-A.slightly-obsolete - Beskriver bl.a uppkopplingsf|rfarande och liknande. - -prot-A.txt - Beskriver datatyper och liknande i protokollet. - -Fotnot: De tre ovanst}ende filerna borde kunna kombineras till en och - speciellt s} borde de g|ras aktuella. - -security-levels.txt - Beskriver vad olika privilegiebitar betyder i protokoll A, dvs - semantiken. Ingen syntax beskrivs h{r. - -server-async.extend - Beskriver hur man l{gger till ett nytt asynkront meddelande i - servern. - -server.extend - Beskriver hur man l{gger till ett nytt anrop i servern (och i - protokoll A). - -skeleton.doc - En mall som kan anv{ndas f|r att skriva en ny dokumentation i - vanligt textformat. diff --git a/doc/coding-standards.txt b/doc/coding-standards.txt deleted file mode 100644 index 90f0f70f1..000000000 --- a/doc/coding-standards.txt +++ /dev/null @@ -1,73 +0,0 @@ -- hur man formatterar koden - - -- namnkonventioner - - -- Makefile - - -RCS - -Att skapa en ny fil: - -En ny fil placeras under RCS med "ci -r0.1 filnamn". I direktoryt -m}ste det finnas ett direktory som heter RCS. (Man kan skapa checka in -en ny fil fr}n emacs, men d} f}r den versionsnummer 1.0. Det g}r att -{ndra i RCS/*,v-filen, men det blir jobbigare..) - - -ATT TITTA P] EN FIL - -F|r att titta p} en fil g|r man "co filnamn". Med "make sources" -checkas alla filer ut (om Makefilen {r r{tt skriven). - - - -ATT EDITERA EN FIL - -Innan man editerar filen m}ste man l}sa den. Det g|r man med "co -l -filnamn" eller "C-x \"" om man anv{nder rcs-cks i emacs. - -Om man kommmer p} att man inte ville {ndra i filen kan man l}sa upp -den med "rcs -u filnamn". - -F|r att l{mna in den nya versionen g|r man "ci filnamn" eller "C-x #". - - - -RCSCLEAN - -"make rcsclean" tar bort all k{llkod som inte {r l}st f|r editering. -Med "make sources" kan man f} tillbaks den. - - -RCS anv{nder inte ChangeLog. Med "rlog file" f}r man se alla {ndringar -som gjorts i en fil. I filen RCS/.rcsfreeze.log kan man se de -logmeddelande som skrivits in n{r man gjort rcsfreeze. - -ChangeLoggen ska anv{ndas ({ven om det inte {r gjort p} slutet p} -servern). - -ATT INSTALLERA EN NY VERSION - -RCS: - -1) make -2) rcsclean # Se till att alla filer f|rsvinner -3) rcsfreeze v0-30-4 # Eller liknande -4) make sources -5) make -t # S} att man slipper kompilera om saker i on|dan. - -Bara steg 2 och 3 beh|vs. 1, 4 och 5 sparar lite tid. - -BIN[RER: - -Flytta server/diskomd till /usr/lyskom/bin/ramkomd. Se till att INNAN -dess spara den gamla ramkomd. Skriv inte |ver en exekverande fil! - -COMMON - -"make serverinstall" och "make clientinstall" skall g|ras n{r man har -{ndrat n}got. - -LIB - -"make install" skall g|ras n{r man har {ndrat n}got. diff --git a/doc/dbck.latexinfo b/doc/dbck.latexinfo deleted file mode 100644 index 79eefe6a4..000000000 --- a/doc/dbck.latexinfo +++ /dev/null @@ -1,97 +0,0 @@ -\documentstyle[12pt,latexinfo,lyskom]{report} \c -*-latexinfo-*- -\pagestyle{empty} - -\begin{document} - -\title{dbck --- Automatic LysKOM Database Integrity Check Program\\} -\sp{5} -\author{Per Cederqvist\\ - Lysator\\ - ceder@lysator.liu.se} -\sp{1} -\date{\today} - -\maketitle -\clearpage -\vspace{0pt plus 1filll} -Copyright \copyright{} 1990 Lysator - -\sp{2} - -This document describes dbck, a program that automatically check for -and repairs inconsistencies in the LysKOM data base. - -\sp{6} -Permission is granted to copy and distribute this manual, provided that -the above Copyright notice and this text remains on all copies. - -\clearpage -\pagestyle{headings} -\pagenumbering{roman} - - -\tableofcontents - -\clearpage -\pagenumbering{arabic} - -\setfilename{dbck.info} - -\begin{ifinfo} -Copyright \copyright 1991 Lysator -\end{ifinfo} - -\node Top, Invoking dbck, , (top) -\comment node-name, next, previous, up - -Dbck is a data base checker that is used to assure that the -data base of LysKOM isn't corrupted. It is also used to -gather some statistics and to compact the database. - -\begin{menu} -* Invoking dbck:: Options et c. -* Tests:: A complete list of all tests that dbck performs. -\end{menu} - -\node Invoking dbck, Tests, ,Top -\comment node-name, next, previous, up - - -\chapter{Invoking dbck} - -Dbck accepts several switches. If no switches are given -dbck will read the file and report any errors found, but it -wont repair them. This behaviour is useful to check for -errors without having to take down the server. You must -take down the server to be able to repair any errors. -\begin{description} - -\item[-D\var{dir}]Tell dbck to look for the data base is in -the directory \file{\var{dir}/db} instead of the default -\file{/usr/lyskom/db}. - -\item[-i]Interactive use. If an error is found, and dbck -thinks that it can repair it, dbck will display a message -describing what error it has found, and how it intend to -fix it. The Operator can type \kbd{y} if he accepts the -action, och \kbd{n} if not. Note that some errors will be -repaired in a way that gives information loss --- but -always as little as possible. - -\item[-r]Repair simple errors without confirmation. - -\item[-v]Verbose mode. -Normally only errors are displayed. If you give the -\code{-v} flag some more statistic, such as number of -texts, average lengths of texts, and so on, will be -printed. - -\item[-d]Debug mode. -Hardly useful unless you are debugging lacgen. - -\item[-g]Garbage collect. Compact the file -\samp{db/lyskom-texts} by removing all unused text. -\end{description} -\clearpage -\chapter{Tests} -\end{document} diff --git a/doc/disc-cache.spec b/doc/disc-cache.spec deleted file mode 100644 index 1bdd16e47..000000000 --- a/doc/disc-cache.spec +++ /dev/null @@ -1,174 +0,0 @@ -ramkomd {r d|d! L{nge leve LysKOM! - -Jag har tillsammans med Inge kommit p} ett s{tt att dels f} ner -v{ntetiden i samband med syncningar till <1 sekund, dels f} ner -storleken p} serverprocessen till mer rimliga niv}er. Denna l|sning -lider dock av det stora problemet att den kr{ver dubbelt s} mycket -diskutrymme som den egentligen beh|ver. Det g|r {ven ramkomd, s} det -{r ingen f|rs{mring i det avseendet. Dock {r detta bara en tempor{r -l|sning i v{ntan p} ldb. - -Varf|r spara allt p} en g}ng? Varf|r inte spara en liten del av filen -i taget, och utf|ra n}gra atomiska anrop mellan varje liten -delsynkning? Ungef{r s} t{nkte jag n{r jag kom p} f|ljande schema f|r -hur man kan g|ra det hela b{ttre {n det {r nu. - -Den databas som ligger p} fil {r en |gonblickbild (snapshot) av det -som finns i LysKOM. S} {r det i ramkomd; s} blir det i diskomd. -(B{ttre namn, n}gon? lyskomd tycker jag {r reserverat f|r den version -som har en riktig cache&ldb.) I ramkomd skrivs allt ut p} disk -samtidigt. I diskomd minns man bara vad som skall sparas, och sparar -bara en bit i taget. - -I ramkomd finns allt inne i ram-minnet (i teorin. I praktiken {r det -mesta utswappat - n}got som m{rks varje g}ng det {r dags att synca!). -I diskomd ligger det mesta p} disk. I minnet finns dels det som har -anv{nts nyligen, dels det som {r {ndrat och {nnu ej syncat. Diskomd -har alltid minst en, ofta tv}, databasfiler |ppna: - - Fil A Senaste kompletta fil. - Fil B Fil under uppbyggnad. - -(Dessutom textmassefilen, precis som ramkomd nuf|rtiden.) - -S} till detaljerna: - -Det finns tre typer av objekt som ber|rs av den h{r {ndringen: -Text_stat, Person och Conference. Jag anv{nder Person som ett exempel -nedan. - -I ram-cache.c finns en array - - Person *pers_arr[ MAX_CONF ]; - -Den byts mot - - Cache_node *pers_arr[ MAX_CONF ]; - -typedef struct cache_node { - Bool exists; - Bool exists_b; - Bool dirty; /* [r *ptr modifierad? */ - void *snap_shot; - void *ptr; - off_t pos; - off_t pos_b; - struct cache_node *lru_link; - int lock_cnt; -} Cache_node; - - - -UPPSTART - -N{r servern startas scannar den igenom datafilen (fil A) och fyller i -f{ltet exists till TRUE/FALSE och pos till att peka p} b|rjan av det -st{lle i filen d{r data ligger. \vriga f{lt s{tts till FALSE/NULL/0. - - - -CACHE_GET_PERSON - -N{r ovanliggande rutiner vill l{sa en person h{nder f|ljande: - -!exists Returnera NULL -ptr != NULL L{gg noden f|rst i lru_link. Returnera ptr. -snap_shot != NULL Kopiera snap_shot till ptr. L{gg noden f|rst i - lru_link. Returnera ptr. -annars L{s in fr}n fil A, s{tt ptr till den inl{sta - structen, l{gg noden f|rst i lru_link, - returnera ptr. - - -MARK_PERSON_AS_CHANGED - -N{r n}got har {ndrats s{tts dirty-flaggan till TRUE. - - -CREATE_PERSON - -S{tt exists=TRUE, dirty=TRUE, ptr och lru. - - -DELETE_PERSON - -S{tt exists=FALSE. ptr=NULL. Troligtvis error om lock_cnt != 0. - - - -THROW-OUT - -F|r att inte diskomd ska bli f|r stor sl{ngs saker ut ur cachen. -Algoritm: tag f|rsta elementet i lru_list. Om dirty==FALSE och -ptr!=NULL och lock_cnt==0 s} frig|r ptr. Upprepa tills antalet noder -med ptr!=NULL och dirty==FALSE {r mindre {n antalet "rena" element man -vill ha inne i minnet. (Smutsiga element sl{ngs aldrig ut.) - - -LOCK_PERSON - -\ka lock_cnt. - - -UNLOCK_PERSON - -Minska lock_cnt. - - -PRE-SYNC - -Utsparningen till fil sker i tre steg. F|rst sveper man |ver alla -Cache_noder. F|r alla som har dirty=TRUE g|r man f|ljande: - - if ( lock_cnt == 0 ) { - snap_shot = ptr; (Pekartilldelning, ej kopiering av inneh}llet.) - ptr = NULL; - Ta bort ptr ur lru-kedjan. - } else { - snap_shot = copy(ptr); - } - - dirty = FALSE; - -F|r _alla_ noder g|rs dessutom f|ljande: - - b_exists==exists; - - -SYNC - -Steg tv} utf|rs en liten bit i taget. Till exempel s} skulle man kunna -spara en person efter varje atomiskt anrop, eller s}. - -b_exists==FALSE? S{tt pos_b. Skriv "@\n" till fil B. -[r snap_shot != NULL? S{tt pos_b. Skriv ut inneh}llet i snap_shot - till fil B. -dirty==FALSE && ptr!=NULL Skriv ut inneh}llet i ptr till fil B. -annars: Kopiera fr}n fil A till fil B. (Eftersom man - vet b}de var blocket b|rjar och slutar kan man - kopiera blocket utan att bry sig om vad som - st}r i det -> v{ldigt lite CPU g}r }t). - - - - -POST-SYNC - -N{r alla Person:er har hanterats som i SYNC ovan {r det dags f|r det -tredje steget. D} g}r man igenom alla Cache_node:er och g|r f|ljande: - - pos = pos_b; - file_b = FALSE; - free(snap_shot); - snap_shot = NULL; - -Fil B som man f|rut hade |ppen f|r skrivning |ppnar man i st{llet f|r -l{sning som fil A. - - - - -ANM[RKNINGAR - -Inneh}llet i snap_shot {r alltid "smutsigt" j{mf|rt med inneh}llet i -fil A. Det som snap_shot pekar p} finns aldrig med i lru-kedjan. diff --git a/doc/elisp-client.internals b/doc/elisp-client.internals deleted file mode 100644 index 227dd679e..000000000 --- a/doc/elisp-client.internals +++ /dev/null @@ -1,455 +0,0 @@ - - - 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: - diff --git a/doc/elisp-client.user-manual b/doc/elisp-client.user-manual deleted file mode 100644 index e4fa5f9c9..000000000 --- a/doc/elisp-client.user-manual +++ /dev/null @@ -1,802 +0,0 @@ - - - LysKOM-Projektet - -------------------------------- - En klient skriven i GNU-emacs-lisp. - -------------------------------- - av Per Cederqvist - <ceder@lysator.liu.se> - (f|r en mycket gammal version) - - uppdaterad av Inge Wallin - <ingwa@isy.liu.se eller inge@lysator.liu.se> - f|r version 0.28 - - - -F\RORD - -Meningen med detta dokument {r att den ska beskriva allt man beh|ver -veta om elisp-klienten (se nedan) f|r att kunna anv{nda den. Det -f|ruts{tts att l{saren k{nner till GNU-emacs. Om anv{ndaren har anv{nt -QZ-KOM {r detta en f|rdel, men det {r p} inget vis n|dv{ndigt f|r -f|rst}elsen av LysKOM. - - - -BAKGRUND - -LysKOM {r ett konferenssystem som {r inspirerat av KOM, det -konferenssystem som skapades av QZ i Stockholm. Orsaken till att -LysKOM skrevs var att det KOMsystem Lysators medlemmar hade tillg}ng -till lades ner. QZ-KOM gick endast att k|ra p} DEC-20-maskiner och den -sista DEC-20-maskinen p} LiTH som studenterna hade tillg}ng till -s}ldes och f|rsvann. KOM hade blivit vanebildande f|r en del och det -bed|mdes att en ers{ttning var n|dv{ndig. - -En tidig tanke n{r vi b|rjade jobba med LysKOM var att det skulle g} -att ha flera olika anv{ndarinterface samtidigt. N}gon vill se en -grafisk struktur p} hur inl{ggen h{nger ihop p} sin grafiska sk{rm, -n}gon annan vill kunna forts{tta att anv{nda sin gamla vt100. Det var -ocks} klart att systemet skulle k|ra under UNIX eftersom detta -operativsystem bed|mdes som vanligt i framtiden. Lysators medlemmar -hade dessutom stor erfarenhet av UNIX och Lysator {ger ett antal UNIX- -maskiner. - -Bland annat av dessa orsaker valde vi att anv{nda en server-klient- -modell. En central server tar hand om alla inl{gg och LysKOM:s hela -databas. Mot denna server kan flera stycken klienter koppla upp sig -via TCP/IP. - -Vi b|rjade tidigt skriva p} en klient i C som skulle bli en ganska -trogen kopia av QZ-kom. Det har dock visat sig att det finns m}nga -problem, som kanske var st|rre {n vi trodde fr}n b|rjan. Den h{r -klienten {r inte klar {n p} ett tag. Det {r Thomas Bellman som jobbar -med C-klienten ({ven kallad tty-klienten eftersom den g}r att k|ra p} -vilken tty som helst). - -Jag, Per Cederqvist, har i st{llet skrivit en klient i elisp, det -programspr}k som finns inbyggt i GNU-Emacs. Denna klient har d{refter -byggts ut till en ganska omfattande klient av ett antal -Lysatormedlemmar och har visat sig vara enkel att modifiera med nya -funktioner och att hitta fel i. Detta dokument {r en enkel -anv{ndarhandledning och beskriver hur man anv{nder elispklienten. - - -SERVERN - -Servern, databashanteraren, {r skriven i C och k|rs p} -nanny.lysator.liu.se (IP-nummer 130.236.254.13). Databasfilen {r -l{sbar av alla som kan logga in p} nanny, vilket kan tyckas vara en -bugg, men den {r medveten. Vi vill inte ge n}gon en falsk k{nsla av -s{kerhet och p} ett system s}dant som Lysators {r det alltf|r m}nga -som har privilegier f|r att man skall kunna garantera n}gon hemlighet. -P} andra serverinstallationer i framtiden blir naturligtvis -situationen en annan. - - - -UPPSTART - -Fr}n Lysators maskiner - -Enklast {r att k|ra LysKOM fr}n n}gon av Lysators UNIX-maskiner (lage, -lave, laila eller nanny). N{r man har startat emacs r{cker det med att -skriva - - M-x lyskom - -f|r att s{tta ig}ng. Svara p} fr}gan om server med att trycka RETURN. - - -Fr}n elev-sparcarna p} IDA (Inst. f|r Datavetenskap p} LiTH): - -L{gg in - - (autoload 'lyskom "~d88perce/lyskom" "K|ra LysKOM" t) - -i din .emacs. Starta om emacs eller l{s in .emacs i din emacs igen. -Skriv M-x lyskom. N{r du f}r fr}gan om server svarar du "inga15" och -hoppas att allt fungerar. K|r inte fr}n IDA:s maskiner om de {r -nerlastade - vi vill inte att n}gon ska f} f|r sig att det h{r -"kryph}let" m}ste t{tas! P} inga15.ida.liu.se ligger ett litet -program som rel{ar anropen vidare till nanny.lysator.liu.se d{r -databasen f|r n{rvarande ligger. - - - -Fr}n andra maskiner - -H{mta filen lyskom.el eller lyskom.elc. Senaste versionen finns alltid -p} lage.lysator.liu.se i directoryt /usr/local/lib/elisp/. K|r, och -hoppas att du kommer }t Nanny eller inga15.ida.liu.se. Om det blir -problem, s} l|s dom och tala om f|r mig hur du l|ste dom, s} kan jag -l{gga in din l|sning h{r. - -Om du vill h{mta LysKOMklienten fr}n n}gonstans utanf|r LiTH kan du -h{mta den senaste versionen via anonym ftp fr}n nanny.lysator.liu.se -(130.236.254.13). Skriv 'ftp nanny.lysator.liu.se' och ge 'ftp' som -anv{ndarnamn. N{r nanny fr}gar efter l|senord, ange din emailadress -och tryck return. L|senordet ekas inte. G} ner i directoryt pub/lyskom -och skriv 'bin'. Detta s{tter om ftp till BINARY MODE vilket {r -n|dv{ndigt f|r att f} |ver elispklienten korrekt. Skriv sedan 'get -lyskom-X.elc.Z' d{r X {r det h|gsta nummer du kan hitta i det -directoryt. Filen med det h|gsta numret {r alltid den senaste -versionen. N{r |verf|ringen {r klar, bryt f|rbindelsen genom att -skriva 'quit'. - - - -F\RSTA G]NGEN DU K\R LYSKOM - -N{r du har svarat p} fr}gan om server och uppkopplingen mellan klient -och server {r klar s} f}r du en ny fr}ga; ditt namn. Det {r sed att -ange b}de f|r och efternamn samt den organisation du arbetar f|r, t ex - - Inge Wallin, ISY - -Om det inte fanns n}gon med det namn du angav s} f}r du bekr{fta att -du {r en ny anv{ndare. Sen f}r du uppge ett personligt l|senord. Kom -ih}g att vem som helst kan l{sa databasfilen, s} anv{nd inte ett l|sen -som du anv{nder n}gon annanstans! - -Efter en liten stund dyker det upp ett f|nster d{r det st}r - - Mottagare: <1> Presentation (av nya) m|ten - [rende: Inge Wallin, ISY - --- Skriv texten nedanf|r denna rad --- - -Skriv en kort presentation av dig sj{lv. Du b|r }tminstone ha med ditt -riktiga namn, din adress och telefonnummer, och email-adress. Det {r -inget krav som vi st{ller f|r att du ska f} k|ra LysKOM, men det -underl{ttar f|r alla som vill komma i kontakt med dig. - -N{r du {r klar trycker du C-c C-c f|r att skicka in texten. - - - -PROMPTEN - -N{r LysKOM {r klart att ta emot ett kommando skrivs en prompt ut. Den -kan se ut p} t.ex f|ljande s{tt: - -G} till n{sta m|te - -L{sa n{sta text - -Se tiden - - -N{r du ser prompten kan du ge ett kommando. Var sn{ll mot klienten! -Tryck inte p} en massa knappar innan du ser prompten! Det blir bara -problem om du g|r det! Speciellt k{nslig {r den i inloggningsfasen. -Kom ih}g att elispklienten fr}n b|rjan var avsedd bara som ett -surrogat f|r den egentliga klienten och att det som du nu k|r {r en -pre-alfarelease. - - - -SCROLLNING - -Om inte allt ryms p} sk{rmsidan s} syns en procentsats i mode-raden. -Tryck p} mellanslag n{r du l{st klart s} scrollas n{sta sida fram. - - -KOMMANDON - -Det finns tv} slags kommandon, dels de som {r bundna till enskilda -tangenter, dels de som du m}ste ange i klartext. M}nga kommandon kan -anges p} b}da s{tten. F|r att ange ett kommando med dess fulla namn -trycker du tangenten 'a', vilket skall uttydas "(N}got) Annat", ett -kommando som fanns gamla QZ-KOM. Detta ger dig en fr}ga p} emacs -meddelanderad och du kan nu trycka '?' och f} en lista p} vilka -kommandon som finns. - -Antalet kommandon |kar hela tiden med |kande versionsnummer. F|ljande -kommandon finns i elispklienten i den version som anges i titeln p} -detta dokument. F|rst visas vilken tangent som funktionen ligger p} -och d{refter vad man anger under 'a'. I m|tet "LysKOM Elisp-klient; -buggar, nyheter och annat" diskuteras nyheter om klienten. N{r en ny -version sl{pps annonseras det ocks} i det m|tet, f|r det mesta -tillsammans med en lista p} de {ndringar som {r gjorda sen f|rra -versionen. - - -v Vilka {r inloggade - - Visa en lista |ver de personer som {r inloggade i LysKOM f|r - |gonblicket. Man f}r dessutom reda p} vilken maskin de k|r ifr}n - samt vad de sysslar med just nu. Inloggningarna visas i sessions- - nummerordning och den egna inloggningen markeras med en asterisk - precis efter sessionsnumret. - - -e Endast l{sa senaste - - Man f}r ange ett antal inl{gg som man vill l{sa i det nuvarande - m|tet. Alla andra inl{gg i m|tet markeras s}som l{sta. - - -" " (mellanslag) eller <RETURN> - - Utf|r defaulthandlingen, dvs det som st}r i prompten. - - -<LINEFEED> (eller <NEWLINE>) - - Samma som mellanslag eller <RETURN>, men placera f|rst mark|ren - |verst p} sk{rmen. - - -? Hj{lp - - Beskriv LysKOM-moden och alla dess tangentbordsbindningar. - - -b Skicka brev - - Skicka ett brev till en person eller ett m|te. Programmet fr}gar - efter vilket m|te/person som man vill skicka brevet till. Man kan - skicka brev {ven till slutna m|ten. (Att skicka brev till m|ten - fungerar bara i version 0.18.5 och h|gre). Om personen eller m|tet - har en lapp p} d|rren (se kommandot "S{tt lapp p} d|rren") s} - visas lappen i lyskom-bufferten. - - -g G} till m|te - - G} till ett nytt m|te f|r att b|rja l{sa inl{gg d{r. LysKOM fr}gar - efter vilket m|te du vill g} till. Om du inte {r medlem i m|tet s} - fr}gar LysKOM om du vill bli medlem i m|tet. - - -i Skriva ett inl{gg - - Skriv ett inl{gg i det m|te d{r du befinner dig f|r tillf{llet. - - -k Kommentera inl{gget - - Kommentera det senast l{sta inl{gget. - - -p Personligt svar - - Skriv ett personligt svar till f|rfattaren av det senast l{sta - inl{gget. Detta {r detsamma som att skicka ett brev till honom som - {r en kommentar till inl{gget. - - -h Hoppa |ver alla kommentarer - - Hoppa |ver alla kommentarer till det senast l{sta inl{gget, dvs - markera dem som l{sta utan att visa dem. Detta sker rekursivt s} - att alla kommentarer till kommentarerna markeras ocks} som l{sta, - osv. - - -lm Lista m|ten - - Lista alla m|ten som matchar ett givet m|nster. LysKOM fr}gar - efter m|nstret innan s|kningen startar. En asterisk ("*") skrivs - ut framf|r namnet p} alla m|ten som man inte {r medlem i. - - -ln - - Lista alla nyheter, dvs alla m|ten i vilka du har ol{sta inl{gg. - - -lN Lista nyheter - - Samma som ln, men anv{nder en n}got l}ngsammare metod. Detta anrop - finns endast med som s{kerhet eftersom metoden som anv{nds f|r - "ln" visserligen {r snabbare, men ocks} mycket mer komplicerad. - Detta kommando kommer att f|rsvinna snart. - - -lp Lista personer - - Lista alla personer som matchar ett givet m|nster. LysKOM fr}gar - efter m|nstret innan s|kningen startar. - - -ls Lista medlemsskap - - Listar vilka m|ten du {r medlem i, vilka prioriteter som g{ller - f|r m|tena samt hur m}nga ol{sta du har i varje m|te. - - -m Bli medlem i m|te - - Fr}gar efter ett m|te och ser till att du blir medlem i det. I - samband med detta f}r du ange en prioritet f|r m|tet och var m|tet - skall l{sas i f|rh}llande till andra m|ten med samma prioritet. - Prioriteten skall vara ett tal mellan 0 och 255 med 255 som h|gst - prioritet. - - Om m|tet {r slutet s} kan man inte g} med i det. Detta kommando - kan {ven anv{ndas f|r att {ndra prioritet f|r ett m|te som du - redan {r medlem i. - - -u Uttr{da ur - - Fr}gar efter namnet p} ett m|te och g|r s} att du uttr{der ur - m|tet. Alla markeringar om eventuella l{sta texter f|rsvinner. - - -ni L{sa n{sta inl{gg - - G} till n{sta text och visa den. Om du h}ller p} att }terse sparas - informationen om vad du }terser undan. Med "}n" kan du sedan - }terse n{sta inl{gg. - - -nm G} till n{sta m|te - - G}r till n{sta m|te med ol{sta inl{gg. Alla ol{sta i det nuvarande - m|tet sparas och m|tet placeras sist i listan |ver m|ten med - ol{sta inl{gg. - - -q Sluta - - Avsluta LysKOM och ta bort bufferten. Det g}r lika bra att sluta - genom att g} ur Emacs. - - - -r ]terstarta kom - - Nollst{ller diverse interna strukturer i klienten. Anv{nds d} - klienten har h{ngt sig eller d} klienten och servern har kommit ur - fas. Det kan de g|ra om man trycker C-g vid ol{mpliga tillf{llen. - - -t Se tiden - - Visar vad klockan {r. - - -fu F} uppmuntran - - Ger den dystre anv{ndaren lite ljus i m|rkret. - - -fs F} sk{ll - - Tar ner den uppbl}ste anv{ndaren p} jorden. - - -{p [ndra presentation - - [ndrar presentationen f|r ett m|te eller en person. LysKOM fr}gar - efter vilken person/m|te som presentationen skall {ndras f|r och - placerar dig i redigeringsl{ge. - - -} ]terse text - - ]terse en eventuellt tidigare l{st text. Om du anger ett nummer - direkt efter }:et s} visar LysKOM denna text. Om du ger ett - mellanslag s} fr}gar LysKOM efter textnummer. - - -}k ]terse det kommenterade - - ]terse det eller de inl{gg som det senast l{sta {r en kommentar - till. Om inte det senast l{sta {r en kommentar utan ett - originalinl{gg s} ger LysKOM ett felmeddelande. - - -}ak ]terse alla kommentarer (rekursivt) - - ]terse alla inl{gg som {r kommentarer till det senast l{sta - inl{gget. Detta sker rekursivt s} att {ven kommentarer till dessa - kommentarer }terses. - - -}r ]terse urinl{gget - - ]terser originalinl{gget som gav upphov till den kommentarkedja - som det senast l{sta inl{gget ing}r i. - - -}n ]terse n{sta - - ]terser n{sta inl{gg i }tersestacken. - - -}s ]terse senaste - - ]terse de senaste N inl{ggen av X i m|tet M. LysKOM fr}gar efter - personen X och m|tet M. N {r prefixargument. - - Om man inte ger n}got prefixargument s{tts N=1. Om man anger N=0 - f}r man se alla inl{gg av X till M. Om N {r negativt s} f}r du se - de abs(N) f|rsta inl{ggen av X i m|tet M. - - Om man inte anger X f}r man se de senaste N inl{ggen i m|tet M. - Default f|r m|tet {r det m|te du {r i. Om man inte anger M f}r man - se de senaste N inl{ggen av X. - - M kan vara din egen brevl}da, men du kan inte }terse texter till - n}gon annans brevl}da. Det beror p} en bug i server som kommer att - r{ttas, f|rhoppningsvis f|re sommaren 1991. - - -}h ]terse hoppa - - Avslutar alla }tersekommandon. - - -}l ]terse lista - - Visar vilka inl{gg som kommer att }terses, dvs resulatet av alla - fortfarande aktiva }tersekommandon. - - -}p ]terse presentation - - Fr}gar efter namnet p} en person eller ett m|te och visar - presentationen f|r denna person/m|te. - - -}t ]terse tr{d - - Samma som ]terse urinl{gget + ]terse alla kommentarer f|r det - senast l{sta inl{gget. - - -B (]terse) Bakl{nges - - V{nder p} ordningen som de inl{gg man g|r }terse p} presenteras. - Om man t ex }terser de senaste N av n}gon s} vill man kanske - }terse dem framifr}n i st{llet f|r bakifr}n. - - -sm Status (f|r) m|te - - Visar upp en del intressanta data f|r ett m|te. - - -sp Status (f|r) person - - Visar upp en del intressanta data om en person. - - -M Markera (inl{gg) - - Fr}gar efter inl{ggsnummer och s{tter en markering p} det - inl{gget. Det senast l{sta inl{gget {r default. Alla markerade - inl{gg kan senare }terses (se nedan). - - -A Avmarkera (inl{gg) - - Fr}gar efter inl{ggsnummer och tar bort den eventuella markeringen - fr}n det inl{gget. Det senast l{sta inl{gget {r default. - - -}m ]terse (alla) markerade - - ]terser alla inl{gg som tidigare markerats med hj{lp av M eller - "Markera (inl{gg)". - - -H{r f|ljer n}gra funktioner som inte ligger p} n}gra egna tangenter, -men som kan hittas under "E" - - -Skapa m|te - - Skapa ett nytt m|te. - - -Utpl}na - - Utpl}na en person eller ett m|te. Om man inte {r organisat|r f|r - m|tet/personen s} misslyckas kommandot. - - -Radera (text) - - Fr}gar efter inl{ggsnummer och raderar inl{gget. Man kan {ven ange - inl{ggsnumret som prefixargument. - - -Addera mottagare - - Fr}gar efter textnummer och namnet p} ett m|te eller en person. - Inl{gget f}r d} angivet m|te eller person som mottagare. - - -Subtrahera mottagare - - Fr}gar efter textnummer och namnet p} ett m|te eller en person. - Inl{gget har d} inte l{ngre angivet m|te eller person som - mottagare. Du f}r bara ta bort en mottagare om du {r organisat|r - f|r mottagaren eller f|rfattare till inl}gget. - - -Addera medlem - - Fr}gar efter person som skall adderas samt till vilket m|te. - Detta kommando m}ste anv{ndas f|r att addera medlemmar till ett - slutet m|te och det {r bara organisat|ren f|r det m|tet som kan - anv{nda det. Det kan ocks} anv{ndas f|r att addera medlemmar till - en brevl}da, dvs en person, om man vill att n}gon annan skall - kunna l{sa dennes post. Ett exempel {r om man vill skapa en - brevgrupp d{r flera personer kan l{sa posten som kommer till - gruppen. - - -Subtrahera medlem - - Fr}gar efter person som skall subtraheras samt vilket m|te som - personen skall subtraheras ifr}n. Detta kommando kan t ex anv{ndas - av organisat|ren f|r ett m|te n{r han vill utesluta n}gon fr}n - m|tet. - - -B|rja med nytt namn - - Logga ut den nuvarande personen ur LysKOM och b|rja med en ny - person utan att starta en ny session. - - -[ndra namn - - Fr}gar efter vilket m|te eller vilken person som skall {ndra namn - samt det nya namnet. Om du inte {r organisat|r f|r m|tet/personen - s} misslyckas kommandot. - - -[ndra l|senord - - Fr}gar efter det gamla l|senordet samt det nya du vill ha. Det nya - l|senordet m}ste matas in tv} g}nger f|r att det inte skall stavas - fel av misstag. - - -S{tt lapp p} d|rren - - Fr}gar efter m|te eller person som du vill s{tta en lapp p} f|r. - Lapp p} d|rren betyder att en person som f|rs|ker skicka brev till - personen/m|tet f}r ett meddelande n{r brevet s{nds iv{g. - - -Ta bort lapp p} d|rren - - Fr}gar efter m|te eller person och tar bort lappen p} d|rren f|r - personen/m|tet i fr}ga. - - - -NAMN - -N{r du skall ange ett m|tes- eller person-namn s} r{cker det att -skriva en entydig bit av namnet. Till exempel s} r{cker det (f|r -tillf{llet) att skriva "ce" f|r att logga in som "ceder". Saker inom -parentes r{knas inte, s} "Anders Andersson" och "(Hej p} dig) Anders -(och) Andersson (!)" {r precis samma sak. Ofta kan man skriva "m 10" -eller "p 10" i st{llet f|r ett m|te/en person om man vet att m|tet har -nummer 10. - - - -ATT SKRIVA INL[GG - -F|r varje inl{gg/kommentar man skriver f}r man upp en ny buffert. Man -kan skriva p} flera inl{gg samtidigt, och det spelar ingen roll i -vilken ordning man avslutar dem. S} l{nge som man har f|rbindelsen -till servern ig}ng s} kan man skicka in texterna. - -\verst i bufferten finns ett antal rader som talar om vem, vad eller -vilka som blir mottagare, och om det h{r {r en kommentar till en -(eller flera) texter. Man kan {ndra i det h{r f{ltet, men man ska vara -f|rsiktig. Det finns ingen felkontroll... Det finns fyra olika saker -som kan st} h{r: - - Mottagare: <nr> Namn - Extra kopia: <nr> Namn - Kommentar till text nr. - Fotnot till text nr. - -'nr' {r ett decimalt tal. 'Namn' {r ett m|tesnamn. N{r man {ndrar i de -h{r f{lten beh|ver man inte skriva s} mycket. Det r{cker med den -f|rsta bokstaven i varje rad och nummret. I de tv} f|rsta fallen skall -numret st} inom klamrar. Ett exempel p} hur man kan skriva {r: - - M<6> - E<80> - K118 - K 148 - Fotnot 12. - -Den h{r texten kommer att ha m|te 6 som mottagare. M|te 80 f}r en -extra kopia. (Den enda skillnaden mellan "Mottagare" och "Extra kopia" -{r att n{r n}gon kommenterar inl{gget kommer kommentarerna bara att g} -till de m|ten som st}r som mottagare). Texten {r en kommentar till -text 118 och 148 och dessutom en fotnot till text 12. (En fotnot och -en kommentar {r i stort sett samma sak, men det {r bara f|rfattaren -till en viss text som kan skriva en fotnot till den, och fotn|tter -till en text skrivs ut f|re alla kommentarer (i en framtida version)). - -Klienten litar blint p} det nummer man anger. Ingen kontroll g|rs att -det st{mmer med det som st}r efter klamrarna. - -Man kan blanda rader av typ M, E, K och F i vilken ordning som helst, -men det f}r inte finnas n}gra andra rader f|re {renderaden. (Inte ens -en blankrad). - -Om man vill skicka texten till ett annat m|te {n dem som st}r s} m}ste -man allts} veta numret p} m|tet. Det kan man ta reda p} genom att byta -buffert till LysKOM-bufferten (som normalt heter *nanny* eller -*inga15*) och d{r skriva "lm" eller "lp" (lista m|ten resp. lista -personer). De nummer som skrivs ut {r de m|tesnummer som skall -anv{ndas. - -Efter alla M, E, K och F-rader skall det komma en {renderad. Den skall -se ut s} h{r: - - [rende: <H{r ska du skriva en rubrik> - -N{r du kommenterar ett inl{gg f}r du dess {rende-rad som default. Du -kan d} trycka C-c }k och f} upp den text som man h}ller p} att -kommentera i ett f|nster. F|r att spara plats s} visas endast texten -och inte texthuvudet. - -Sen kommer en rad som bara har till uppgift att skilja texten fr}n -rubriken. Efter den raden skriver du ditt inl{gg. Du har tillg}ng till -alla vanliga emacs-kommandon. Det enda som {r annorlunda {r att n{r du -trycker C-c C-c s} skickas texten iv{g till servern. Om allt gick bra -s} tas edit-bufferten bort och du f}r tillbaks LysKOM-bufferten. -Textnummret f|r den skapade texten skrivs ut. - -Om man }ngrar sig och vill sl{nga texten man h}ller p} att skriva -trycker man C-c k. D} tas bufferten bort, och man kommer tillbaks till -LysKOM-bufferten. - -Skulle du vilja ha med delar av den text du kommenterar i ditt eget -inl{gg kan du trycka C-c i k och d} kommer hela den kommenterade -texten att l{ggas in d{r du var. Vill du i st{llet plocka in n}gon -annan text s} skall du ist{llet trycka C-c i f|ljt av textnumret p} -den text du vill ha med. - -Om du bara vill titta p} den text du kommenterar (t ex om du inte har -satt flaggan kom-write-text-in-other-window, se nedan), men inte ha in -den i inl{ggsbufferten s} kan du trycka C-c } k s} delas sk{rmen i tv} -f|nster och den kommenterade texten visas i det andra f|nstret. - - -FLAGGOR - -Elispklienten har ett antal flaggor f|r att anv{ndaren skall kunna -anpassa uppf|randet till sin egen smak. H{r f|ljer en lista |ver dessa -flaggor samt vilka v{rden de kan anta och deras betydelse i -programmet. - -Flaggorna dokumenteras genom att deras namn skrivs ut f|ljt av deras -defaultv{rde. I texten som f|rklarar flaggan listas m|jliga v{rden. Om -ett annat v{rde {n defaultv{rdet |nskas s} kan man antingen anv{nda -emacsfunktionen M-X set-variable eller skriva in rader liknande -(setq flaggnamn 'v{rde) i sin .emacs-fil. - - -kom-write-texts-in-other-window nil - - Om icke-nil s} kommer editf|nstret att synas samtidigt som - KOM-f|nstret n{r ett nytt inl{gg eller en kommentar skrivs. Om nil - s} anv{nds KOM-f|nstret {ven som edit-f|nster. - - -kom-created-texts-are-read t - - Om icke-nil s} markeras alla texter som skapas av anv{ndaren som - l{sta. - - -kom-reading-puts-comments-in-pointers-last t - - Om nil s} skrivs rader av typen - "Kommentar i text N av NN" i inl{ggshuvudet. Om icke-nil s} skrivs - dessa rader ut efter sj{lva inl{gget. - - -kom-print-number-of-unread-on-entrance t - - Om icke-nil s} skrivs antalet ol{sta i ett m|te ut s} fort - anv{ndaren g}r in i ett m|te. - - -kom-presence-messages t - - Om icke-nil s} skriver klienten ut fortl|pande rapporter om vilka - som g}r in i och ut ur LysKOM. - - -kom-presence-messages-in-buffer presence - - Denna flagga reglerar vilka av KOMs meddelanden som skrivs in i - sj{lva KOM-bufferten. De som inte skrivs in i bufferten f}s enbart - p} meddelanderaden och |vriga skrivs b}de i meddelanderaden och i - bufferten. Denna flagga kan anta tre v{rden: - - nil: Inga n{rvaromeddelanden skrivs ut. - presence: Meddelanden om vem som g}r in i och ut ur skrivs in i - bufferten, |vriga meddelanden skrivs endast ut p} - meddelanderaden. - t Alla meddelanden skrivs in i bufferten. Detta - inkluderar, f|rutom de som f}s genom att s{tta v{rdet - till "presence", {ven meddelanden om vad olika personer, - som {r i samma m|te som du, g|r. - - -lyskom-to-be-printed-before-prompt nil - - En str{ng som skrivs ut f|re varje prompt. - - -kom-show-where-and-what t - - Om icke-nil s} skriver klienten ut vilken maskin varje anv{ndare - k|r ifr}n samt vad han h}ller p} med n{r kommandot "Vilka {r - inloggade" ges. - - -kom-read-depth-first t - - Om icke-nil s} l{ses kommentarer och fotnoter f|re nya inl{gg. - Detta g|r att kommentartr{d s|ks av djup-f|rst. Om flaggan s{tts - till nil s} g|rs s|kningen bredd-f|rst. - - - -VARIABLER - -Det finns ett antal (f.n. en) variabler som man kan styra -elispklientens uppf|rande med. Dessa {r inte flaggor i den meningen -att de inte bara kan anta ett av flera f|rdefinierade v{rden, utan kan -anta n{stan vilka v{rden som helst. Variabler i emacs s{tts p} samma -s{tt som flaggor. - - -kom-mercial - - Denna variabel inneh}ller den str{ng som skrivs ut varje g}ng man - inte har n}got nytt att l{sa. Anv{ndaren uppmuntras att anv{nda - humor och kvickhet i anv{ndandet av den. - - - -ENVIRONMENTVARIABLER - -KOMSERVER Default komserver. Om KOMSERVER inte {r - satt s} v{ljs "nanny.lysator.liu.se". - -KOMNAME Default komnamn. Om KOMNAME {r satt s} - fr}gar klienten inte efter ditt namn - vid f|rsta inloggningen. L|senord - m}ste d{remot alltid matas in. - - - -BUGGRAPPORTER - -Det finns troligtvis m}nga fel i klienten. Om du st|ter p} n}got som -borde fungera annorlunda, eller som inte fungerar alls, s} skriv ett -inl{gg i m|tet "LysKOM Elisp-klient; buggar, nyheter och annat." Om -felet {r s} allvarligt att det inte g}r, s} skicka mail till -bug-lyskom@lysator.liu.se eller kom@lysator.liu.se. Synpunkter p} den -h{r texten eller andra manualer kan ocks} skickas dit. - - - -FILER - -LLL:/usr/local/lib/elisp/lyskom.el Senaste versionen av klienten. -nanny:~ftp/pub/lyskom/lyskom-ver.nr.elc D:o - - -Happy hacking! - /ceder - /Inge diff --git a/doc/fileformat b/doc/fileformat deleted file mode 100644 index 18ade8023..000000000 --- a/doc/fileformat +++ /dev/null @@ -1,26 +0,0 @@ -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 diff --git a/doc/ideer/cache b/doc/ideer/cache deleted file mode 100644 index 2ad9e9059..000000000 --- a/doc/ideer/cache +++ /dev/null @@ -1,36 +0,0 @@ -/* Linus Tue May 8 20:49:06 MET DST 1990 */ -cache komma ih}g - -Gr{nssnittet mellan cache och ldb m}ste specificeras. -Mina ideer {r att varje anrop i ldb borde f|ljas av ett, -n{stan identiskt anrop i cache som g|r samma sak fast ih}gkommet. -Samma parametrar borde skickas ocks} s} att det inte beh|vs f|r mycket -ny doc. - -Hmm folk har ju redan jobbat med detta. Jag dyker vidare ----> - - -Jag skall g|ra en tabell: - -ldb funktioner cache funktioner - - -ldb_open ( void ); saknar motsvarighet -ldb_close ( void ); saknar motsvarighet - -bool ldb_create_person ( Pers_no pers_no, Person * person ); bool cached_create_person ( Pers_no pers_no, Person * person ); cached_create_person -Person * ldb_read_person ( Pers_no pers_no ); Person * cached_read_person ( Pers_no pers_no ); - -bool ldb_update_person ( Pers_no pers_no, Person * person ); bool cached_update_person ( Pers_no pers_no, Person * person ); -bool ldb_delete_person ( Pers_no pers_no ); bool cached_delete_person ( Pers_no pers_no ); -Conf_no ldb_create_conf ( Conference * conference ); Conf_no cached_create_conf ( Conference * conference ); -Conference * ldb_read_conf ( Conf_no conf_no ); Conference * cached_read_conf ( Conf_no conf_no ); -bool ldb_update_conf ( Conf_no conf_no, Conference * conference ); bool cached_update_conf ( Conf_no conf_no, Conference * conference ); -bool ldb_delete_conf ( Conf_no conf_no ); bool cached_delete_conf ( Conf_no conf_no ); -Text_no ldb_create_tstat ( Text_stat * text_stat ); Text_no cached_create_tstat ( Text_stat * text_stat ); -Text_stat * ldb_read_tstat ( Text_no text_no ); Text_stat * cached_read_tstat ( Text_no text_no ); -bool ldb_update_tstat ( Text_no text_no, Text_stat * text_stat ); bool cached_update_tstat ( Text_no text_no, Text_stat * text_stat ); -bool ldb_delete_tstat ( Text_no text_no ); bool cached_delete_tstat ( Text_no text_no ); -Text_index ldb_create_text ( String text ); Text_index cached_create_text ( String text ); -String ldb_read_text ( Text_index text_offset ); String cached_read_text ( Text_index text_offset ); -bool ldb_delete_text ( Text_index text_offset ); bool cached_delete_text ( Text_index text_offset ); diff --git a/doc/ideer/cache-tankar b/doc/ideer/cache-tankar deleted file mode 100644 index ee47c68ba..000000000 --- a/doc/ideer/cache-tankar +++ /dev/null @@ -1,114 +0,0 @@ -Senast {ndrad av Linus Wed May 9 20:19:54 MET DST 1990 - -Nu skall vi se om jag kan r{ta ut mina(=Linus) tankebanor: - -cache komma ih}g. - -Cachen kommer ih}g lite av varje s} att detta inte beh|ver h{mtas fr}n -disk varje g}ng. - -Jag(=Linus) anser att det som b|r kommas ih}g {r ungef{r det som man -ville }t senast. Och kanske att n}gra objekt som man verkligen vet -refereras till ofta samt {r relativt sm} kanske ocks} borde cachas. - -Vi skall se vilka olika typer av objekt som finns: - -Conf_list -Conference -Person -Text_stat -undertyper till dessa. - -Connection sparas inte p} disk. Skall cache ta hand om detta eller - skall det finnas n}gon annanstans. Cachen beh|ven nog - tillg}ng till denna information i alla fall. - -F|r varje objekt som {r cachat m}ste lagras: - - - hela dataarean - - om huruvida den {r uppdaterad p} skivan - - om huruvida detta objekt f}r flyttas i minnet. - - senaste g}ngen n}gon tittade p} denna post. (det r{cker faktiskt - med att h}lla reda p} ordningen i vilken de olika cachade - enheterna anv{ndes men d} kan kanske inte storleken anv{ndas f|r - optimering) - - storleken p} det lagrade objektet. (f|r att optimera sj{lva - cache-funktionen g{ller det ju att minimera kvadraten av den tid - varje byte ligger i minnet i on|dan mellan }tkomsterna. - Snabbheten som vinns med cachening {r ju sedan bara begr{nsad av - hur mycket minnesarea man har tillg}ng till.) - -F|r varje typ av vilka n}gra {r cachade m}ste lagras: - -- en index-lista p} vilka som finns cachade (kanske hashtabell s} - att man snabbt kan hitta den men det {r nog on|digt). - - - -Vilka objekt m}ste eller borde finnas i minnet alltid? -(Alltid i detta fall {r v{l mellan tv} "atomiska" anrop.) - -Conf_list Ja, redan klart -Conference Nej inte tvunget. -Person De som {r inloggade. (Krav finns redan p} detta pga - strukturen av Connection-structen.) -Connection Ja, finns ju inte p} disk :-). -Text_stat Nej. - - -Vilka objekt skall man str{va efter att ha i minnet f|r att ha i -minnet alltid? (F|r att vinna tid naturligtvis) - -Conf_list Ja, ingen kommentar beh|vs -Conference Man borde kunna f|rs|ka att alltid ha de - konferenser som en anv{ndare kommer till n{sta - g}ng i minnet alltid. - - Jag(=Linus) skulle egentligen vilja g} s} l}ngt att jag - |nskar att man kunde ha alla m|ten som n}gon - inloggad person har ol{sta inl{gg i inne. - - Det borde inte vara speciellt sv}rt att h}lla reda - p} n{r det skapas nya inl{gg och d} m}ste v{l {nd} - de m|tet l{sas in s} det blir bara sm} problem. - - N{r (och var) sker egentligen kollen efter nya - nyheter i m|ten personen inte {r i. Det borde vara - n{r han skall g} till n{sta m|te. Jag(=Linus) - hittar inte denna s} jag misst{nker att det inte - {r klart. - - L}t oss str{va efter detta: - - F|r varje person som {r inloggat finns Person - Connection och Conference som han {r i och - Conference som han kommer till n{sta g}ng i - minnet. - -Person Bara de som {r inloggade. Det finns v{l ingen - anledning att f|rs|ka gissa sig till vem som - kommer att logga in h{rnest eller vem som kommer - att fr}gas efter statusen p}. -#if det_fungerar_som_jag_trodde - D{remot skulle det kanske vara trevligt om man - hade en lista p} alla personers namn i minnet - alltid s} att man inte beh|ver l{sa in namnet n{r - n}gon vill l{sa en text. -#endif - -Connection :-) - -Text_stat Det vore bra om statusen f|r n{sta text fanns inne - i minnet. N{sta text {r n{sta text en person vill - l{sa. - - [nnu b{ttre vore om status f|r alla texter som - varje inloggad person har ol{sta i ett m|te samt - status f|r alla som de ol{sta kommenterar samt - f|rsta (5-50) ol{sta i n{sta m|te som varje person - kommer till. - -Texter Texten f|r n{sta inl{gg som personen kommer till - samt till inl{gget som kommentera av aktuellt - inl{gg vore bra att ha inne redan. - Kanske {ven texten f|r f|rsta inl{gget i n{sta m|te. \ No newline at end of file diff --git a/doc/ideer/cache.spec b/doc/ideer/cache.spec deleted file mode 100644 index e4001a3db..000000000 --- a/doc/ideer/cache.spec +++ /dev/null @@ -1,73 +0,0 @@ - -(233878) 90-05-29 10.04 /64 rader/ ceder (Per Cederqvist/p 334) -Mottagare: LysKom implementationsdiskussion (m 376) <309> -Markerad av: ceder (Per Cederqvist/p 334) -Markerad av 2 andra personer. -[rende: cache ------------------------------------------------------------- -Heureka! Jag har funnit det! - -Nu vet jag hur vi ska veta vad vi kan sl{nga ut, vad som {r modifierat, -vad som vi b|r h}lla kvar i minnet till varje pris, vad vi m}ste -h}lla kvar till slutet p} detta atomiska anrop. L|sningen {r -simpel n{r man v{l kommer p} den. L|sningen kom till mig alldeles -nyss n{r jag l}g i min s{ng och funderade p} om jag skulle g} -upp eller f|rs|ka forts{tta sova mitt i allt ov{sen. (De byter -sopnedkast :-( ) Nu ska vi se om jag kan lugna ner mig s} att -jag kan skriva in h{r. Om ni inte f|rst}r n}got av vad jag skriver -h{r, s} f|rtvivla icke. Jag har det nerskrivet p} papper ocks}, -jag kommer i alla fall att kunna tyda det och minnas min ide.... - -typedef struct { - Pers_node *prev, *next; - Person *person; - u_char ref_count; - Bool is_dirty; - time_t first_modified; - Pers_node *next_dirty; -} Pers_node; - -F|r varje Person-struct som man har i minnet har man en motsvarande -Pers_node. Med hj{lp av f{lten prev/next skapar man tre (3) dubbell{nkade -listor: - -I) Objekt som ej refereras just nu. -II) Objekt som l{mnats ut under detta atomiska anrop. -III) Objekt som {r l}sta i minnet. (Inloggade personer, m|ten - som folk befinner sig i.) - -login() |kar ref_count och l{gger in personen sist p} lista III. -logout() minskar ref_count, och om den blev 0 s} flyttar den -personen till lista II. - -I slutet av varje atomiskt anrop anropas en funktion som flyttar -alla objekt i lista II till lista I. - -mark_person_as_changed() kolla is_dirty-bitten. Om objektet redan -var dirty s} g|rs ingenting. Annars l{ggs objektet in sista p} -dirty-listan (next_dirty), first_modified = time(NULL); - -N{r man beh|ver mer plats {r det bara att ta det f|rsta objektet -p} lista I som inte {r dirty och sl{nga det. - -Efter varje atomiskt anrop s} sparar man alla eller de flesta -objekten p} dirty-listan. Det kan kanske vara l{mpligt att anv{nda -f|ljande villkor f|r att kolla om det {r dags att spara eller -inte: - - if ( ref_count == 0 || time() - first_modified > SYNC_INTERVAL) - write_it(); - -Jo, en sak till. Pers_node:erna flyttar aldrig p} sig. Det {r -bara pekarna som {ndras. F|r att hitta fr}n ett nummer till en -visst person har man n}gon form av hash-tabell som pekar p} Pers_node:erna. - -N{r jag t{nker efter beh|ver man kanske ha med - Pers_no pers_no; -i Pers_node-structen. - -L}ter det h{r vettigt, eller sover jag fortfarande? - - /ceder -(Text 233878)------------------------------ -(Kommentar i (Text 233935) av Pell Pell Pell) diff --git a/doc/ideer/prot-B-analys b/doc/ideer/prot-B-analys deleted file mode 100644 index 2d9bff3a7..000000000 --- a/doc/ideer/prot-B-analys +++ /dev/null @@ -1,325 +0,0 @@ -Filen doc/prot-B-analys -Bellman hackade mera 1990-12-19, efter fysiskt m|te under kv{llen. -Aronsson was here -20 oktober 1990 - - - LysKOM Analys - -------------------------------- - Protokoll B mellan klient och server - -------------------------------- - av Lars Aronsson - <Aronsson@Lysator.LiU.SE> - - - - LysKOM - -LysKOM {r ett datakonferenssystem. Andra liknande system {r QZ-KOM och -PortaCOM. LysKOM {r Copyright (C) 1990 datorf|reningen Lysator vid -Universitetet och Tekniska H|gskolan i Link|ping. Var och en till}ts -fritt kopiera, {ndra och distribuera LysKOM dokument och program, -givet att mottagarna ges samma r{ttigheter. Varken Lysator eller dess -medlemmar tar n}got som helst ansvar f|r dokumentens eller programmens -riktighet eller f|ljderna av deras anv{ndande. - - Den h{r texten - -Den h{r texten {r en analys inf|r specifierandet av version B av det -protokoll som anv{nds mellan en klient (anv{ndarens program) och en -server (databasen). - - - - Multimedia - -F|r att kunna inf|ra multimedia i LysKOM, g}r vi |ver fr}n att ha -texter till att ha generella inl{gg (eng. document?). De har som -tidigare ett huvud (textstat) och en kropp. Huvudet ser ut som innan -(n{stan), medan kroppen byts ut mot en array av { contentstype, string -}. I texthuvudet byts textl{ngden ut mot en array av { contentstype, -length }. F{ltet no_of_lines tas bort helt. - -Contentstype {r en enum som anger vilken typ av data som str{ngen -inneh}ller, t ex text, bilder, musik, osv. De v{rden som denna enum -kan anta best{ms centralt av LysKOM-gruppen (dvs oss). Om n}gon vill -ha en egen sort f|r att experimentera med, kan de beg{ra en s}dan av -oss. N{r de kommer och s{ger "den h{r typen av data {r kul - vill ni -ha den?" kan vi best{mma om vi vill g|ra den officiell. - -De v{rden som finns initialt {r f|ljande: - 0 binary Anv{nds n{r inget annat passar - 1 iso8859_1 Text lagrad enligt iso8859_1 - 2 iso8859_1_fill Dito, men klienten f}r l{gga in - newline d{r den vill f|r att bryta - rader. - 3 rfc_header Kan anv{ndas f|r inkommande rfc-mail - -F|r att avg|ra vad som {r {renderad, kan f|ljande regel anv{ndas: - Omm 1:a dataf{ltet {r av typen iso9959_1 eller - iso8859_1_fill, s} best}r {renderaden av texten - fram till f|rsta \n i detta f{lt. - - - - Protokollet - -I protokollet ing}r f|ljande objekt av f|ljande typer: - -o Tal Ett icke-negativt decimalt heltal. -o Struct En samling objekt. Syntax: - { obj1 obj2 obj3 ... objn } -o Str{ng En radda av oktetter. Syntax: - $nnnHxyzzy -o Array Noll, ett eller flera objekt av samma typ. Kan - inneh}lla upprepningar och/eller intervall. Syntax: - [ antal obj1 obj2 obj3 ... objn ] -o Upprepning Anv{nds inuti arrayer f|r att markera att ett visst - objekt upprepas ett antal g}nger. Syntax: - *antal objekt (Mellanslag mellan antal och objekt) -o Intervall Anv{nds f|r att ange en konsekutiv f|ljd av heltal - inuti en array. Syntax: - <f|rsta sista> - -Mellanslag runt specialtecknen {, }, [, ], < och > {r frivilliga. - -Bitstr{ngar {r bara ett specialfall av structar. De skickas allts} -som { 1 0 0 1 0 }. - -Om det kommer fler f{lt i en struct {n vad man v{ntat sig, hoppar man -bara |ver dessa f{lt. T{nk dock p} att det kan f|rekomma nya -structar, arrayer och str{ngar inuti en struct. - - - - - Kommunikation med andra media - -F|r att m|jligg|ra utbyte av inl{gg mellan LysKOM och andra media, t -ex email, Usenet News, vfsh, inf|rs n}gra nya misc-items. Dessa {r -f|ljande: x-author, x-creation-time, x-recpt, x-cc-recpt, x-sent-by -och x-sent-at, d{r x st}r f|r external. X-author, x-recpt, x-cc-recpt -och x-sent-by {r str{ngar, medan x-creation-time och x-sent-at {r -struct tm med tidszon adderad. - -Dessa f{lt finns ungef{r s} h{r: - -x-author Inleder en egen grupp. M}ste f|ljas omedelbart av en - x-creation-time. Endast en dylik grupp per inl{gg. - -x-recpt Noll, ett eller flera s}dana h{r kan f|lja efter ett - local-no. De - - ----------------------------------------------------------------------- - - - - Remote Variables - -RV {r en helt ny (tror jag) ide. RV {r en klass av protokoll som kan -implementeras ovanp} klassen RPC. Det g}r ut p} att varje RPC-anrop {r -en ARRAY (ASN.1 SEQUENCE OF) d{r varje element {r endera en -tilldelning (Assignment) eller referens (Reference). Varje anrop -resulterar i ett svar (det {r ju RPC), som ocks} {r en ARRAY med lika -m}nga element i motsvarande ordning. - -En Assignment resulterar i OK eller Error, beroende p} om variabeln -fanns, om vi fick skriva den, etc. En Reference resulterar i ett OK -och variabelns v{rde, eller Error. Med Error f|ljer alltid errno och -kanske mer info, som i protokoll A. - -Ibland vill man inte n|ja sig med Assignment. Man kan vilja ha += och --= (&=, |= f|r BITSTRING). - -Det kanske inte {r l{mpligt med RV |verallt? Det r{cker ju med att -*ett* av RPC-anropen k|r RV. - - ----------------------------------------------------------------------- -ceder: - -det blir t{ta ]tkomstkollar (p} varje RV) - -en anv{ndare kan skicka en RPC med m}nga RV och l{gga beslag p} -servern - -stort tillf{lligt allokerat minne i servern. - ----------------------------------------------------------------------- - -Man kan identifiera klasserna -pers -conf -text -sess -med alla kan man g|ra create, delete -deras nummer verkar som parameter till andra v{rden (sina attribut) -eller som dubbelparameter till t.ex. membership eller mottagare - ----------------------------------------------------------------------- -SESSION -broadcast textnummer som skall skickas : Text-No -Who-Info (Session {r parameter) person : Pers-No -Who-Info (Session {r parameter) what-am-i-doing : HOLLERITH -Who-Info (Session {r parameter) working-conference : Conf-No -who-is-on : ARRAY Session - l{ses - session blir en slags local-pers-no - login kan bli create-session... Hmmm... -change-what-i-am-doing str{ngen : HOLLERITH -enable (Session {r underf|rst}dd) ena-level : INTEGER -logout : void - en liten void variabel som skrives - (eller avl{sning av sessionstid?) -pepsi : Conf-No -login (Pers-No {r parameter, session {r underf|rst}dd) password : HOLLERITH - skrives -logout : VOID - skrives ----------------------------------------------------------------------- -PERSON -Person (Pers-No {r parameter) username : HOLLERITH -Person (Pers-No {r parameter) privileges : Priv-Bits -Person (Pers-No {r parameter) flags : Personal-Flags -Person (Pers-No {r parameter) last-login : Time-Date -Person (Pers-No {r parameter) user-area : Text-No -Person (Pers-No {r parameter) total-time-present : INTEGER -Person (Pers-No {r parameter) sessions : INTEGER -Person (Pers-No {r parameter) created-lines : INTEGER -Person (Pers-No {r parameter) created-bytes : INTEGER -Person (Pers-No {r parameter) read-texts : INTEGER -Person (Pers-No {r parameter) no-of-text-fetches : INTEGER -Person (Pers-No {r parameter) created-persons : INTEGER -Person (Pers-No {r parameter) created-confs : INTEGER -Person (Pers-No {r parameter) first-created-local-no : INTEGER -Person (Pers-No {r parameter) no-of-created-texts : INTEGER -Person (Pers-No {r parameter) no-of-marks : INTEGER -Person (Pers-No {r parameter) no-of-confs : INTEGER -create-pers nummer som har skapats : Pers-No - Man l{ser helt enkelt av detta elektriska v{rde -create-person (Pers-No {r parameter) name : HOLLERITH -create-person (Pers-No {r parameter) password : HOLLERITH -get-created-texts (person : Pers-No; - first : Local-Text-No; - no-of-texts : INTEGER; {r parameter) : Text-List -set-passwd (Pers-No; my-old-password : HOLLERITH - {r parameter) new-password : HOLLERITH -set-priv-bits (Pers-No {r parameter) : Priv-Bits ----------------------------------------------------------------------- -CONFERENCE -set-garb-nice (Conf-No {r parameter) : Garb-Nice -set-permitted-submitters (Conf-No {r parameter) : Conf-No -set-presentation (Conf-No {r parameter) : Text-No -set-super-conf (Conf-No {r parameter) : Conf-No -set-supervisor (Conf-No {r parameter) : Conf-No -set-unread (Conf-No {r parameter) : INTEGER - Man kunde ju ha Conf+Pers {r parameter... -set-etc-motd (Conf-No {r parameter) : Text-No -lookup-name (conf-name : HOLLERITH {r parameter) : Conf-List - eller bara en ARRAY Conf-No ? -get-map (conference : Conf-No; - first : Local-Text-No; - no-of-texts : INTEGER {r parameter ) : Text-List -create-conf confnummer som har skapats : Conf-No -delete-conf confnummer som skall raderas : Conf-No -Conference (Conf-No {r parameter) name : HOLLERITH -Conference (Conf-No {r parameter) type : Conf-Type -Conference (Conf-No {r parameter) creation-time : Time-Date -Conference (Conf-No {r parameter) last-written : Time-Date -Conference (Conf-No {r parameter) creator : Pers-No -Conference (Conf-No {r parameter) presentation : Text-No -Conference (Conf-No {r parameter) supervisor : Conf-No -Conference (Conf-No {r parameter) permitted-submitters : Conf-No -Conference (Conf-No {r parameter) super-conf : Conf-No -Conference (Conf-No {r parameter) msg-of-day : Text-No -Conference (Conf-No {r parameter) nice : Garb-Nice -Conference (Conf-No {r parameter) no-of-members : INTEGER -Conference (Conf-No {r parameter) first-local-no : Local-Text-No -Conference (Conf-No {r parameter) no-of-texts : INTEGER ----------------------------------------------------------------------- -TEXT -add-misc-info (Text-No {r parameter) : Misc-Info -sub-misc-info (Text-No {r parameter) : Misc-Info -get-misc-info (Text-No {r parameter) : ARRAY Misc-Info -get-misc-info (Text-No, Misc-Type {r parameter) : ARRAY Misc-Datum - Kanske text-conference? -get-text (text : Text-No; - start-char : INTEGER; - end-char : INTEGER {r parameter ) : HOLLERITH; -create-text nummer som har skapats : Text-No -delete-text textnummer som skall raderas : Text-No - Man skriver detta elektriska v{rde -Text-Stat (Text-No {r parameter) author : Pers-No -Text-Stat (Text-No {r parameter) creation-time : Time-Date -Text-Stat (Text-No {r parameter) no-of-links : INTEGER -Text-Stat (Text-No {r parameter) no-of-marks : INTEGER -Text-Stat (Text-No {r parameter) misc-info : ARRAY Misc-Info -create-text (Text-No {r parameter) text : HOLLERITH -create-text (Text-No {r parameter) misc-info : ARRAY Misc-Info ----------------------------------------------------------------------- -TEXT-TEXT -add-comment { comment : Text-No; original : Text-No; } -add-footnote : { footnote : Text-No; original : Text-No; } -sub-comment (comment : Text-No; original : Text-No {r parameter ) : VOID -sub-footnote (footnote : Text-No; original : Text-No {r parametrar) : VOID ----------------------------------------------------------------------- -SERVER -shutdown exit-val : INTEGER - skrives -get-info version : INTEGER; -get-info conf-pres-conf : Conf-No; -get-info pers-pres-conf : Conf-No; -get-info motd-conf : Conf-No; -get-info kom-news-conf : Conf-No; -get-info motd-of-lyskom : Text-No; -set-motd-lyskom : Text-No - skrives -get-time (delas? Obs! synkproblem) : Time-Date -sync : void - liten void som skrives ----------------------------------------------------------------------- -PERSON-CONFERENCE -sub-member (conference : Conf-No; person : Pers-No) : VOID -add-member : { conference : Conf-No; new-member : Pers-No; } - |msesidiga. Variablerna kan inte bindas }t endera h}llet... -add-member priority : INTEGER; -add-member where : INTEGER; - conf & pers blir parametrar. -Membership (Pers-No och Conf-No {r parameter) last-time-read : Time-Date -Membership (Pers-No och Conf-No {r parameter) priority : INTEGER -Membership (Pers-No och Conf-No {r parameter) last-text-read : Local-Text-No -Membership (Pers-No och Conf-No {r parameter) read-texts : ARRAY Local-Text-No - ? -get-members-params (conference : Conf-No; - first : INTEGER; - no-of-members : INTEGER {r parameter) : Member-List -get-membership-params (person : Pers-No; - first : INTEGER; - no-of-confs : INTEGER; - mask : BITSTRING {want-read-texts} {r parameter) : Membership-List ----------------------------------------------------------------------- -CONFERENCE-TEXT -add-recipient (Text-No {r parameter) : Misc-Info -sub-recipient (text : Text-No; conference : Conf-No) : VOID - ?asymmetri? ----------------------------------------------------------------------- -PERSON-TEXT -get-marks (kan delas?) : Mark-List -Mark (Text-No; type : INTEGER {r parameter ) : VOID - ?? -mark-as-read (Conf-No; texts : ARRAY Local-Text-No {r parameter) : VOID - ?? Egentligen en loop -- ge mig forth -mark-text (Text-No {r parameter) mark-type : INTEGER - kan vara snyggt... kan l{sas/skrivas (?) ORas ANDas? ----------------------------------------------------------------------- -13 76 345 3 { 4711 4701 } 345 3 { 74 75 76 } - -(60 + 43 = 103) -13 75 6 { 4711 74 4701 74 4711 75 4701 75 4711 76 4701 76 } -=13 6 { =99 =0000 %54 36 %54 36 =76 =1001 } - -(26 + 179 = 205) -13 13 74 14 13 75 15 13 76 -=13 99999999999999999999999999999999999999999999999999999999999999999999999999999999 -%14 54 36 -=15 99999999999999999999999999999999999999999999999999999999999999999999999999999999 diff --git a/doc/ideer/versioner b/doc/ideer/versioner deleted file mode 100644 index f9c306f62..000000000 --- a/doc/ideer/versioner +++ /dev/null @@ -1,129 +0,0 @@ -Filen 2kom/doc/versioner -14 oktober 1990 -Aronsson was here - - - LysKOM Projektet - -------------------------------- - Hantering av {ndringsf|rslag och versioner - -------------------------------- - av Lars Aronsson - <Aronsson@Lysator.LiU.SE> - - - - LysKOM - -LysKOM {r ett datakonferenssystem. Andra liknande system {r QZ-KOM och -PortaCOM. LysKOM {r Copyright (C) 1990 datorf|reningen Lysator vid -Universitetet och Tekniska H|gskolan i Link|ping. Var och en till}ts -fritt kopiera, {ndra och distribuera LysKOM dokument och program, -givet att mottagarna ges samma r{ttigheter. Varken Lysator eller dess -medlemmar tar n}got som helst ansvar f|r dokumentens eller programmens -riktighet eller f|ljderna av deras anv{ndande. - - Den h{r texten - -Den h{r texten {r avsedd f|r internt bruk i Lysators LysKOM-projekt, -den {r inte avsedd f|r spridning. Detta hindrar inte att den kan -till{mpas i andra, liknande projekt. - -Texten beskriver hur {ndringsf|rslag och bugrapporter tas emot, hur -specifikationer uppr{ttas f|r nya versioner (av programvara och -dokument) samt hur dessa specifikationer implementeras. - - Kontinuerlig utveckling - -LysKOM {r en produkt under kontinuerlig utveckling. LysKOM kommer -aldrig att bli f{rdigt, det kommer alltid (s} l{nge LysKOM anv{nds) -att beh|vas nya versioner. Detta placerar LysKOM i samma kategori av -produkter som operativsystem eller personbilar (varje }r en ny -}rsmodell av samma bil). - -Det andra s{ttet att utveckla programvara {r det som l{rs ut i skolans -kurser. D{r samlas ett projekt runt en kravspecifikation, utvecklar -systematiskt och l{mnar ifr}n sig en f{rdig produkt som p} sin h|jd -beh|ver lite bugfixar i efterhand. - -Skillnaden mellan skolmodellen och kontinuerlig utveckling {r att i -det senare fallet kommer en uppdaterad kravspecifikation (ofta -underf|rst}dd som en massa bugrapporter eller "ideer") innan den -f|rsta {r implementerad. Detta framkallar l{tt stress -- hur skall man -hinna hacka in alla nya {ndringar? Och med stressen f|ljer missmodet -och tr|ttheten. - -L|sningen f|r att undvika den stressen {r att h}lla huvudet kallt och -inte inf|ra alla f|reslagna {ndringar. I st{llet planerar man vissa -versioner eller utg}vor av programvaran. Varje version ges en skriven -kravspecifikation d{r en lagom protion av inkommna {ndringsf|rslag tas -med. D{refter implementeras kravspecifikationen enligt den vanliga -skolmodellen. Versionen avslutas (f|rklaras f{rdig och s{tts i drift) -innan kravspecifikationen f|r n{sta version f}r tas fram. - - Bugfilen - -Med bugrapporter avses h{r rapporter om uppt{ckta fel, f|rslag till -{ndringar av funktioner samt allm{nna ideer om framtida utveckling. -Jag ser ingen anledning att skilja p} desssa kategorier. - -Med program av typen LysKOM kommer anv{ndarna med bugrapporter utan -att man ber om det. Dessutom kommer man som utvecklare naturligtvis -ocks} med egna f|rslag. F|r att inte drunkna i alla rapporter m}ste -man ta hand om dem systematiskt. Ett s{tt {r att tillhandah}lla en -speciell blankett, som IDA gjorde i de gamla skrivarrummen. Ett annat -{r att h}lla en mailadress dit man kan skicka sina rapporter. I KOM -verkar det naturligt att h}lla ett m|te f|r detta {ndam}l. Men d} -m}ste ocks} n}gon regelbundet l{sa detta m|te och spara alla -rapporter. - -Alla bugrapporter som kommer in skall ges ett l|pnummer och sparas i -en s.k. bugfil. Eftersom det inte alltid {r klart vilken del av -programmet som skall {ndras f|r att }tg{rda en viss bugrapport, h}lls -bara en bugfil f|r hela projektet. Uppdateringen av bugfilen sker -alltid parallellt med andra aktiviteter. N}gon b|r vara ansvarig f|r -uppdateringen, men filen tillh|r {nd} projektet, inte de medlemmar som -f|r tillf{llet deltar i det. - - Ny version - -En ny version av LysKOM (eller av n}gon del, t.ex. en klient eller ett -protokoll) b|rjar med att n}gon eller n}gra personer f}r lust att -arbeta. De v{ljer d} ur bugfilen n}gra rapporter de tycker {r viktiga -att }tg{rda. Inte fler {n att de tror sig klara av p} {ndlig tid, men -inte heller f|r f}. De tar sig ocks} ett nytt versionsnummer (eller -versionsbokstav f|r LysKOM protokoll). - -Nu {r versionen ig}ng och ingen annan version av samma program f}r -p}b|rjas innan denna {r klar. Varken av samma grupp eller av n}gon -annan. En version kan dock n{r som helst l{ggas ner om -gruppmedlemmarna {r |verens om att de {r p} fel sp}r. - -De bugrapporter som gruppen valt att }tg{rda markeras med -versionsnumret i bugfilen. Rapporterna f}r dock ligga kvar i filen -tills vidare. Det kan ju h{nda att versionen l{ggs ner innan den blir -f{rdig och d} {r ju bugrapporten fortfarande giltig. - - Skolmodellen - -De bugrapporter som gruppen valt att }tg{rda sammanst{lls till en -kravspecifikation. D{r skall ocks} beskrivas vilka andra delar (t.ex. -dokument) som kommer att p}verkas. Hur gruppen har t{nkt l|sa -problemet skriver de ner i en konstruktionsbeskrivning (eller -designspecifikation). N{r den gamla koden {ndras skall en kopia av -f|reg}ende version finnas kvar. Om den h{r versionen l{ggs ner innan -den blir kvar, m}ste det finnas en som fungerar. - -Hur programutvecklingen fr}n ide till f{rdig produkt g}r till beskrivs -i en massa b|cker och kurser p} skolan. Det beror kraftigt p} hur -omfattande {ndringarna {r och vilka som arbetar med dem. Det skulle -f|ra alltf|r l}ngt att beskriva utvecklingsprocessen h{r. - - Avslutning - -Det skall alltid finnas n}got s{tt att avg|ra om versionen {r f{rdig. -Ett s{tt {r att l}ta anv{ndarna provk|ra och s{ga om de {ndringarna -fungerar som det var t{nkt. Detta kallas betarelease p} grekiska. N{r -alla {r n|jda och glada f|rklaras versionen som godk{nd och den tas i -drift. Nu men inte tidigare f}r de }tg{rdade bugrapporterna raderas i -bugfilen och k{llkoderna till tidigare versioner kastas. Avslutade -versioner {r v{rda att firas. diff --git a/doc/libraries b/doc/libraries deleted file mode 100644 index d250422e0..000000000 --- a/doc/libraries +++ /dev/null @@ -1,4 +0,0 @@ -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 diff --git a/doc/mall-swe.latexinfo b/doc/mall-swe.latexinfo deleted file mode 100644 index 86f0578ce..000000000 --- a/doc/mall-swe.latexinfo +++ /dev/null @@ -1,90 +0,0 @@ -\documentstyle[12pt,latexinfo,lyskom]{rapport} \c -*-latexinfo-*- -\pagestyle{empty} - -\begin{document} -\setfilename{foo -.info} -\bibliographystyle{alpha} - -\newindex{cp} -\newindex{fn} - -\title{Konferenssystemet\\ - LysKOM\\} - -\sp 3 - -\author{Thomas Bellman\\ - Lysator\\ - Bellman@Lysator.LiU.SE\\ - {\small Personnummer: 690423-4132}} - - -\date{\idag} - -\maketitle -\clearpage -\vspace{0pt plus 1filll} -Copyright \copyright{} 1990 Lysator - -\sp{2} - -Denna handledning beskriver konferenssystemet \LysKOM{}. H\"{a}r -beskrivs de allm\"{a}na principerna f\"{o}r \LysKOM{}, och de -tj\"{a}nster som systemet tillhandah\aa{}ller, samt \"{a}ven de finesser -som finns i \LysKOM{}. Den beskriver \emph{inte} hur man anv\"{a}nder -en klient f\"{o}r att k\"{o}ra \LysKOM{} eller hur man styr dessa -klienter. L\"{a}saren h\"{a}nvisas till respektive klients -anv\"{a}ndarhandledning f\"{o}r denna information, till exempel -\cite{LysKOM:TTY-client.swe}. - - -\sp{2} -\sp{4} -Tillst\aa{}nd ges att kopiera denna manual och distribuera kopiorna, -under f\"{o}ruts\"{a}ttning att ovanst\aa{}ende copyrightnot och denna -text finns med p\aa{} alla kopior. - -\clearpage -\pagestyle{headings} -\pagenumbering{roman} - - -\c \tableofcontents - -\clearpage -\pagenumbering{arabic} - - -\node Top, Inledning, , dir -\comment node-name, next, previous, up - -\begin{menu} -* Inledning:: Vad {r LysKOM? -* Sakregister:Index: -\end{menu} - - - - -\node Inledning, Inledning, , top -\comment node-name, next, previous, up -\chapter{Inledning till LysKOM} -\cindex{Inledning till LysKOM} -\cindex{LysKOM, inledning} - -\section{Ett konferenssystem} - -... - -\subsection{Skilnader mot andra liknande system} - -\subsubsection{Usenet News} - -... -... -... - -\bibliography{referenser} - -\end{document} diff --git a/doc/mall.latexinfo b/doc/mall.latexinfo deleted file mode 100644 index 358f508fa..000000000 --- a/doc/mall.latexinfo +++ /dev/null @@ -1,77 +0,0 @@ -\documentstyle[12pt,latexinfo,lyskom]{report} \c -*-latexinfo-*- -\pagestyle{empty} - -\begin{document} - - -\newindex{cp} -\newindex{fn} - -\title{dbck --- Automatic LysKOM Database Integrity Checkprogram\\} - -\sp 3 - -\author{Per Cederqvist\\ - Lysator\\ - ceder@lysator.liu.se} - - -\date{\today} - -\maketitle -\clearpage -\vspace{0pt plus 1filll} -Copyright \copyright{} 1990 Lysator - -\sp{2} - -This document describes... - -\sp{6} -Tillst\aa{}nd ges att kopiera denna manual och distribuera kopiorna, -under f\"{o}ruts\"{a}ttning att ovanst\aa{}ende copyrightnot och denna -text finns med p\aa{} alla kopior. - -\clearpage -\pagestyle{headings} -\pagenumbering{roman} - - -\tableofcontents - -\clearpage -\pagenumbering{arabic} - -\setfilename{dbck.info} - -\begin{ifinfo} -Copyright \copyright 1991 Lysator -\end{ifinfo} - -\node Top, dbck, (dir), (dir) -\comment node-name, next, previous, up - -\begin{menu} -* Inledning:: Vad {r LysKOM? -* Sakregister:Index: -\end{menu} - - - - -\node Inledning, Inledning, , top -\comment node-name, next, previous, up -\chapter{Inledning till LysKOM} -\cindex{Inledning till LysKOM} -\cindex{LysKOM, inledning} - -\section{Ett konferenssystem} - -... - -\subsection{Skilnader mot andra liknande system} - -\subsubsection{Usenet News} - - -\end{document} diff --git a/doc/man/Makefile b/doc/man/Makefile deleted file mode 100644 index 1b91259d4..000000000 --- a/doc/man/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -MANDIR = /usr/local/man -MANEXTS = 1 3 5 8 - -all:; -depend:; - -clean: - $(RM) *~ core - -for i in $(MANEXTS); \ - do \ - echo making clean in directory man$$i; \ - (cd man$$i; $(RM) *~ core) \ - done - -install: - for i in $(MANEXTS); \ - do \ - for page in man$$i/*.$$i; \ - do \ - echo installing $$page; \ - install $$page $(MANDIR)/man$$i; \ - done \ - done - ln $(MANDIR)/man8/ramkomd.8 $(MANDIR)/man8/lyskomd.8 diff --git a/doc/man/dbck.8 b/doc/man/dbck.8 deleted file mode 100644 index 66f32624a..000000000 --- a/doc/man/dbck.8 +++ /dev/null @@ -1,105 +0,0 @@ -.\" $Id: dbck.8,v 1.5 1991/08/22 23:57:52 linus Exp $ -.\" $Date: 1991/08/22 23:57:52 $ -.TH dbck 8 "August 22, 1991" -.SH NAME -dbck - reports and corrects errors in the LysKOM database. This -program is also used remove unreferenced texts from the texts file. -.SH SYNOPSIS -.B /usr/lyskom/bin/dbck -[ -.B -D -.I database-directory -] [ -.B -irvg -] -.SH DESCRIPTION -This program should be run after something has happened that has made the -database corrupted. -.PP -It fixes the database, checking all references. -.PP -With argument -.B -g -the file with texts are rewritten without all unreferenced texts and -all pointers are adjusted. This does only happen if the database was -correct. -.PP -If none of the options -.B -r, -i -or -.B -g -are given the database is not changed. -.SH OPTIONS -.TP -.BI \-D " database-directory" -Use the database in the -.I database-directory -as the target of the checkup. -.br -Example: If your database is in -.ft B -$HOME/lyskom/db -.ft R -you should use the command -.ft B -.br -/usr/lyskom/bin/dbck -D $HOME/lyskom -.ft R -.TP -.B \-i -Run interactively asking the user questions. -.TP -.B \-r -Repair simple errors without asking. -.TP -.B \-v -Verbose mode. Report not only errors but other statuses of the -database. -.TP -.B \-g -Do the garbage collect of the texts part of the database. This is -sometimes called a compression of the text but it only removes -non-referenced texts. -.SH NOTES -The messages -.I Conference <confno> has a bad Text-list. Starts with 0 -and -.I Person <persno> has created <number> conferences, not <number> -.RI ( as -.I said in -.IR person-stat ). -are normal. If you get them when you specify -.B -g, -let -.B dbck -fix them and run -.B dbck -g -again. -.SH FILES -.TP 20 -.B /usr/lyskom -Default database directory. -.TP -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /db/ramkomd-backup -Backup file of -.B ramkomd-data. -.SH BUGS -Does not lock the database. -.PP -Does never check if the database is locked. -.PP -Should have an unlock database option. -.PP -Does not check that -.B ramkomd-data -and -.B ramkomd-texts -are consistent. -.SH AUTHOR -Per Cederqvist <ceder@lysator.liu.se> diff --git a/doc/man/lyskom.5 b/doc/man/lyskom.5 deleted file mode 100644 index e507faa7f..000000000 --- a/doc/man/lyskom.5 +++ /dev/null @@ -1,294 +0,0 @@ -.\" $Id: lyskom.5,v 1.3 1991/08/24 11:51:46 linus Exp $ -.\" $Date: 1991/08/24 11:51:46 $ -.TH ramkom 5 "August 24, 1991" -.SH NAME -ramkom - LysKOM -.I database -format -.SH SYNOPSIS -.B /usr/lyskom/db/ramkomd-* -.br -and -.br -.B /usr/lyskom/etc/pid -.PP -.B #include <lyskom/kom-types.h> -.SH DISCLAIMER -The -.I database -is not really a database but a sequential file where all data is saved -from the memory. -.SH DESCRIPTION -There are 2 files: One file with all the data -.RB ( ramkomd-data ). -And one with all texts -.RB ( ramkomd-texts ). -The texts file does not contain any information about where any text -starts of ends, all this is in the data file together with other infos -on the text. -.PP -If the first five chars of the data file is CLEAN then the -.I database -is considered clean. If its anything else the -.BR ramkomd (8) -program will try to find the backupfile instead. -.PP -Then there is a number telling the number of the next free conference -.RI ( next_free_num ). -.PP -Now follows a list of all conferences. One conference on each line. If -the conference is deleted the line consists of a -.B @ -otherwise it starts with a -.BR + . -.PP -Now follows a list of all person statuses. Here is also every person -on its own line and the deleted persons or the numbers that are not -persons but conferences are lines containing just a -.BR @ . -.PP -Both the conference status part and the person status part are exactly -.IR next_free_num -1 -lines long. -.PP -Now follows the number of the next text that is not used and a list of -text statuses. -Every text status has its own line just like the other statuses and -non-existent texts are represented by the -.BI @ . -.PP -The different statuses types are -.B conference -.BR statuses , -.B person statuses -and -.B text -.BR statuses . -These are in a struct in the include file but in this file they are -not saved as structs but every element is saved as a ascii string. -Strings are saved as holerith strings. The field of the struct is not -even saved in the same order as in the struct. -Their order in the database is followed below. -.PP -An array of things is represented in the database by a number telling -how many elements there are in the array and the either a -.B * -in the case no elements or a -.B { -followed by all the elements and a finishing -.BR } . -.SS Conference status -.LP -This contains all information for a conference. A conference is a -object that recieves texts. -.TP 15 -.I Name -Name of the conference saved as a holerith string. -.TP -.I Member list -An array of the members in that conference. -.TP -.I First local number -This is the local number of the first text in the conference. Its -saved here in order to save space in this file by not mentioning all -deleted texts in the beginning of the conference. -.TP -.I Texts -This is an array of recieved texts. The local number of the text is -determined by the position in this list and the value of the -.I first local -.IR number . -.TP -.I Type -This is the type of the conf, it contains the infomation that says if -the conference is read protected, original flagged conference, secret, -or if its a letter box. -.TP -.I Creation time -The time the conference was created. -.TP -.I Last written -The time the last text was sent to the conference. -.TP -.I Creator -The number of the person that has created the conference. This is 0 -for conferences that are created initially. -.TP -.I Presentation -This is the number of the text containing a presentation of the -conference. If there is no presentation this number is 0. -.TP -.I Supervisor -This is the number of the conference whose members are supervisors of -the conference. Initially this is set to be the number of the letter -box of the creator. -.TP -.I Permitted submitters -This is the number of the conference whose members are allowed to -submit texts to this conference. If this is 0 (the default) all -persons i -.B LysKOM -are allowed to submit. -.TP -.I Super conference -This is a number of a conference that comments to articles should be -sent to if this conference is original flagged. -.TP -.I Message of the day -This is the textnumber of the text containing a notice message about -the conference. Mostly used for letter boxes. If 0 then there is no -such message. -.TP -.I Garb nice -This is the number of days a text stays in the conference before it is -removed by the expiration routines. Its really the expiration rate. -.SS Person statuses -.LP -Person statuses contains all info about persons. -.TP 15 -.I Password -The password is stored as a string. The length of the string is 64 but -the length of the password itself is stored as the first char in the -string. Passwords longer that 63 chars are truncated. -.TP -.I Username -This is the username and machine from the last time the person logged in. -.TP -.I Privileges -The persons privileges are stored here. This is a bit array, length is -16 bits. It is not really welldetemined what bit does what. -.TP -.I Personal flags -The persons flags are stored here. -.TP -.I First local number -This is the local number of the first created text that still exists -in the database. Its local to this list. -.TP -.I Created text list -This is an array of all created texts beginning at the first local -number. -.TP -.I Marked texts -This is an array of all marked texts and their mark type. Every -element in the array is a text number and a mark number. -.TP -.I Membership -Here is the information about which conferences the person is member -in. Its an array where every element is of the type -.B Membership -(See below). -.TP -.I Last login -Time of the last login. -.TP -.I User area -Number of the text being the persons user area. If there is no user -area this is 0. -.TP -.I Total time present -Time in -.B LysKOM -in seconds. -.TP -.I Sessions -Number of logins made for that person. -.TP -.I Created lines -.TP -.I Created bytes -.TP -.I Read texts -Count of read marked texts. -.TP -.I No of fetches -This is the information about how many texts this person has fetched. -Using caching clients this number could increase well beyond -.I Read -.IR texts . -.TP -.I Created persons -Count of created persons. -.TP -.I Created conferences -Count of created conferences. -.SS Text statuses -This contains info about the texts. -.TP 15 -.I Created time -Time this text was created. -.TP -.I Author -Person that wrote this text. -.TP -.I Start -Start pointer for the text in the -.I ramkomd-texts -file. -.TP -.I Number of lines -Length of the text in lines. -.TP -.I Number of chars -Length of the text in chars. -.TP -.I Number of marks -Count of existing marks on this text. -.TP -.I Header list -An array containing info about -.IR recipients , -.I comments -.IR to -pointers -etc. Every element is a -.IR Misc_info . -.SS Membership -The membership type tells us about conferences we are member of and -how much we have already read of it. It is saved in this way: -.TP -.I Last time read -Updated when we mark a text as read in this conference. -.TP -.I Conference number -The number telling what conf. -.TP -.I Priority -Used by the client to determine reading order. -.TP -.I Last text read -Local number of the last text we have read. This is used to keep track -of which texts we have not yet read and calculate how many unread we -have in this conference. -.TP -.I Read texts -An array containing the texts that we have read after the -.I Last text -.IR read . -This is necessary because its possible to read in any order. -.SH FILES -.TP 20 -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH "SEE ALSO" -.BR ramkomd (8), -.BR dbck (8) -.SH BUGS -This is really a joke. Its not a database, not optimal in any way. But -it works. -.PP -The -.I message of the day -text number is not saved anywhere. This makes the -server forget what text that is when restarting. -.SH NOTES -This will soon disapear and be replaced by something more bazaarly -inexplicable. diff --git a/doc/man/lyskomd.8 b/doc/man/lyskomd.8 deleted file mode 100644 index b768dbf82..000000000 --- a/doc/man/lyskomd.8 +++ /dev/null @@ -1,95 +0,0 @@ -.\" $Id: lyskomd.8,v 1.3 1991/08/22 23:41:12 linus Exp $ -.\" $Date: 1991/08/22 23:41:12 $ -.TH ramkomd 8 "August 22, 1991" -.SH NAME -ramkomd - LysKOM server -.SH SYNOPSIS -.B /usr/lyskom/bin/ramkomd -[ -.B -d -] [ -.B -q -] [ -.BI -D database-directory -] [ -.BI -p clientportnumber -] [ -.BI -P muxportnumber -] [ -.B -a -] -.SH DESCRIPTION -This program runs a LysKOM server. -.PP -It listens for connections on the given portnumbers (defaults are 4894 -for the -.I clientportnumber -and 4787 for the -.IR muxportnumber ). -.SH OPTIONS -.TP -.B \-d -Adds one to the debug-level i.e. increases the amount of output on the -stderr from the process. - -Using one -.B \-d -make the process print a -.I > -for every timeout, a message for every person that is connecting or -disconnecting and a message for every succesful or unsuccessful -communication to the process. -.TP -.B \-q -Never save the database. -.TP -.BI \-D database-directory -Use the database in the -.I database-directory. -.br -Example: If your database is in -.B $HOME/lyskom/db -you should use the option -.B \-D$HOME/lyskom -.TP -.BI \-p clientportnumber -listens for clients on the port number -.I clientportnumber. -.TP -.BI \-P muxportnumber -listens for mux connections on the port number -.I muxportnumber. -A mux connection is a connection using a special protocoll to allow -several sessions within one connection. -.TP -.B \-a -Do not send any non-requested messages. This disables the sending of -messages about events in the server to all connections. -.SH FILES -.TP 20 -.B /usr/lyskom -Default database directory. -.TP -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH BUGS -Small memory leak. -.PP -There is no practical handling of security. -.PP -The choice of asynchronously issued messages is not very good. -.PP -The so called "data base" is a joke. -.SH AUTHOR -Per Cederqvist <ceder@lysator.liu.se> -.SH NOTE -Version 2.0 on its way. diff --git a/doc/man/man3/isc3.x b/doc/man/man3/isc3.x deleted file mode 100644 index aec549f6e..000000000 --- a/doc/man/man3/isc3.x +++ /dev/null @@ -1,186 +0,0 @@ -.\" $Copyright: $ -.\" Copyright (c) 1991 Lysator Computer Club, Linkoping University, Sweden -.\" All rights reserved -... -.V= $Header: /home/ceder/convert-lyskomd/cvsroot/lyskom-server/doc/man/man3/Attic/isc3.x,v 0.1 1991/08/12 17:39:55 ceder Exp $ -.TH ISC 3X "\*(V)" "LUNATIX" -.SH NAME -isc_initialize, isc_shutdown, isc_listen, isc_unlisten, -isc_opentcp, isc_openfile, isc_openfd, isc_close, -isc_sessions, isc_getnextevent, isc_dispose, -isc_flush, isc_write, isc_putc, isc_printf, -isc_allocmsg, isc_reallocmsg, isc_freemsg, isc_mkstrmsg, -isc_setmaxmsgsize, isc_setallocfn, isc_setlogfn, isc_setabortfn -.SH FUNCTIONS -.nf -.B IscMaster * -.B " isc_initialize (IscConfig *cfg)" -.PP -.B void -.B " isc_shutdown(IscMaster *mcb)" -.PP -.B int -.B " isc_listen(IscMaster *mcb, int port);" -.PP -.B void -.B " isc_unlisten(IscMaster *mcb, int port);" -.PP -.B "IscSession *" -.B " isc_opentcp(IscMaster *mcb, const char *host, int port)" -.PP -.B "IscSession *" -.B " isc_openfile(IscMaster *mcb, const char *path, int mode)" -.PP -.B "IscSession *" -.B " isc_openfd(IscMaster *mcb, int fd)" -.PP -.B "void" -.B " isc_close (IscSession *scb)" -.PP -.B "int" -.B " isc_sessions (IscMaster *mcb)" -.PP -.B "IscEvent *" -.B " isc_getnextevent (IscMaster *mcb, long timeout)" -.PP -.B "void" -.B " isc_dispose (IscEvent *ecb)" -.PP -.B "void" -.B " isc_flush (IscSession *scb)" -.PP -.B "int" -.B " isc_write (IscSession *scb, const void *buf, size_t len)" -.PP -.B "int" -.B " isc_printf (IscSession *scb, const char *format, ...)" -.PP -.B "int" -.B " isc_putc (int chr, IscSession *scb)" -.PP -.B "IscMessage *" -.B " isc_allocmsg(size_t size);" -.PP -.B "IscMessage *" -.B " isc_reallocmsg(IscMessage *msg, size_t size);" -.PP -.B "void" -.B " isc_freemsg(IscMessage *msg);" -.PP -.B "IscMessage *" -.B " isc_mkstrmsg(const char *str);" -.PP -.B "void" -.B " isc_setmaxmsgsize (IscMaster *mcb, size_t size)" -.PP -.B "void" -.B " isc_setlogfn (void (*logfnp)(const char *fmt, va_list AP))" -.PP -.B "void" -.B " isc_setallocfn (void * (*mallocfn)(size_t size)," -.B " void * (*reallocfn)(void *buf, size_t size)," -.B " void (*freefn)(void *buf))" -.PP -.B "void" -.B " isc_setabortfn (void (*abortfn)(const char *msg))" -.SH TYPES -.nf -.B typedef void IscConfig; -.PP -.B typedef enum -.B { -.B " ISC_EVENT_ERROR," -.B " ISC_EVENT_TIMEOUT," -.B " ISC_EVENT_LOGIN," -.B " ISC_EVENT_LOGOUT," -.B " ISC_EVENT_MESSAGE," -.B "} IscEventType;" -.PP -.B typedef enum -.B { -.B " ISC_TYPE_UNKNOWN," -.B " ISC_TYPE_TCP," -.B " ISC_TYPE_FILE" -.B "} IscSessionType;" -.PP -.B typedef struct isc_msg -.B { -.B " int size;" -.B " int length;" -.B " char *buffer;" -.B } IscMessage; -.PP -.B typedef struct isc_mcb -.B { -.B " int port;" -.B " int fd;" -.B " int maxmsgsize;" -.B " int maxqueuedsize;" -.B " int maxdequeuelen;" -.B " struct isc_scb *sessions;" -.B } IscMaster; -.PP -.B typedef struct isc_scb -.B { -.B " struct isc_scb * prev;" -.B " struct isc_scb * next;" -.B " IscMaster * mcb;" -.B " IscSessionType type;" -.B " int fd; -.B " IscMsgQueue * rd_msg_q;" -.B " IscMsgQueue * wr_msg_q;" -.B " char sendbuf[2048];" -.B " int sendindex;" -.B " union" -.B " {" -.B " struct" -.B " {" -.B " char * hostname;" -.B " int rport;" -.B " int lport;" -.B " } tcp;" -.B " struct" -.B " {" -.B " char * pathname;" -.B " int openmode;" -.B " } file;" -.B " } info;" -.B " int kill_him;" -.B " time_t logintime;" -.B " struct" -.B " {" -.B " struct" -.B " {" -.B " long bytes;" -.B " long packets;" -.B " } rx, tx;" -.B " } stats;" -.B "" -.B " ISC_UDGTYPE * udg; /* Reserved for user defined usage */" -.B "} IscSession;" -.PP -.B typedef struct isc_ecb -.B { -.B " IscEventType event;" -.B " IscSession * session;" -.B " IscMessage * msg;" -.B } IscEvent; -.SH DESCRIPTION -These functions implement an interface to the TCP/IP streams facitiliy. -The functions are obtained with the loader option -.BR \-lisc . -(More to come here...) -.PP -.SH DIAGNOSTICS -(And here... :\-) -.PP -.SH BUGS -Hehe... I'm sure they exists... -.SH GUILTY -Peter Eriksson <pen@lysator.liu.se> & -Per Cederqvist <ceder@lysator.liu.se> - - -ISC is Copyright (c) 1991 Lysator Computer Club, Linkoping University, Sweden, -in cooperation with the International Syndicate of Computation. -All rights reserved. diff --git a/doc/man/man5/lyskom.5 b/doc/man/man5/lyskom.5 deleted file mode 100644 index e507faa7f..000000000 --- a/doc/man/man5/lyskom.5 +++ /dev/null @@ -1,294 +0,0 @@ -.\" $Id: lyskom.5,v 1.3 1991/08/24 11:51:46 linus Exp $ -.\" $Date: 1991/08/24 11:51:46 $ -.TH ramkom 5 "August 24, 1991" -.SH NAME -ramkom - LysKOM -.I database -format -.SH SYNOPSIS -.B /usr/lyskom/db/ramkomd-* -.br -and -.br -.B /usr/lyskom/etc/pid -.PP -.B #include <lyskom/kom-types.h> -.SH DISCLAIMER -The -.I database -is not really a database but a sequential file where all data is saved -from the memory. -.SH DESCRIPTION -There are 2 files: One file with all the data -.RB ( ramkomd-data ). -And one with all texts -.RB ( ramkomd-texts ). -The texts file does not contain any information about where any text -starts of ends, all this is in the data file together with other infos -on the text. -.PP -If the first five chars of the data file is CLEAN then the -.I database -is considered clean. If its anything else the -.BR ramkomd (8) -program will try to find the backupfile instead. -.PP -Then there is a number telling the number of the next free conference -.RI ( next_free_num ). -.PP -Now follows a list of all conferences. One conference on each line. If -the conference is deleted the line consists of a -.B @ -otherwise it starts with a -.BR + . -.PP -Now follows a list of all person statuses. Here is also every person -on its own line and the deleted persons or the numbers that are not -persons but conferences are lines containing just a -.BR @ . -.PP -Both the conference status part and the person status part are exactly -.IR next_free_num -1 -lines long. -.PP -Now follows the number of the next text that is not used and a list of -text statuses. -Every text status has its own line just like the other statuses and -non-existent texts are represented by the -.BI @ . -.PP -The different statuses types are -.B conference -.BR statuses , -.B person statuses -and -.B text -.BR statuses . -These are in a struct in the include file but in this file they are -not saved as structs but every element is saved as a ascii string. -Strings are saved as holerith strings. The field of the struct is not -even saved in the same order as in the struct. -Their order in the database is followed below. -.PP -An array of things is represented in the database by a number telling -how many elements there are in the array and the either a -.B * -in the case no elements or a -.B { -followed by all the elements and a finishing -.BR } . -.SS Conference status -.LP -This contains all information for a conference. A conference is a -object that recieves texts. -.TP 15 -.I Name -Name of the conference saved as a holerith string. -.TP -.I Member list -An array of the members in that conference. -.TP -.I First local number -This is the local number of the first text in the conference. Its -saved here in order to save space in this file by not mentioning all -deleted texts in the beginning of the conference. -.TP -.I Texts -This is an array of recieved texts. The local number of the text is -determined by the position in this list and the value of the -.I first local -.IR number . -.TP -.I Type -This is the type of the conf, it contains the infomation that says if -the conference is read protected, original flagged conference, secret, -or if its a letter box. -.TP -.I Creation time -The time the conference was created. -.TP -.I Last written -The time the last text was sent to the conference. -.TP -.I Creator -The number of the person that has created the conference. This is 0 -for conferences that are created initially. -.TP -.I Presentation -This is the number of the text containing a presentation of the -conference. If there is no presentation this number is 0. -.TP -.I Supervisor -This is the number of the conference whose members are supervisors of -the conference. Initially this is set to be the number of the letter -box of the creator. -.TP -.I Permitted submitters -This is the number of the conference whose members are allowed to -submit texts to this conference. If this is 0 (the default) all -persons i -.B LysKOM -are allowed to submit. -.TP -.I Super conference -This is a number of a conference that comments to articles should be -sent to if this conference is original flagged. -.TP -.I Message of the day -This is the textnumber of the text containing a notice message about -the conference. Mostly used for letter boxes. If 0 then there is no -such message. -.TP -.I Garb nice -This is the number of days a text stays in the conference before it is -removed by the expiration routines. Its really the expiration rate. -.SS Person statuses -.LP -Person statuses contains all info about persons. -.TP 15 -.I Password -The password is stored as a string. The length of the string is 64 but -the length of the password itself is stored as the first char in the -string. Passwords longer that 63 chars are truncated. -.TP -.I Username -This is the username and machine from the last time the person logged in. -.TP -.I Privileges -The persons privileges are stored here. This is a bit array, length is -16 bits. It is not really welldetemined what bit does what. -.TP -.I Personal flags -The persons flags are stored here. -.TP -.I First local number -This is the local number of the first created text that still exists -in the database. Its local to this list. -.TP -.I Created text list -This is an array of all created texts beginning at the first local -number. -.TP -.I Marked texts -This is an array of all marked texts and their mark type. Every -element in the array is a text number and a mark number. -.TP -.I Membership -Here is the information about which conferences the person is member -in. Its an array where every element is of the type -.B Membership -(See below). -.TP -.I Last login -Time of the last login. -.TP -.I User area -Number of the text being the persons user area. If there is no user -area this is 0. -.TP -.I Total time present -Time in -.B LysKOM -in seconds. -.TP -.I Sessions -Number of logins made for that person. -.TP -.I Created lines -.TP -.I Created bytes -.TP -.I Read texts -Count of read marked texts. -.TP -.I No of fetches -This is the information about how many texts this person has fetched. -Using caching clients this number could increase well beyond -.I Read -.IR texts . -.TP -.I Created persons -Count of created persons. -.TP -.I Created conferences -Count of created conferences. -.SS Text statuses -This contains info about the texts. -.TP 15 -.I Created time -Time this text was created. -.TP -.I Author -Person that wrote this text. -.TP -.I Start -Start pointer for the text in the -.I ramkomd-texts -file. -.TP -.I Number of lines -Length of the text in lines. -.TP -.I Number of chars -Length of the text in chars. -.TP -.I Number of marks -Count of existing marks on this text. -.TP -.I Header list -An array containing info about -.IR recipients , -.I comments -.IR to -pointers -etc. Every element is a -.IR Misc_info . -.SS Membership -The membership type tells us about conferences we are member of and -how much we have already read of it. It is saved in this way: -.TP -.I Last time read -Updated when we mark a text as read in this conference. -.TP -.I Conference number -The number telling what conf. -.TP -.I Priority -Used by the client to determine reading order. -.TP -.I Last text read -Local number of the last text we have read. This is used to keep track -of which texts we have not yet read and calculate how many unread we -have in this conference. -.TP -.I Read texts -An array containing the texts that we have read after the -.I Last text -.IR read . -This is necessary because its possible to read in any order. -.SH FILES -.TP 20 -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH "SEE ALSO" -.BR ramkomd (8), -.BR dbck (8) -.SH BUGS -This is really a joke. Its not a database, not optimal in any way. But -it works. -.PP -The -.I message of the day -text number is not saved anywhere. This makes the -server forget what text that is when restarting. -.SH NOTES -This will soon disapear and be replaced by something more bazaarly -inexplicable. diff --git a/doc/man/man5/ramkom.5 b/doc/man/man5/ramkom.5 deleted file mode 100644 index 566375697..000000000 --- a/doc/man/man5/ramkom.5 +++ /dev/null @@ -1,294 +0,0 @@ -.\" $Id: ramkom.5,v 1.3 1991/08/24 11:51:46 linus Exp $ -.\" $Date: 1991/08/24 11:51:46 $ -.TH ramkom 5 "August 24, 1991" -.SH NAME -ramkom - LysKOM -.I database -format -.SH SYNOPSIS -.B /usr/lyskom/db/ramkomd-* -.br -and -.br -.B /usr/lyskom/etc/pid -.PP -.B #include <lyskom/kom-types.h> -.SH DISCLAIMER -The -.I database -is not really a database but a sequential file where all data is saved -from the memory. -.SH DESCRIPTION -There are 2 files: One file with all the data -.RB ( ramkomd-data ). -And one with all texts -.RB ( ramkomd-texts ). -The texts file does not contain any information about where any text -starts of ends, all this is in the data file together with other infos -on the text. -.PP -If the first five chars of the data file is CLEAN then the -.I database -is considered clean. If its anything else the -.BR ramkomd (8) -program will try to find the backupfile instead. -.PP -Then there is a number telling the number of the next free conference -.RI ( next_free_num ). -.PP -Now follows a list of all conferences. One conference on each line. If -the conference is deleted the line consists of a -.B @ -otherwise it starts with a -.BR + . -.PP -Now follows a list of all person statuses. Here is also every person -on its own line and the deleted persons or the numbers that are not -persons but conferences are lines containing just a -.BR @ . -.PP -Both the conference status part and the person status part are exactly -.IR next_free_num -1 -lines long. -.PP -Now follows the number of the next text that is not used and a list of -text statuses. -Every text status has its own line just like the other statuses and -non-existent texts are represented by the -.BI @ . -.PP -The different statuses types are -.B conference -.BR statuses , -.B person statuses -and -.B text -.BR statuses . -These are in a struct in the include file but in this file they are -not saved as structs but every element is saved as a ascii string. -Strings are saved as holerith strings. The field of the struct is not -even saved in the same order as in the struct. -Their order in the database is followed below. -.PP -An array of things is represented in the database by a number telling -how many elements there are in the array and the either a -.B * -in the case no elements or a -.B { -followed by all the elements and a finishing -.BR } . -.SS Conference status -.LP -This contains all information for a conference. A conference is a -object that recieves texts. -.TP 15 -.I Name -Name of the conference saved as a holerith string. -.TP -.I Member list -An array of the members in that conference. -.TP -.I First local number -This is the local number of the first text in the conference. Its -saved here in order to save space in this file by not mentioning all -deleted texts in the beginning of the conference. -.TP -.I Texts -This is an array of recieved texts. The local number of the text is -determined by the position in this list and the value of the -.I first local -.IR number . -.TP -.I Type -This is the type of the conf, it contains the infomation that says if -the conference is read protected, original flagged conference, secret, -or if its a letter box. -.TP -.I Creation time -The time the conference was created. -.TP -.I Last written -The time the last text was sent to the conference. -.TP -.I Creator -The number of the person that has created the conference. This is 0 -for conferences that are created initially. -.TP -.I Presentation -This is the number of the text containing a presentation of the -conference. If there is no presentation this number is 0. -.TP -.I Supervisor -This is the number of the conference whose members are supervisors of -the conference. Initially this is set to be the number of the letter -box of the creator. -.TP -.I Permitted submitters -This is the number of the conference whose members are allowed to -submit texts to this conference. If this is 0 (the default) all -persons i -.B LysKOM -are allowed to submit. -.TP -.I Super conference -This is a number of a conference that comments to articles should be -sent to if this conference is original flagged. -.TP -.I Message of the day -This is the textnumber of the text containing a notice message about -the conference. Mostly used for letter boxes. If 0 then there is no -such message. -.TP -.I Garb nice -This is the number of days a text stays in the conference before it is -removed by the expiration routines. Its really the expiration rate. -.SS Person statuses -.LP -Person statuses contains all info about persons. -.TP 15 -.I Password -The password is stored as a string. The length of the string is 64 but -the length of the password itself is stored as the first char in the -string. Passwords longer that 63 chars are truncated. -.TP -.I Username -This is the username and machine from the last time the person logged in. -.TP -.I Privileges -The persons privileges are stored here. This is a bit array, length is -16 bits. It is not really welldetemined what bit does what. -.TP -.I Personal flags -The persons flags are stored here. -.TP -.I First local number -This is the local number of the first created text that still exists -in the database. Its local to this list. -.TP -.I Created text list -This is an array of all created texts beginning at the first local -number. -.TP -.I Marked texts -This is an array of all marked texts and their mark type. Every -element in the array is a text number and a mark number. -.TP -.I Membership -Here is the information about which conferences the person is member -in. Its an array where every element is of the type -.B Membership -(See below). -.TP -.I Last login -Time of the last login. -.TP -.I User area -Number of the text being the persons user area. If there is no user -area this is 0. -.TP -.I Total time present -Time in -.B LysKOM -in seconds. -.TP -.I Sessions -Number of logins made for that person. -.TP -.I Created lines -.TP -.I Created bytes -.TP -.I Read texts -Count of read marked texts. -.TP -.I No of fetches -This is the information about how many texts this person has fetched. -Using caching clients this number could increase well beyond -.I Read -.IR texts . -.TP -.I Created persons -Count of created persons. -.TP -.I Created conferences -Count of created conferences. -.SS Text statuses -This contains info about the texts. -.TP 15 -.I Created time -Time this text was created. -.TP -.I Author -Person that wrote this text. -.TP -.I Start -Start pointer for the text in the -.I ramkomd-texts -file. -.TP -.I Number of lines -Length of the text in lines. -.TP -.I Number of chars -Length of the text in chars. -.TP -.I Number of marks -Count of existing marks on this text. -.TP -.I Header list -An array containing info about -.IR recipients , -.I comments -.IR to -pointers -etc. Every element is a -.IR Misc_info . -.SS Membership -The membership type tells us about conferences we are member of and -how much we have already read of it. It is saved in this way: -.TP -.I Last time read -Updated when we mark a text as read in this conference. -.TP -.I Conference number -The number telling what conf. -.TP -.I Priority -Used by the client to determine reading order. -.TP -.I Last text read -Local number of the last text we have read. This is used to keep track -of which texts we have not yet read and calculate how many unread we -have in this conference. -.TP -.I Read texts -An array containing the texts that we have read after the -.I Last text -.IR read . -This is necessary because its possible to read in any order. -.SH FILES -.TP 20 -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH "SEE ALSO" -.BR ramkomd (8), -.BR dbck (8) -.SH BUGS -This is really a joke. Its not a database, not optimal in any way. But -it works. -.PP -The -.I message of the day -text number is not saved anywhere. This makes the -server forget what text that is when restarting. -.SH NOTES -This will soon disapear and be replaced by something more bazaarly -inexplicable. diff --git a/doc/man/man8/dbck.8 b/doc/man/man8/dbck.8 deleted file mode 100644 index 66f32624a..000000000 --- a/doc/man/man8/dbck.8 +++ /dev/null @@ -1,105 +0,0 @@ -.\" $Id: dbck.8,v 1.5 1991/08/22 23:57:52 linus Exp $ -.\" $Date: 1991/08/22 23:57:52 $ -.TH dbck 8 "August 22, 1991" -.SH NAME -dbck - reports and corrects errors in the LysKOM database. This -program is also used remove unreferenced texts from the texts file. -.SH SYNOPSIS -.B /usr/lyskom/bin/dbck -[ -.B -D -.I database-directory -] [ -.B -irvg -] -.SH DESCRIPTION -This program should be run after something has happened that has made the -database corrupted. -.PP -It fixes the database, checking all references. -.PP -With argument -.B -g -the file with texts are rewritten without all unreferenced texts and -all pointers are adjusted. This does only happen if the database was -correct. -.PP -If none of the options -.B -r, -i -or -.B -g -are given the database is not changed. -.SH OPTIONS -.TP -.BI \-D " database-directory" -Use the database in the -.I database-directory -as the target of the checkup. -.br -Example: If your database is in -.ft B -$HOME/lyskom/db -.ft R -you should use the command -.ft B -.br -/usr/lyskom/bin/dbck -D $HOME/lyskom -.ft R -.TP -.B \-i -Run interactively asking the user questions. -.TP -.B \-r -Repair simple errors without asking. -.TP -.B \-v -Verbose mode. Report not only errors but other statuses of the -database. -.TP -.B \-g -Do the garbage collect of the texts part of the database. This is -sometimes called a compression of the text but it only removes -non-referenced texts. -.SH NOTES -The messages -.I Conference <confno> has a bad Text-list. Starts with 0 -and -.I Person <persno> has created <number> conferences, not <number> -.RI ( as -.I said in -.IR person-stat ). -are normal. If you get them when you specify -.B -g, -let -.B dbck -fix them and run -.B dbck -g -again. -.SH FILES -.TP 20 -.B /usr/lyskom -Default database directory. -.TP -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /db/ramkomd-backup -Backup file of -.B ramkomd-data. -.SH BUGS -Does not lock the database. -.PP -Does never check if the database is locked. -.PP -Should have an unlock database option. -.PP -Does not check that -.B ramkomd-data -and -.B ramkomd-texts -are consistent. -.SH AUTHOR -Per Cederqvist <ceder@lysator.liu.se> diff --git a/doc/man/man8/lyskomd.8 b/doc/man/man8/lyskomd.8 deleted file mode 100644 index b768dbf82..000000000 --- a/doc/man/man8/lyskomd.8 +++ /dev/null @@ -1,95 +0,0 @@ -.\" $Id: lyskomd.8,v 1.3 1991/08/22 23:41:12 linus Exp $ -.\" $Date: 1991/08/22 23:41:12 $ -.TH ramkomd 8 "August 22, 1991" -.SH NAME -ramkomd - LysKOM server -.SH SYNOPSIS -.B /usr/lyskom/bin/ramkomd -[ -.B -d -] [ -.B -q -] [ -.BI -D database-directory -] [ -.BI -p clientportnumber -] [ -.BI -P muxportnumber -] [ -.B -a -] -.SH DESCRIPTION -This program runs a LysKOM server. -.PP -It listens for connections on the given portnumbers (defaults are 4894 -for the -.I clientportnumber -and 4787 for the -.IR muxportnumber ). -.SH OPTIONS -.TP -.B \-d -Adds one to the debug-level i.e. increases the amount of output on the -stderr from the process. - -Using one -.B \-d -make the process print a -.I > -for every timeout, a message for every person that is connecting or -disconnecting and a message for every succesful or unsuccessful -communication to the process. -.TP -.B \-q -Never save the database. -.TP -.BI \-D database-directory -Use the database in the -.I database-directory. -.br -Example: If your database is in -.B $HOME/lyskom/db -you should use the option -.B \-D$HOME/lyskom -.TP -.BI \-p clientportnumber -listens for clients on the port number -.I clientportnumber. -.TP -.BI \-P muxportnumber -listens for mux connections on the port number -.I muxportnumber. -A mux connection is a connection using a special protocoll to allow -several sessions within one connection. -.TP -.B \-a -Do not send any non-requested messages. This disables the sending of -messages about events in the server to all connections. -.SH FILES -.TP 20 -.B /usr/lyskom -Default database directory. -.TP -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH BUGS -Small memory leak. -.PP -There is no practical handling of security. -.PP -The choice of asynchronously issued messages is not very good. -.PP -The so called "data base" is a joke. -.SH AUTHOR -Per Cederqvist <ceder@lysator.liu.se> -.SH NOTE -Version 2.0 on its way. diff --git a/doc/man/man8/ramkomd.8 b/doc/man/man8/ramkomd.8 deleted file mode 100644 index 35143d519..000000000 --- a/doc/man/man8/ramkomd.8 +++ /dev/null @@ -1,95 +0,0 @@ -.\" $Id: ramkomd.8,v 1.3 1991/08/22 23:41:12 linus Exp $ -.\" $Date: 1991/08/22 23:41:12 $ -.TH ramkomd 8 "August 22, 1991" -.SH NAME -ramkomd - LysKOM server -.SH SYNOPSIS -.B /usr/lyskom/bin/ramkomd -[ -.B -d -] [ -.B -q -] [ -.BI -D database-directory -] [ -.BI -p clientportnumber -] [ -.BI -P muxportnumber -] [ -.B -a -] -.SH DESCRIPTION -This program runs a LysKOM server. -.PP -It listens for connections on the given portnumbers (defaults are 4894 -for the -.I clientportnumber -and 4787 for the -.IR muxportnumber ). -.SH OPTIONS -.TP -.B \-d -Adds one to the debug-level i.e. increases the amount of output on the -stderr from the process. - -Using one -.B \-d -make the process print a -.I > -for every timeout, a message for every person that is connecting or -disconnecting and a message for every succesful or unsuccessful -communication to the process. -.TP -.B \-q -Never save the database. -.TP -.BI \-D database-directory -Use the database in the -.I database-directory. -.br -Example: If your database is in -.B $HOME/lyskom/db -you should use the option -.B \-D$HOME/lyskom -.TP -.BI \-p clientportnumber -listens for clients on the port number -.I clientportnumber. -.TP -.BI \-P muxportnumber -listens for mux connections on the port number -.I muxportnumber. -A mux connection is a connection using a special protocoll to allow -several sessions within one connection. -.TP -.B \-a -Do not send any non-requested messages. This disables the sending of -messages about events in the server to all connections. -.SH FILES -.TP 20 -.B /usr/lyskom -Default database directory. -.TP -.IB database-directory /db/ramkomd-data -File with all the elements and pointers. -.TP -.IB database-directory /db/ramkomd-texts -File with the texts. -.TP -.IB database-directory /etc/pid -File with the pid of the lyskom-process. -.TP -.IB database-directory /db/ramkomd-backup -Backup file with all data. -.SH BUGS -Small memory leak. -.PP -There is no practical handling of security. -.PP -The choice of asynchronously issued messages is not very good. -.PP -The so called "data base" is a joke. -.SH AUTHOR -Per Cederqvist <ceder@lysator.liu.se> -.SH NOTE -Version 2.0 on its way. diff --git a/doc/man/man8/updateLysKOM.8 b/doc/man/man8/updateLysKOM.8 deleted file mode 100644 index 95092bcbf..000000000 --- a/doc/man/man8/updateLysKOM.8 +++ /dev/null @@ -1,13 +0,0 @@ -.\" $Id: updateLysKOM.8,v 1.1 1991/08/22 19:03:12 linus Exp $ -.\" $Date: 1991/08/22 19:03:12 $ -.TH updateLysKOM 8 "August 22, 1991" -.SH NAME -updateLysKOM - tells the server to save the internal statistics -.SH SYNOPSIS -.B /usr/lyskom/bin/updateLysKOM -.SH DESCRIPTION -This program sends a USR1 signal to the LysKOM server. If the sending -of a signal fails it restarts the server. -.SH INSTALLATION -Make sure the source file contains the correct file to start, find the -pid in and the correct logfiles. diff --git a/doc/man/updateLysKOM.8 b/doc/man/updateLysKOM.8 deleted file mode 100644 index 95092bcbf..000000000 --- a/doc/man/updateLysKOM.8 +++ /dev/null @@ -1,13 +0,0 @@ -.\" $Id: updateLysKOM.8,v 1.1 1991/08/22 19:03:12 linus Exp $ -.\" $Date: 1991/08/22 19:03:12 $ -.TH updateLysKOM 8 "August 22, 1991" -.SH NAME -updateLysKOM - tells the server to save the internal statistics -.SH SYNOPSIS -.B /usr/lyskom/bin/updateLysKOM -.SH DESCRIPTION -This program sends a USR1 signal to the LysKOM server. If the sending -of a signal fails it restarts the server. -.SH INSTALLATION -Make sure the source file contains the correct file to start, find the -pid in and the correct logfiles. diff --git a/doc/misc_items b/doc/misc_items deleted file mode 100644 index 9bfdc5bd5..000000000 --- a/doc/misc_items +++ /dev/null @@ -1,43 +0,0 @@ -File created by ceder. - -Medlemmarna i enumen Info_type {r av tv} olika typer. - -1) recpt, cc_recpt, comm_to, comm_in, footn_to, footn_in - - Dessa sex {r de grundl{ggande typerna. - -2) loc_no, rec_time, sent_by, sent_at - - Dessa inneh}ller extra information om en viss Info_type ur grupp 1. - Servern sk|ter sj{lv om att de skapas och tas bort p} r{tt s{tt. - -Nedanst}ende tabell visar exakt hur de olika Misc_items kan finnas. - -Mottagare: - recpt Obligatorisk - loc_no Obligatorisk - rec_time Fylls i n{r mottagaren l{ser brevet. - sent_by Om s{nt i efterhand av n}gon annan {n f|rfattaren. - sent_at Om s{nt i efterhand. - -CC_Mottagare: (f}r ej kommentarer till detta inl{gg) - cc_recpt Obligatorisk - loc_no Obligatorisk - rec_time Fylls i n{r mottagaren l{ser brevet. - sent_by Om s{nt i efterhand av n}gon annan {n f|rfattaren. - sent_at Om s{nt i efterhand. - -Kommentar till: - comm_to Obligatorisk - sent_by Om s{nt i efterhand av n}gon annan {n f|rfattaren. - sent_at Om s{nt i efterhand. - -Fotnot till: - foot_to Obligatorisk - sent_at Om s{nt i efterhand. - -Kommenteras i: - comm_in Obligatorisk - -Fotnot i: - foot_in Obligatorisk \ No newline at end of file diff --git a/doc/mux.proto b/doc/mux.proto deleted file mode 100644 index 49e204a33..000000000 --- a/doc/mux.proto +++ /dev/null @@ -1,29 +0,0 @@ -Detta {r dokumentation av det simpla MUX-protokoll som implementerades -15-16 mars 1991. - -MUX -> Server - -0 Ping (servern svarar "Pong") -1 <id> Klient <id> kopplar upp sig. -2 <id> Klient <id> kopplar ner. -3 <id> <msg> Klient <id> skickar str{ngen <msg> - -Server -> MUX - -0 Pong (svar p} "Ping") -2 <id> Logga ut klient <id>. -3 <id> <msg> Servern skickar str{ngen <msg> till klient <id>. -4 Error. (Protokollfel. Ska aldrig intr{ffa). -5 Shutdown. Servern tycker att MUX:en ska d|. - - -<id> {r ett heltal som v{ljs av MUX:en. Tv} olika uppkopplingar f}r -inte ha samma <id>. <id> kan }teranv{ndas. - -<msg> {r en Hollerithstr{ng. - - -Local Variables: -mode:indented-swedish -eval:(auto-fill-mode 1) -End: diff --git a/doc/prot-A.bnf b/doc/prot-A.bnf deleted file mode 100644 index 7f025bca7..000000000 --- a/doc/prot-A.bnf +++ /dev/null @@ -1,1067 +0,0 @@ - - LysKOM-Projektet - -------------------------------- - Specifikation av protokoll A mellan klient och server - -------------------------------- - av Lars Aronsson - <Aronsson@Lysator.LiU.SE> - 25 juni 1991 - - - - LysKOM - -LysKOM {r ett datakonferenssystem. Andra liknande system {r QZ-KOM och -PortaCOM. LysKOM {r Copyright (C) 1990 datorf|reningen Lysator vid -Universitetet och Tekniska H|gskolan i Link|ping. Var och en till}ts -fritt kopiera, {ndra och distribuera LysKOM dokument och program, -givet att mottagarna ges samma r{ttigheter. Varken Lysator eller dess -medlemmar tar n}got som helst ansvar f|r dokumentens eller programmens -riktighet eller f|ljderna av deras anv{ndande. - - - Den h{r texten - -Den h{r texten specificerar version A av det protokoll som anv{nds -mellan en klient (anv{ndarens program) och en server (databasen). Den -h{r texten {r t{nkt att inneh}lla allt du beh|ver veta f|r att skriva -en klient utan att veta n}got om servern, eller tv{rtom. - -Mitt syfte {r att den h{r texten skall vara s} fullst{ndig och korrekt -som m|jligt. Om du hittar n}gra fel, eller kommer p} n}got som saknas, -s} h|r g{rna av dig till mig. F|ljande {r de saker som jag vet saknas -i den h{r texten: - - Vad som lagras i en anv{ndares "user-area", och hur. - - - Filer - -Den h{r filen {r en mer systematisk sammanst{llning av nedan -uppr{knade filer. Det {r m|jligt att filerna har {ndrat namn, antal -och utseende n{r du l{ser detta. S} h{r hette de den 3 juni 1991: - - 2kom/doc/com-spec -- borta! - 2kom/doc/security-levels.txt - 2kom/include/kom-types.h - 2kom/include/kom-errno.h - 2kom/isc-client/com.h - 2kom/server/fncdef.txt -- borta? - 2kom/include/services.h - - - Underliggande protokoll - -LysKOM Protokoll A kan k|ras ovanp} vilken tillf|rlitlig dubbelriktad -8-bitars bytekanal som helst. I n|dfall kan det ocks} k|ras p} en -7-bitars bytekanal. Idag k|rs det ovanp} Telnet/TCP/IP. P} Lysator -anv{nds telnetport 4894 p} IP-host 130.236.254.12 (laila). Data i -protokoll A sker i ASCII klartext. I hollerithstr{ngar (se nedan) f}r -godtyckliga 8-bitars bytes f|rekomma, men tanken {r att man skall -kunna k|ra protokollet "r}tt" fr}n en textterminal. - - - Abstrakt syntaxnotation - -I den h{r specifikationen har en BNF-liknande grammatik anv{nts f|r -att beskriva protokollets dataelement. Det {r mycket vetenskapligt, -f|r s} g|r de som specar OSI-protokoll. Den h{r grammatiken borde -likna ASN.1 mer {n den g|r, men jag har inte ASN.1-specen h{r. -Dataf{lt har givits namn med liten begynnelsebokstav, datatyper med -stor. Operatorn "::=" definierar (som i BNF) och ":" ger typ (som i -Pascal). Kommentarer inleds med "!" och avslutas med radslut (som i -BLISS). Semikolon anv{nds som i C. De grundl{ggande typerna och deras -notation beskrivs h{rn{st. - - - Grundl{ggande datatyper - -Dataelementen som skickas med protokollet }tskiljs av (godtyckliga -sekvenser av) mellanslag, tab-tecken, line-feed, return, eller NULL. -Undvik att skicka NULL, men var beredd p} att tolka det som ett -mellanslag. - -INTEGER {r icke-negativa heltal som skall rymmas p} 32 bitar. De -skickas som text p} decimal form. - -HOLLERITH {r textstr{ngar. F|rst skickas str{ngens l{ngd som en -INTEGER, sedan bokstaven "H" och d{refter (utan }tskiljande -mellanslag!) texten. Texten f}r inneh}lla vilka byte-v{rden som helst -fr}n 0 till 255. - -BITSTRING skickas som text representerande ett heltal p} bin{r form. -Antal bitar i str{ngen framg}r alltid av sammanhanget. [ven inledande -nollor m}ste skickas. Siffran "1" representerar sant v{rde och "0" -falskt. Bitarna skickas i den ordning de st}r listade i den abstrakta -syntaxen. - - shape-of-world : BITSTRING ( - is-flat; is-round; is-3d; is-2d; ! e.g. "0110" - ) - -ARRAY {r en lista med ett visst antal element. Elementens typ noteras -omedelbart efter ordet ARRAY. F|rst skickas en INTEGER som ger antalet -element, sedan skickas tecknet "{", d{refter alla elementen i f|ljd -och slutligen tecknet "}". Tecknen "{" och "}" fyller egentligen ingen -funktion, men underl{ttar n{r man k|r protokollet "r}tt". Exempel: - - hackers : ARRAY HOLLERITH; - ! e.g. 4 { 8Haronsson 7Hbellman 4Hinge 5Hceder } - -SELECTION {r en INTEGER med efterf|ljande svans. Vilken typ svansen -har beror p} v{rdet av heltalet. F|r vissa v{rden kan svansen vara -tom. V{rdet anges i den abstrakta syntaxen med "nummer=namn". -Exempel: - - phrase : SELECTION ( - 1=hello name:HOLLERITH; ! e.g. "1 4HJohn" - 2=howdy ; ! e.g. "2" - ) - -RPC {r en mycket speciell notation som anv{nds f|r protokoll med -remote procedure calls, dvs fr}gor och svar. Notationen f|r RPC ser ut -som SELECTION, men varje alternativ har tv} svansar: fr}gan och -svaret. Selectornumret skickas bara tillsammans med fr}gan. Exempel: - - phrases : RPC ( - 1=cost inventory:INTEGER; price:INTEGER; - 2=time timezone:INTEGER; hours:INTEGER; - 3=name ; name:HOLLERITH; - ) - ! e.g. "1 23"->"498" "3"->"4HLars" "2 1"->"1430" - -Datastrukturen struct/record markeras i den abstrakta syntaxen bara -med omgivande "(" och ")". Detta inneb{r inte att n}gra extra tecken -skickas i protokollet. - - - Dialog - -En session b|rjar alltid med en uppkoppling, d{r klienten v{ljer -protokoll genom att skicka en - - uppkopplingsbeg{ran : ( "A"; loginnamn : HOLLERITH; ) - -vilken besvaras fr}n servern av en - - uppkopplingsbekr{ftelse : "LysKOM\n" - -D{refter har vi finns bara RPC-protokollet commands. Klienten f}r -skicka flera fr}gor innan den f}tt svar p} det f|rsta. F|r att h}lla -reda p} till vilket anrop ett visst svar h|r, v{ljer klienten ett -referensnummer att medf|lja och samma nummer }terfinns i svaret. Det -{r klientens sak att fritt v{lja och h}lla reda p} referensnumren. - - fr}ga : ( - ref-no : INTEGER; - commands-call; - ) - -som, om allt g}r som det skall, besvaras fr}n servern med - - ok-return : ( - "="; - ref-no : INTEGER; - commands-return; - ) - -eller, om n}got misslyckades, med - - error-return : ( - "%"; - ref-no : INTEGER; - error-no : Error-No; - error-status : INTEGER; - ) - -Det skall inte vara n}got tomrum mellan "=" respektive "%" och ref-no. -Observera att {ven f|r de funktioner d{r f-return {r inneh}llsl|st -svarar servern med "=" eller "%" och ref-number. - - - S{kerhetsniv}er och privilegiebittar - -S{kerhet och privilegier byggs i LysKOM med tv} komponenter: Varje -person har sig ett antal bittar tilldelad (man kan s{ga att personen -tillh|r ett antal grupper) och varje session har dessutom en -s{kerhetsniv} (ett tal). Varje r{ttighet kr{ver en viss bitt och en -viss minsta niv}. De senast aktuella kombinationerna -bitt-niv}-r{ttighet beskrivs i filen 2kom/doc/security-levels.txt, h{r -ges en vackrare tabell: - - Bitt Niv} R{ttighet - ------------------------------------------------------ - wheel Normalt ej tilldelad - 0 Alltid logga in, {ven vid "crowded" - 6 S{tta alla Priv_bits f|r alla personer - 7 S{tta password f|r alla personer - 8 Vara organisat|r (supervisor) f|r allt - 10 Kan l{sa alla texter - ------------------------------------------------------ - admin Normalt ej tilldelad - 1 St{nga av servern - 1 S{tta motd_of_kom - 1 L{sa last_login - 2 L{sa status f|r hemliga m|ten och - personer - 2 L{sa de skyddade delarna av statusen - 2 L{sa hela text_statusen, - {ven vid hemliga mottagare - 3 Byta namn p} alla - 4 Addera/subtrahera medlemmar - 4 Addera/subtrahera mottagare till texter - 5 S{tta superm|te - 5 Radera texter - 6 S{tta administrat|r - ------------------------------------------------------ - statistic Normalt ej tilldelad - 2 L{sa statistikdelarna av Person-structen, - {ven om de {r skyddade. - ------------------------------------------------------ - create_conf Normalt tilldelad - 0 Skapa m|ten - ------------------------------------------------------ - create_pers Normalt tilldelad - 0 Skapa personer - ------------------------------------------------------ - -Enligt Thomas Bellmans erfarenheter anv{nder en administrat|r i -praktiskt arbete bara niv}erna 0 och 255. I st{llet f|r -s{kerhetsniv}er borde de enskilda privilegiebittarna sl}s p} och av -individuellt. Detta kanske l|ses elegantare i kommande versioner av -protokollet. - - - Felkoder - -De felkoder som f|rekommer som svar p} RPC-anrop {r nedanst}ende. H{r -{r de f|rklarade i nummerordning. Det finns en kort lista i alfabetisk -ordning strax efter}t. - - Error-No : SELECTION ( - 0=no-error; ! No error has occured - 2=not-impl; ! Not implemented yet - 3=obsolete; ! No longer implemented - 4=pwd; ! Wrong or illegal password - 5=long-str; ! String too long - 6=login; ! Not logged in. - 7=login-disallowed; ! System is in 'singel-user mode' - 8=conf-zero; ! Attempt to use conference number 0. - 9=undef-conf; ! Undefined or secret conference - 10=undef-pers; ! Undefined or secret person - 11=access; ! No 'read/write permission' - 12=perm; ! No permission - 13=not-member; ! Not member in conf - 14=no-such-text; ! No such global text-no, or no access - 15=text-zero; ! Can't use text no 0 - 16=no-such-local-text;! No such local text-no - 17=local-text-zero; ! Can't use local text no 0 - 18=bad-name; ! Too short or too long - ! or contains illegal chars - 19=index-out-of-range; - 20=conf-exists; ! Already exists - 21=pers-exists; ! Already exists - 22=secret-public; ! Cannot be secret and !rd-prot - 23=letter-box; ! Cannot change letter-box flag - 24=ldb-err; ! Should never happen, - ! unless Willf|r makes a mistake. - 25=ill-misc; ! Illegal misc field. - ! err-stat holds field no - 26=illegal-info-type; ! Info-type parameter was illegal. - ! This means that there is a - ! bug in the client. - 27=already-recipient; ! Already recipient to this text. - 28=already-comment; ! Already comment to this text. - 29=already-footnote; ! Already footnote to this text. - 30=not-recipient; ! Not recipient - 31=not-comment; ! Not comment to this text. - 32=not-footnote; ! Not footnote to this text. - 33=recipient-limit; ! Too many recipients - 34=comm-limit; ! Too many comments - 35=foot-limit; ! Too many footnotes - 36=mark-limit; ! Too many marks. - 37=not-author; ! Only the author may add footnotes or - ! delete texts. - 38=no-connect; ! Can't connect to specified server - 39=out-of-memory; ! Couldn't get memory for result - 40=server-is-crazy; ! Client can't understand server - 41=client-is-crazy; ! Client thinks that server says it - ! can't understand client. - 42=undef-session; ! This session doesn't exist - ) - - - Nummer Felmeddelande Nummer Felmeddelande - ------------------------------------------------------ - 11 access 28 already-comment - 29 already-footnote 27 already-recipient - 18 bad-name 41 client-is-crazy - 34 comm-limit 20 conf-exists - 8 conf-zero 35 foot-limit - 25 ill-misc 26 illegal-info-type - 19 index-out-of-range 24 ldb-err - 23 letter-box 17 local-text-zero - 6 login 7 login-disallowed - 5 long-str 36 mark-limit - 38 no-connect 0 no-error - 16 no-such-local-text 14 no-such-text - 37 not-author 31 not-comment - 32 not-footnote 2 not-impl - 13 not-member 30 not-recipient - 3 obsolete 39 out-of-memory - 12 perm 21 pers-exists - 4 pwd 33 recipient-limit - 22 secret-public 40 server-is-crazy - 15 text-zero 9 undef-conf - 10 undef-pers 42 undef-session - ------------------------------------------------------ - - - Asynkrona anrop - -N{r som helst kan servern skicka ut ett asynkront anrop. En klient -beh|ver inte bry sig om dem. Det g}r bra att l{sa undan dem n{r ett -svar skall l{sas. Asynkrona meddelanden b|rjar alltid med ":" och ett -heltal som talar om hur m}nga parametrar som kommer. D{refter kommer -en selector och parametrarna. Precis som f|r ok- och error-return {r -d{r inget tomrum mellan ":" och f|rsta heltalet. I f|rklaringen nedan -listas de asynkrona anropen i nummerordning, men en alfabetiskt -sorterad lista f|ljer strax d{rp}. - - -asynk-meddelande ::= ( - ":"; - antal-params:INTEGER; - meddelande : SELECTION ( - 0=new-text ( text-no : Text-No; - text-stat : Text-stat ) - ! En ny text har skapats. - - 1=logout person : Pers-No; - ! G}r {ven under namnet "i-am-off" (i C-koden). - ! K{llkoden f|r Elispklienten g|r g{llande att - ! asynkrona anropet nummer 1 {r taget ur bruk. - ! Det {r ersatt av anrop 13 som anger sessionsnummer. - - 2=who-info ( person : Pers-No; - conference : Conf-No; - what-am-i-doing : HOLLERITH; ) - ! K{llkoden f|r Elispklienten g|r g{llande att - ! asynkrona anropet nummer 2 heter login, men att - ! det hur som helst {r taget ur bruk och ersatt av - ! asynkrona anropet nummer 9. - - 3=conf-deleted ! Anv ej av Elispklienten - ??? - 4=conf-created ! Anv ej av Elispklienten - ??? - 5=conf-changed-name - ( conf-no : Conf-No; - old-name : HOLLERITH; - new-name : HOLLERITH; ) - ! G}r {ven under namnet "new-name" (i C-koden). - - 6=i-am-on info : Who-Info; - 7=database-is-syncing - ; - 8=forced-leave-conf ! Anv ej av Elispklienten - ??? - 9=login ( pers-no : Pers-No; - session-no : Session-No; ) - - 10=broadcast-message - ( sender : Pers-No; - message : HOLLERITH; ) - ! Det vore estetiskt f|rdelaktigt om servern aldrig skickade - ! asynkrona anropet nummer 10 utan h|ll sig till nummer 12. - - 11=crowded ; - ! Asynkrona anropet nummer 11 betyder att n}gon har - ! misslyckats logga in, eftersom servern inte har fler - ! lediga f|rbindelser. Den ansvarsk{nnande anv{ndaren - ! kan nu v{lja att logga ut f|r att bereda plats. - - 12=directed-message - ( recipient : Pers-No; - sender : Pers-No; - message : HOLLERITH; ) - ! Om argumentet recipient {r noll (0) i asynkrona anropet - ! nummer 12, s} {r meddelandet riktat till alla inloggade. - ! Det {r {nnu inte m|jligt att rikta ett meddelande till - ! en viss session. - - 13=new-logout - ( pers-no : Pers-No; - session-no : Session-No; ) - ) -) - -En asterisk (*) efter numret i tabellen nedan anger att det asynkrona -anropet ersatts av n}got annat. Se ovan under respektive anrop f|r -n{rmare beskrivning. - - Nr Asynkront anrop Nr Asynkront anrop - ------------------------------------------------------ - 10 broadcast-message 5 conf-changed-name - 4 conf-created 3 conf-deleted - 11 crowded 7 database-is-syncing - 12 directed-message 8 forced-leave-conf - 6 i-am-on 9 login - 1* logout 13 new-logout - 0 new-text 2* who-info - ------------------------------------------------------ - - - RPC-anrop - -Klienten skickar RPC-anrop med parametrar till servern. Servern svarar -endera med ett felmeddelande (se ovan i avsnitten Dialog och Felkoder) -eller med ett returv{rde. Nedan ges BNF-grammatiken f|r de datatyper -som anv{nds i parametrar och returv{rden. RPC-anropen listas i -alfabetisk ordning, men en numeriskt sorterad lista f|ljer strax -efter}t. - - -commands : RPC ( - ! Anropsnummer och -namn - ! Datayp f|r anropsparameter - ! Datatyp f|r returv{rde - - 32=add-comment - params : ( comment : Text-No; - comment-to : Text-No; ) - ; - - - 37=add-footnote - params : ( footnote : Text-No; - footnote-to : Text-No; ) - ; - - 14=add-member - params : ( conf-no : Conf-No; - pers-no : Pers-No; - priority : INTEGER; - where : INTEGER; ) - ; - ! Addera angiven person som medlem i angivet m|te - ! Priority {r prioriteten p} l{slistan - ! Where {r placering p} listan, 0 (noll) eller st|rre - ! RPC-anropet nummer 14 anv{nds {ven senare f|r att {ndra - ! prioritet och plats p} listan. - - 30=add-recipient - ! The sequence "conf-no, type" is a reversed Misc-Info. - ! Type is recpt or cc_recpt. - add-recipient-params : ( text-no : Text-No; - conf-no : Conf-No; - type : INTEGER; ) - ; - - 45=broadcast - message : HOLLERITH; - ; - ! Ett privilegierat anrop. - ! Samma effekt kan n}s genom magisk parameter till anrop 53. - ! En gammal felaktig kommentar g|r g{llande att parametern - ! skulle vara ett text-no, men s} {r inte fallet. - - 3=change-name - change-name-params : ( conf-no : Conf-No; - new-name : HOLLERITH; ) - ; - ! Anropet nummer 3 byter namn p} angivet m|te eller person. - - 4=change-what-i-am-doing - what-am-i-doing : HOLLERITH; - ; - ! Den medskickade texten kommer att visas i vilka-listan, - ! se {ven anropet nummer 51. - - 10=create-conf - params : ( name : HOLLERITH; - type : Conf-Type; ) - result : Conf-No; - - 5=create-person - create-person-params : ( name : HOLLERITH; - passwd : HOLLERITH; ) - Pers-No; - ! En ny person skapas med angivet namn och l|senord. - ! Den skapade personens personnummer returneras. - - 28=create-text - ! create-text-return returns text number zero on error - ! NB! Only Misc-Infos 0,1,2,4 can be sent here. - params : ( text : HOLLERITH; - misc-info : ARRAY Misc-Info ) - result : Text-No; - - 11=delete-conf - conf : Conf-No; - ; - ! Utpl}na ett m|te eller en person. - - 29=delete-text - Text-No; - ; - - 55=disconnect - session-no : Session-No; - ; - ! Disconnect a session. You can disconnect your own session - ! (even if you are not logged in) and any session where you - ! are supervisor of the user that is logged in on that - ! session. - - 42=enable - ena-level : INTEGER; - ; - ! This is a privileged call. - ! Set ena-level. Zero means don't use any privileges. - - 50=get-conf-stat - conf-no : Conf-No; - result : Conference; - ! Returnera m|tesstatus f|r angivet m|te - - 13=get-conf-stat-old - params : ( conf-no : Conf-No; - mask : INTEGER; ) - result : Conference - ! Eftersom den mask som ing}r i params f|ga beaktas, - ! har anropet nummer 13 ersatts av anropet 50. - ! M|tesstatusen f|r det angivna m|tet returneras. - ! Om masken {r ett j{mnt tal, s} skickas ett tomt f{lt (0H) - ! name i svaret. Fr}n b|rjan var det t{nkt: - ! mask = name + members + texts + list-sizes -- just use 255 - - 47=get-created-texts - params : ( person : Pers-No; - first : Local-Text-No; - no-of-texts : INTEGER; ) - created-texts : Text-List; - ! NB! first is a text number local to the person who wrote it. - ! It is not a Local-Text-No in his mailbox. - - 34=get-map - params : ( conf-no : Conf-No; - first-local-no : Local-Text-No; - no-of-texts : INTEGER; ) - result : Text-List; - - 23=get-marks - ; - Mark-List; - - 48=get-members - params : ( conf : Conf-No; - first : INTEGER; - no-of-members : INTEGER; ) - members : Member-List; - ! first should perhaps be Local-Conf-No... - - 46=get-membership - params : ( person : Pers-No; - first : INTEGER; - no-of-confs : INTEGER; - mask : BITSTRING (want-read-texts); ) - memberships : Membership-List; - ! first should perhaps be Local-Conf-No... - - 49=get-person-stat - person : Pers-No; - result : Person; - ! Personstatusen f|r den angivna personen returneras. - - 6=get-person-stat-old - params : ( person : Pers-No; - mask : INTEGER; ) - result : Person; - ! Eftersom den mask som ing}r i params f|ga beaktas, - ! har anropet nummer 6 ersatts av anropet 49. - ! Personstatusen f|r den angivna personen returneras. - ! Om masken {r ett j{mnt tal, s} skickas ett tomt f{lt (0H) - ! username i svaret. - - 36=get-server-info - ; - result : Info; - ! Return various information about the server. - ! Anrop 36 hette tidigare get-info med samma semantik. - - 54=get-session-info - session-no : Session-No; - result : Session-Info; - - 25=get-text - params : ( text : Text-No; - start-char : INTEGER; - end-char : INTEGER; ) - result : HOLLERITH; - - 26=get-text-stat - params : Text-No; - result : Text-Stat; - - 35=get-time - ; - Time; - - 52=get-unread-confs - pers-no : Pers-No; - conf-no-list : ARRAY Conf-No; - - 0=login - login-params : ( person : Pers-No; - passwd : HOLLERITH; ) - ; - - 1=logout - ; - ; - ! Anropet nummer 1 misslyckas aldrig. - - 12=lookup-name - name : HOLLERITH; - result : Conf-List-Old; - ! Expandera ett f|rkortat namn och returnera en lista - ! med nummer p} de m|ten och personer som det kan vara. - ! Se kommentaren vid definitionen av Conf-List. - - 27=mark-as-read - params : ( conference : Conf-No; - texts : ARRAY Local-Text-No; ) - ; - - 24=mark-text - params : ( text : Text-No; - mark-type : INTEGER; ) - ! mark-type = permanently-marked -- just use 255 (?) - ! The server only stores (does not act upon) this value. - ; - - 2=pepsi - Conf-No; - ; - ! Anropet nummer 2 anv{nds f|r att g} till det angivna m|tet. - ! Det engelska namnet {r change conference. - ! Namnet "Pepsi" h|r till avdelningen mer krystade vitsar. - - 9=query-read-texts - params : ( pers-no : Pers-No; - conf-no : Conf-No; ) - result : Membership; - ! Man kan fr}ga efter ol{sta utan att logga in. - - 53=send-message - params : ( recipient : Pers-No; - message : HOLLERITH; ) - ; - ! Ett privilegierat anrop. - ! Om mottagaren {r nummer noll, skickas meddlandet till - ! samtliga inloggade personer. Detta kan ers{tta anrop 45. - - 17=set-conf-motd - params : ( conf-no : Conf-No; - text-no : Text-No; ) - ; - ! S{tt lappen text-no p} d|rren till conf-no. - ! Set-presentation och set-etc-motd trollar dessutom - ! med f{ltet no-of-marks i textstatusen f|r den gamla - ! och den nya presentationstexten. - ! Anrop 17 hette f|rr set-etc-motd med samma semantik. - - 21=set-conf-type - params : ( conf-no : Conf-No; - type : Conf-Type ) - ; - ! M|tet conf-no {r av typen type. - - 22=set-garb-nice - params : ( conf-no : Conf-No; - nice : Garb-Nice; ) - ; - ! Inl{gg i m|tet conf-no sparas i nice dagar innan de raderas. - - 41=set-motd-of-lyskom - motd : Text-No; - ; - ! This is a privileged call. - ! The text indicated by the parameter is set to be the message - ! of the day of LysKOM. - - 8=set-passwd - params : ( person : Pers-No; - old-pwd : HOLLERITH; - new-pwd : HOLLERITH; ) - ; - ! Ge personen ett nytt l|senord. Old-pwd {r det (gamla) - ! l|senordet f|r personen som g|r RPC-anropet (inte - ! n|dv{ndigt samma som anges av f|rsta argumentet). - - 19=set-permitted-submitters - params : ( conf-no : Conf-No; - perm-sub : Conf-No; ) - ; - ! M|tet conf-no {r skrivskyddat. - ! Endast medlemmar i perm-sub f}r skriva inl{gg i conf-no. - ! Om perm-sub {r 0 (noll) (???) {r m|tet inte skrivskyddat. - - 16=set-presentation - params : ( conf-no : Conf-No; - text-no : Text-No; ) - ; - ! [ndra presentationen f|r angivet m|te eller person. - ! Ange text-no 0 (noll) f|r att ta bort presentationen. - ! Set-presentation och set-etc-motd trollar dessutom - ! med f{ltet no-of-marks i textstatusen f|r den gamla - ! och den nya presentationstexten. - - 7=set-priv-bits - params : ( person : Pers-No; - privileges : Priv-Bits ) - ; - ! Ge eller ta n}gra bittar f|r den angivna personen. - - 20=set-super-conf - params : ( conf-no : Conf-No; - super-conf : Conf-No; ) - ; - ! G|r super-conf till superm|te (organisat|r?) f|r m|tet - ! conf-no. Om conf-no {r skrivskyddat, s} skickas eventuella - ! brev vidare till superm|tet. - - 18=set-supervisor - params : ( conf-no : Conf-No; - admin : Conf-No; ) - ; - ! G|r alla medlemmar i m|tet admin till administrat|rer (???) - ! f|r m|tet conf-no. Admin {r typiskt en persons brevl}da. - - 40=set-unread - params : ( conference : Conf-No; - no-of-unread : INTEGER; ) - ; - ! Endast l{sa no-of-unread senaste i angivet m|te. - - 57=set-user-area - params : ( pers-no : Pers-No; - user-area : Text-No; ) - ; - ! Angiven text anv{nds f|r att lagra angiven persons - ! variabler. Hur detta g}r till borde kanske behandlas - ! i ett separat kapitel. - - 44=shutdown - exit-val : INTEGER; - ; - ! This is a privileged call. - ! Shutdown server. - ! An old comment says exit-val is not used by the server. - ! Samma effekt n}s genom kill -HUP mot servern. - - 33=sub-comment - params : ( comment : Text-No; - comment-to : Text-No; ) - ; - - 38=sub-footnote - params : ( footnote : Text-No; - footnote-to : Text-No; ) - ; - - 15=sub-member - params : ( conf-no : Conf-No; - pers-no : Pers-No; ) - ; - ! Subtrahera angiven person som medlem i angivet m|te. - - 31=sub-recipient - params : ( text-no : Text-No; - conf-no : Conf-No; ) - ; - - - 43=sync - ; - ; - ! Make LysKOM sync its files. This is a privileged call. - ! Samma effekt n}s med kill -SIGUSR1 mot servern. - - 56=who-am-i - ; - sesson-no : Session-No; - - 39=who-is-on-old - ; - result : Who-Info-List-Old; - ! Anrop nummer 39 {r ersatt av anrop 51, vars svar ger - ! mer information. - - 51=who-is-on - ; - result : Who-Info-List; - ! Svaret {r en lista med information om nu aktiva sessioner. -) - -De anrop vars nummer i listan nedan f|ljs av en asterisk (*) {r -ersatta av modernare verianter i den nuvarande versionen (0.33) av -Elisp-klienten. - - Nummer RPC-Anrop Nummer RPC-Anrop - ------------------------------------------------------ - 0 login 1 logout - 2 pepsi 3 change-name - 4 change-what-i-am-doing - 5 create-person 6* get-person-stat-old - 7 set-priv-bits 8 set-passwd - 9 query-read-texts 10 create-conf - 11 delete-conf 12 lookup-name - 13* get-conf-stat-old 14 add-member - 15 sub-member 16 set-presentation - 17 set-conf-motd 18 set-supervisor - 19 set-permitted-submitters - 20 set-super-conf 21 set-conf-type - 22 set-garb-nice 23 get-marks - 24 mark-text 25 get-text - 26 get-text-stat 27 mark-as-read - 28 create-text 29 delete-text - 30 add-recipient 31 sub-recipient - 32 add-comment 33 sub-comment - 34 get-map 35 get-time - 36 get-server-info 37 add-footnote - 38 sub-footnote 39* who-is-on-old - 40 set-unread 41 set-motd-of-lyskom - 42 enable 43 sync - 44 shutdown 45* broadcast - 46 get-membership 47 get-created-texts - 48 get-members 49 get-person-stat - 50 get-conf-stat 51 who-is-on - 52 get-unread-confs 53 send-message - 54 get-session-info 55 disconnect - 56 who-am-i 57 set-user-area - ------------------------------------------------------ - - - Konstruerade datatyper - -H{r definieras de datatyper som sedan anv{nds i RPC-anrop fr}n -klienten till servern och i asynkrona anrop fr}n servern till -klienten. Datatyperna listas i bokstavsordning. - - -! Pers-no and Conf-no are u_shorts in the same domain. -Conf-No ::= INTEGER; -Conf-No-List ::= ARRAY Conf-No; ! Anv{nds var? - -Conf-List ::= ARRAY ( conference : Conf-No; - type : Conf-Type; ) - -! Som svar p} anrop 12 ges Conf-List-Old, som inte kan formuleras -! med den h{r BNF-grammatiken. Conf-List borde returneras, men d} -! vore inte LysKOM bak}tkompatibelt. -! Conf-List-Old: "3 { 3 45 62 } { 1001 0000 1001 }" -! Conf-List: "3 { 3 1001 45 0000 62 1001 }" - -Conf-Type ::= BITSTRING ( - rd_prot; ! Can anyone become a member? - original; ! Comments forbidden? - secret; ! Secret mailboxes cannot easily login by name - letterbox; ! Mailbox -) - -Conference ::= ( - name : HOLLERITH; - type : Conf-Type; - creation-time : Time; - last-written : Time; - creator : Pers-No; - presentation : Text-No; - supervisor : Conf-No; - permitted-submitters : Conf-No; ! Zero means anybody - super-conf : Conf-No; ! Zero means author - msg-of-day : Text-No; ! Every conf has one - nice : Garb-Nice; - no-of-members : INTEGER; - first-local-no : Local-Text-No; ! Oldest text still stored - no-of-texts : INTEGER; ! How many texts stored -) - -Garb-Nice ::= INTEGER; ! Number of days - -Info ::= ( - version : INTEGER; - conf-pres-conf : Conf-No; ! M|tet Pres (nya) m|ten - pers-pres-conf : Conf-No; ! M|tet Pres (nya) medlemmar - motd-conf : Conf-No; ! M|tet Lappar p} d|rren - kom-news-conf : Conf-No; ! M|tet Nyheter om LysKOM - motd-of-lyskom : Text-No; ! Visas vid login -) - -! kom-types.h defines Info-Datum as the tail in Misc-Info -! kom-types.h defines Info-Type as the selector in Misc-Info - -Local-Text-No ::= INTEGER; - -Mark ::= ( text-no : Text-No; type : INTEGER ) - ! Servern ger sig inte p} att tolka markeringstypen, - ! det {r helt upp till klienten. - -Mark-List ::= ARRAY Mark; - - -Member ::= Pers-No; -Member-List ::= ARRAY Member; -Membership ::= ( - last-time-read : Time; - conference : Conf-No; - priority : INTEGER; - last-text-read : Local-Text-No; - read-texts : ARRAY Local-Text-No; -) - -Membership-List ::= ARRAY Membership; - -Misc-Info ::= SELECTION ( - 0=recpt recipient : Conf-No; ! Mottagare - 1=cc-recpt cc-recipient : Conf-No; ! Extra kopia - 2=comm-to comment-to : Text-No; ! Kommentar till - 3=comm-in commented-in: Text-No; ! Kommentar i - 4=footn-to footnote-to : Text-No; ! Fotnot till - 5=footn-in footnoted-in : Text-No; ! Fotnot i - 6=loc-no local-no : Local-Text-No ! Lokalt textnummer - 7=rec-time received-at : Time; ! Mottaget tid - 8=sent-by sender : Pers-No; ! S{nt av - 9=sent-at sent-at : Time; ! S{nt n{r -! 10=...-recpt ??? ! F|r k{nnedom -) - -Pers-List ::= ARRAY Pers-No; - -Pers-No ::= Conf-no; - -Person ::= ( - username : HOLLERITH; ! E-mail adress - privileges : Priv-Bits; - flags : Personal-Flags; - last-login : Time; ! Eller logout? - user-area : Text-No; - total-time-present : INTEGER; ! I sekunder - sessions : INTEGER; - created-lines : INTEGER; - created-bytes : INTEGER; - read-texts : INTEGER; - no-of-text-fetches : INTEGER; - created-persons : INTEGER; - created-confs : INTEGER; - first-created-local-no : INTEGER; ! Well, local isn't really true but... - no-of-created-texts : INTEGER; ! Numbers of texts in the ARRAY, - ! i.e. not erased ones. - no-of-marks : INTEGER; - no-of-confs : INTEGER; -) ! /mo - -Personal-Flags ::= BITSTRING ( - unread-is-secret; - ! V{rdet 1 betyder att antalet ol{sta texter h}lls hemligt - flg2; flg3; flg4; flg5; flg6; flg7; flg8; -) - -! Se avsnittet ovan om s{kerhetsniv}er och privilegiebittar. -Priv-Bits ::= BITSTRING ( - wheel; admin; statistic; create_pers; create_conf; change_name; - flg7; flg8; flg9; flg10; flg11; flg12; flg13; flg14; flg15; flg16; -) - -! Session-Info {r v{ldigt likt Who-Info. -Session-Info ::= ( - person : Pers-No; - working-conference : Conf-No; - session : Session-No; - what-am-i-doing : HOLLERITH; - username : HOLLERITH; ! user@host - idle-time : INTEGER; ! Sekunder sedan senaste anrop - connection-time : Time; ! Tid och datum f|r uppkoppling - ! Detta {r ej detsamma som login-tid -) - -! Session numbers are unique to each session. A person can have -! more than one session running at the same time. Session numbers -! are assigned starting from 1 up. Session numbers are not reused -! during the lifetime of the server. See Who-Info-List -Session-No ::= INTEGER; - -Text-List ::= ( first-local-no : Local-Text-No; - texts : ARRAY Text-No; ) - -! Text-No is a u_long. -Text-No ::= INTEGER; - -Text-Stat ::= ( - creation-time : Time; - author : Pers-No; - no-of-lines : INTEGER; - no-of-chars : String-Size; - no-of-marks : INTEGER; - misc-info : ARRAY Misc-Info; -) - -! UNIX <time.h> struct tm. No time zone. -Time ::= ( - seconds : INTEGER; ! 0 ... 59 - minutes : INTEGER; ! 0 ... 59 - hours : INTEGER; ! 0 ... 23 - mday : INTEGER; ! 1 ... 31 - month : INTEGER; ! jan = 0 ... dec = 11 - year : INTEGER; ! Sedan 1900 - weekday : INTEGER; ! s|n = 0 ... SAT = 6 - yearday : INTEGER; ! 0 ... 365 - isdst : INTEGER; ! positivt = sommartid, 0 = normaltid -) - -Who-Info-Old ::= ( - person : Pers-No; - what-am-i-doing : HOLLERITH; - working-conference : Conf-No; -) -Who-Info-List-Old ::= ARRAY Who-Info-Old; - -Who-Info ::= ( - person : Pers-No; - working-conference : Conf-No; - session : Session-No; - what-am-i-doing : HOLLERITH; - username : HOLLERITH; ! user@hostname -) - -Who-Info-List ::= ARRAY Who-Info; - - - - Exempel - -Nedan ett exempel fr}n en verklig LysKOM-session. Kommentarer har jag -gett med "!" som i grammatiken. Exemplet {r gammalt och inneh}ller en -del detaljer som senare tagits ur bruk, men det ger {nd} en ide om hur -det r}a protokollet ser ut. - - $ telnet laila 4894 - Trying 130.236.254.12 ... - Connected to laila.lysator.liu.se. - Escape character is '^]'. - A8Haronsson ! Jag k|r protokoll A - LysKOM ! LysKOM svarar - 1 12 13HLars Aronsson ! lookup-name - =1 2 { 8 38 } { 1001 1001 } ! Person 8 eller Person 38 - :3 2 21 7 0H ! Person 21 gick till m|te 7 - :1 1 56 ! Person 56 loggade just ut - 2 0 8 8H******** ! login Person 8 med password - :3 2 8 0 0H ! Person 8 loggade just in - =2 ! login OK - 3 10 23HAntikommunistiskt Forum 0000 - ! Jag skapar ett |ppet m|te - =3 57 ! OK, m|te 57 skapat - 4 1 ! Jag loggar ut - :1 1 8 ! Person 8 loggade just ut - =4 ! logout OK diff --git a/doc/prot-A.slightly-obsolete b/doc/prot-A.slightly-obsolete deleted file mode 100644 index 7664414be..000000000 --- a/doc/prot-A.slightly-obsolete +++ /dev/null @@ -1,230 +0,0 @@ - - - LysKOM-Projektet - -------------------------------- - Beskrivning av server-klient-protokollet, - version A, i LysKOM - -------------------------------- - av Lars Aronsson - <aronsson@lysator.liu.se> - datum ok{nt - - - -Kommunikationen till servern sker i klartext. P} s} vis {r det m|jligt -att provk|ra utan att ha en klient ig}ng. Avlusningen blev ocks} -enklare. - - -UPPKOPPLING - -Vid uppkoppling s{nder klienten ett 'A' f|ljt av login-identiteten f|r -anv{ndaren (en str{ng, se nedan). Servern svarar med att skicka -"LysKOM\n". Sedan {r uppkopplingen gjord. - -FUNKTIONSANROP - -Vid ett funktionsanrop skickas f|ljande data fr}n klienten till -servern: - - ref-nr funktions-nr parametrar - -ref-nr {r ett heltal (unsigned, max 32 bitar) som klienten kan v{lja -fritt, t ex som ett l|pnummer. - -funktions-nr {r ett heltal som anger vilken funktion man vill anropa. -De definieras i isc/com.h. - -Om anropet lyckades ser svaret ut s} h{r: - - =ref-nr svar - -Om det misslyckas: - - %ref-nr kom_errno err_stat - - - -DATAFORMAT - -Allt som skickas (utom m|jligtvis innuti str{ngar) {r ASCII. Bortsett -fr}n innuti str{ngar skickas inga kontrolltecken. Whitespace anv{nds -f|r att skilja olika f{lt }t. Som whitespace r{knas ' ', \r, \n, \t -och \000. (Ett funktionsanrop beh|ver inte avslutas med \n, det g}r -lika bra med vilken whitespace som helst, men det m}ste finnas en -whitespace - det r{cker inte med att paketet tar slut). - -Alla tal, (t ex int, Pers_no, Conf_no) skickas i decimal form. - -Enumar skickas i decimal form. - -Str{ngar skickas som Hollerith-str{ngar, dvs f|rst ett heltal som -anger l{ngden, sen ett H, sen str{ngen. Innuti en str{ng kan vilka -tecken som helst komma. (0-255). - -Arrayer skickas inom m}svingar. T ex kan en Text_list som ser ut s} -h{r: -typedef struct { - Local_text_no first_local_no, - no_of_texts; - Text_no * texts; -} Text_list; - -skickas s} h{r: - 5 3 { 8 9 11 } - -eller, om texts==NULL: - 5 3 * - -Asterisk anv{nds allts} f|r att markera en tom array. (Till exempel om -man inte fr}gar efter Membership). Asterisk-notationen kan bara -anv{ndas i rikting fr}n servern till klienten. - - -EXEMPEL - -S} h{r kan en k|rning se ut. - -Klienten skickar Servern svarar F|rklaring -================ ============== ========== - -A5Hceder LysKOM\n Uppkoppling. -1 37 =1 100 1 2 3 4 5712 Get_info -69 27 5712 =69 {textstat} Get_text_stat -18 26 5712 =18 {textmassa} Get_text -2 1 334 5HaBcdE %2 3 0 0 0 Login, misslyckas. (KOM_PWD) -3 1 334 5HaBcDe =3 Login, lyckas. -... -9 2 =9 Logout (beh|vs eg. ej) - - -FELHANTERING - -Om servern tar emot text som inte st{mmer med det protokoll som f|r -tillf{llet {r implementerat (f|rhoppningsvis, men ej n|dv{ndigtvis, -det som {r beskrivet h{r) skriver den ut "%% LysKOM protocol error.\n" - -ASYNKRONA MEDDELANDEN - -Servern skickar ibland ut meddelanden som clienterna kanske tycker {r -intressanta. Formatet f|r dessa {r: - - :no_of_tokens function < tokens > - -De b|rjar allts} med ":" i st{llet f|r "=" eller "%". Genom att -antalet token alltid s{nds s} kan {ven gamla klienter "|verleva" en ny -klient med nya asynkrona meddelanden. Det {r bara att hoppa |ver r{tt -antal token. - -Termen "asynkrona meddelanden" {r lite oegentlig. Meddelanden {r -synkroniserade med allt annat som skickas ut fr}n servern. Ett -meddelanden kommer bara n{r ett svar skulle ha kommit. - -DATAFORMAT F\R SAMMANSATTA TYPER - -Person - username str{ng - privileges bitstr{ng - personal_flags bitstr{ng - created_texts: - first_local_no - no_of_texts - texts array - marks: - no_of_marks - marks array - conferences: - no_of_confs - confs: array - conf_no - priority - last_time_read - last_text_read - no_of_read - read_texts array - user_area - last_login - total_time_present - sessions - created_lines - created_bytes - read_texts - no_of_text_fetches - created_persons - created_confs - - - -Conference - - name str{ng - members: - no_of_members - members: array - member (Pers_no) - texts: - first_local_no - no_of_texts - texts array (Text_no) - conf_type bitstr{ng - creator - creation_time - presentation - supervisor - permitted_submitters - super_conf - last_written - msg_of_day - nice - - -Text_stat - - author - creation_time - no_of_lines - no_of_marks - no_of_misc - misc_info: array - type 0 recpt - 1 cc_recpt - 2 comm_to - 3 comm_in - 4 footn_to - 5 footn_in - 6 loc_no - 7 rec_time - 8 sent_by - 9 sent_at - datum - - - -Info - version - conf_pres_conf - pers_pres_conf - motd_conf - kom_news_conf - motd_of_lyskom - -Membership - - no_of_confs - confs: array - conf_no - priority - last_time_read - last_text_read - no_of_read - read_texts array - - -Text_list - first_local_no - no_of_texts - texts array - -str{ng - 12HTolv tecken. - diff --git a/doc/prot-A.txt b/doc/prot-A.txt deleted file mode 100644 index 7f025bca7..000000000 --- a/doc/prot-A.txt +++ /dev/null @@ -1,1067 +0,0 @@ - - LysKOM-Projektet - -------------------------------- - Specifikation av protokoll A mellan klient och server - -------------------------------- - av Lars Aronsson - <Aronsson@Lysator.LiU.SE> - 25 juni 1991 - - - - LysKOM - -LysKOM {r ett datakonferenssystem. Andra liknande system {r QZ-KOM och -PortaCOM. LysKOM {r Copyright (C) 1990 datorf|reningen Lysator vid -Universitetet och Tekniska H|gskolan i Link|ping. Var och en till}ts -fritt kopiera, {ndra och distribuera LysKOM dokument och program, -givet att mottagarna ges samma r{ttigheter. Varken Lysator eller dess -medlemmar tar n}got som helst ansvar f|r dokumentens eller programmens -riktighet eller f|ljderna av deras anv{ndande. - - - Den h{r texten - -Den h{r texten specificerar version A av det protokoll som anv{nds -mellan en klient (anv{ndarens program) och en server (databasen). Den -h{r texten {r t{nkt att inneh}lla allt du beh|ver veta f|r att skriva -en klient utan att veta n}got om servern, eller tv{rtom. - -Mitt syfte {r att den h{r texten skall vara s} fullst{ndig och korrekt -som m|jligt. Om du hittar n}gra fel, eller kommer p} n}got som saknas, -s} h|r g{rna av dig till mig. F|ljande {r de saker som jag vet saknas -i den h{r texten: - - Vad som lagras i en anv{ndares "user-area", och hur. - - - Filer - -Den h{r filen {r en mer systematisk sammanst{llning av nedan -uppr{knade filer. Det {r m|jligt att filerna har {ndrat namn, antal -och utseende n{r du l{ser detta. S} h{r hette de den 3 juni 1991: - - 2kom/doc/com-spec -- borta! - 2kom/doc/security-levels.txt - 2kom/include/kom-types.h - 2kom/include/kom-errno.h - 2kom/isc-client/com.h - 2kom/server/fncdef.txt -- borta? - 2kom/include/services.h - - - Underliggande protokoll - -LysKOM Protokoll A kan k|ras ovanp} vilken tillf|rlitlig dubbelriktad -8-bitars bytekanal som helst. I n|dfall kan det ocks} k|ras p} en -7-bitars bytekanal. Idag k|rs det ovanp} Telnet/TCP/IP. P} Lysator -anv{nds telnetport 4894 p} IP-host 130.236.254.12 (laila). Data i -protokoll A sker i ASCII klartext. I hollerithstr{ngar (se nedan) f}r -godtyckliga 8-bitars bytes f|rekomma, men tanken {r att man skall -kunna k|ra protokollet "r}tt" fr}n en textterminal. - - - Abstrakt syntaxnotation - -I den h{r specifikationen har en BNF-liknande grammatik anv{nts f|r -att beskriva protokollets dataelement. Det {r mycket vetenskapligt, -f|r s} g|r de som specar OSI-protokoll. Den h{r grammatiken borde -likna ASN.1 mer {n den g|r, men jag har inte ASN.1-specen h{r. -Dataf{lt har givits namn med liten begynnelsebokstav, datatyper med -stor. Operatorn "::=" definierar (som i BNF) och ":" ger typ (som i -Pascal). Kommentarer inleds med "!" och avslutas med radslut (som i -BLISS). Semikolon anv{nds som i C. De grundl{ggande typerna och deras -notation beskrivs h{rn{st. - - - Grundl{ggande datatyper - -Dataelementen som skickas med protokollet }tskiljs av (godtyckliga -sekvenser av) mellanslag, tab-tecken, line-feed, return, eller NULL. -Undvik att skicka NULL, men var beredd p} att tolka det som ett -mellanslag. - -INTEGER {r icke-negativa heltal som skall rymmas p} 32 bitar. De -skickas som text p} decimal form. - -HOLLERITH {r textstr{ngar. F|rst skickas str{ngens l{ngd som en -INTEGER, sedan bokstaven "H" och d{refter (utan }tskiljande -mellanslag!) texten. Texten f}r inneh}lla vilka byte-v{rden som helst -fr}n 0 till 255. - -BITSTRING skickas som text representerande ett heltal p} bin{r form. -Antal bitar i str{ngen framg}r alltid av sammanhanget. [ven inledande -nollor m}ste skickas. Siffran "1" representerar sant v{rde och "0" -falskt. Bitarna skickas i den ordning de st}r listade i den abstrakta -syntaxen. - - shape-of-world : BITSTRING ( - is-flat; is-round; is-3d; is-2d; ! e.g. "0110" - ) - -ARRAY {r en lista med ett visst antal element. Elementens typ noteras -omedelbart efter ordet ARRAY. F|rst skickas en INTEGER som ger antalet -element, sedan skickas tecknet "{", d{refter alla elementen i f|ljd -och slutligen tecknet "}". Tecknen "{" och "}" fyller egentligen ingen -funktion, men underl{ttar n{r man k|r protokollet "r}tt". Exempel: - - hackers : ARRAY HOLLERITH; - ! e.g. 4 { 8Haronsson 7Hbellman 4Hinge 5Hceder } - -SELECTION {r en INTEGER med efterf|ljande svans. Vilken typ svansen -har beror p} v{rdet av heltalet. F|r vissa v{rden kan svansen vara -tom. V{rdet anges i den abstrakta syntaxen med "nummer=namn". -Exempel: - - phrase : SELECTION ( - 1=hello name:HOLLERITH; ! e.g. "1 4HJohn" - 2=howdy ; ! e.g. "2" - ) - -RPC {r en mycket speciell notation som anv{nds f|r protokoll med -remote procedure calls, dvs fr}gor och svar. Notationen f|r RPC ser ut -som SELECTION, men varje alternativ har tv} svansar: fr}gan och -svaret. Selectornumret skickas bara tillsammans med fr}gan. Exempel: - - phrases : RPC ( - 1=cost inventory:INTEGER; price:INTEGER; - 2=time timezone:INTEGER; hours:INTEGER; - 3=name ; name:HOLLERITH; - ) - ! e.g. "1 23"->"498" "3"->"4HLars" "2 1"->"1430" - -Datastrukturen struct/record markeras i den abstrakta syntaxen bara -med omgivande "(" och ")". Detta inneb{r inte att n}gra extra tecken -skickas i protokollet. - - - Dialog - -En session b|rjar alltid med en uppkoppling, d{r klienten v{ljer -protokoll genom att skicka en - - uppkopplingsbeg{ran : ( "A"; loginnamn : HOLLERITH; ) - -vilken besvaras fr}n servern av en - - uppkopplingsbekr{ftelse : "LysKOM\n" - -D{refter har vi finns bara RPC-protokollet commands. Klienten f}r -skicka flera fr}gor innan den f}tt svar p} det f|rsta. F|r att h}lla -reda p} till vilket anrop ett visst svar h|r, v{ljer klienten ett -referensnummer att medf|lja och samma nummer }terfinns i svaret. Det -{r klientens sak att fritt v{lja och h}lla reda p} referensnumren. - - fr}ga : ( - ref-no : INTEGER; - commands-call; - ) - -som, om allt g}r som det skall, besvaras fr}n servern med - - ok-return : ( - "="; - ref-no : INTEGER; - commands-return; - ) - -eller, om n}got misslyckades, med - - error-return : ( - "%"; - ref-no : INTEGER; - error-no : Error-No; - error-status : INTEGER; - ) - -Det skall inte vara n}got tomrum mellan "=" respektive "%" och ref-no. -Observera att {ven f|r de funktioner d{r f-return {r inneh}llsl|st -svarar servern med "=" eller "%" och ref-number. - - - S{kerhetsniv}er och privilegiebittar - -S{kerhet och privilegier byggs i LysKOM med tv} komponenter: Varje -person har sig ett antal bittar tilldelad (man kan s{ga att personen -tillh|r ett antal grupper) och varje session har dessutom en -s{kerhetsniv} (ett tal). Varje r{ttighet kr{ver en viss bitt och en -viss minsta niv}. De senast aktuella kombinationerna -bitt-niv}-r{ttighet beskrivs i filen 2kom/doc/security-levels.txt, h{r -ges en vackrare tabell: - - Bitt Niv} R{ttighet - ------------------------------------------------------ - wheel Normalt ej tilldelad - 0 Alltid logga in, {ven vid "crowded" - 6 S{tta alla Priv_bits f|r alla personer - 7 S{tta password f|r alla personer - 8 Vara organisat|r (supervisor) f|r allt - 10 Kan l{sa alla texter - ------------------------------------------------------ - admin Normalt ej tilldelad - 1 St{nga av servern - 1 S{tta motd_of_kom - 1 L{sa last_login - 2 L{sa status f|r hemliga m|ten och - personer - 2 L{sa de skyddade delarna av statusen - 2 L{sa hela text_statusen, - {ven vid hemliga mottagare - 3 Byta namn p} alla - 4 Addera/subtrahera medlemmar - 4 Addera/subtrahera mottagare till texter - 5 S{tta superm|te - 5 Radera texter - 6 S{tta administrat|r - ------------------------------------------------------ - statistic Normalt ej tilldelad - 2 L{sa statistikdelarna av Person-structen, - {ven om de {r skyddade. - ------------------------------------------------------ - create_conf Normalt tilldelad - 0 Skapa m|ten - ------------------------------------------------------ - create_pers Normalt tilldelad - 0 Skapa personer - ------------------------------------------------------ - -Enligt Thomas Bellmans erfarenheter anv{nder en administrat|r i -praktiskt arbete bara niv}erna 0 och 255. I st{llet f|r -s{kerhetsniv}er borde de enskilda privilegiebittarna sl}s p} och av -individuellt. Detta kanske l|ses elegantare i kommande versioner av -protokollet. - - - Felkoder - -De felkoder som f|rekommer som svar p} RPC-anrop {r nedanst}ende. H{r -{r de f|rklarade i nummerordning. Det finns en kort lista i alfabetisk -ordning strax efter}t. - - Error-No : SELECTION ( - 0=no-error; ! No error has occured - 2=not-impl; ! Not implemented yet - 3=obsolete; ! No longer implemented - 4=pwd; ! Wrong or illegal password - 5=long-str; ! String too long - 6=login; ! Not logged in. - 7=login-disallowed; ! System is in 'singel-user mode' - 8=conf-zero; ! Attempt to use conference number 0. - 9=undef-conf; ! Undefined or secret conference - 10=undef-pers; ! Undefined or secret person - 11=access; ! No 'read/write permission' - 12=perm; ! No permission - 13=not-member; ! Not member in conf - 14=no-such-text; ! No such global text-no, or no access - 15=text-zero; ! Can't use text no 0 - 16=no-such-local-text;! No such local text-no - 17=local-text-zero; ! Can't use local text no 0 - 18=bad-name; ! Too short or too long - ! or contains illegal chars - 19=index-out-of-range; - 20=conf-exists; ! Already exists - 21=pers-exists; ! Already exists - 22=secret-public; ! Cannot be secret and !rd-prot - 23=letter-box; ! Cannot change letter-box flag - 24=ldb-err; ! Should never happen, - ! unless Willf|r makes a mistake. - 25=ill-misc; ! Illegal misc field. - ! err-stat holds field no - 26=illegal-info-type; ! Info-type parameter was illegal. - ! This means that there is a - ! bug in the client. - 27=already-recipient; ! Already recipient to this text. - 28=already-comment; ! Already comment to this text. - 29=already-footnote; ! Already footnote to this text. - 30=not-recipient; ! Not recipient - 31=not-comment; ! Not comment to this text. - 32=not-footnote; ! Not footnote to this text. - 33=recipient-limit; ! Too many recipients - 34=comm-limit; ! Too many comments - 35=foot-limit; ! Too many footnotes - 36=mark-limit; ! Too many marks. - 37=not-author; ! Only the author may add footnotes or - ! delete texts. - 38=no-connect; ! Can't connect to specified server - 39=out-of-memory; ! Couldn't get memory for result - 40=server-is-crazy; ! Client can't understand server - 41=client-is-crazy; ! Client thinks that server says it - ! can't understand client. - 42=undef-session; ! This session doesn't exist - ) - - - Nummer Felmeddelande Nummer Felmeddelande - ------------------------------------------------------ - 11 access 28 already-comment - 29 already-footnote 27 already-recipient - 18 bad-name 41 client-is-crazy - 34 comm-limit 20 conf-exists - 8 conf-zero 35 foot-limit - 25 ill-misc 26 illegal-info-type - 19 index-out-of-range 24 ldb-err - 23 letter-box 17 local-text-zero - 6 login 7 login-disallowed - 5 long-str 36 mark-limit - 38 no-connect 0 no-error - 16 no-such-local-text 14 no-such-text - 37 not-author 31 not-comment - 32 not-footnote 2 not-impl - 13 not-member 30 not-recipient - 3 obsolete 39 out-of-memory - 12 perm 21 pers-exists - 4 pwd 33 recipient-limit - 22 secret-public 40 server-is-crazy - 15 text-zero 9 undef-conf - 10 undef-pers 42 undef-session - ------------------------------------------------------ - - - Asynkrona anrop - -N{r som helst kan servern skicka ut ett asynkront anrop. En klient -beh|ver inte bry sig om dem. Det g}r bra att l{sa undan dem n{r ett -svar skall l{sas. Asynkrona meddelanden b|rjar alltid med ":" och ett -heltal som talar om hur m}nga parametrar som kommer. D{refter kommer -en selector och parametrarna. Precis som f|r ok- och error-return {r -d{r inget tomrum mellan ":" och f|rsta heltalet. I f|rklaringen nedan -listas de asynkrona anropen i nummerordning, men en alfabetiskt -sorterad lista f|ljer strax d{rp}. - - -asynk-meddelande ::= ( - ":"; - antal-params:INTEGER; - meddelande : SELECTION ( - 0=new-text ( text-no : Text-No; - text-stat : Text-stat ) - ! En ny text har skapats. - - 1=logout person : Pers-No; - ! G}r {ven under namnet "i-am-off" (i C-koden). - ! K{llkoden f|r Elispklienten g|r g{llande att - ! asynkrona anropet nummer 1 {r taget ur bruk. - ! Det {r ersatt av anrop 13 som anger sessionsnummer. - - 2=who-info ( person : Pers-No; - conference : Conf-No; - what-am-i-doing : HOLLERITH; ) - ! K{llkoden f|r Elispklienten g|r g{llande att - ! asynkrona anropet nummer 2 heter login, men att - ! det hur som helst {r taget ur bruk och ersatt av - ! asynkrona anropet nummer 9. - - 3=conf-deleted ! Anv ej av Elispklienten - ??? - 4=conf-created ! Anv ej av Elispklienten - ??? - 5=conf-changed-name - ( conf-no : Conf-No; - old-name : HOLLERITH; - new-name : HOLLERITH; ) - ! G}r {ven under namnet "new-name" (i C-koden). - - 6=i-am-on info : Who-Info; - 7=database-is-syncing - ; - 8=forced-leave-conf ! Anv ej av Elispklienten - ??? - 9=login ( pers-no : Pers-No; - session-no : Session-No; ) - - 10=broadcast-message - ( sender : Pers-No; - message : HOLLERITH; ) - ! Det vore estetiskt f|rdelaktigt om servern aldrig skickade - ! asynkrona anropet nummer 10 utan h|ll sig till nummer 12. - - 11=crowded ; - ! Asynkrona anropet nummer 11 betyder att n}gon har - ! misslyckats logga in, eftersom servern inte har fler - ! lediga f|rbindelser. Den ansvarsk{nnande anv{ndaren - ! kan nu v{lja att logga ut f|r att bereda plats. - - 12=directed-message - ( recipient : Pers-No; - sender : Pers-No; - message : HOLLERITH; ) - ! Om argumentet recipient {r noll (0) i asynkrona anropet - ! nummer 12, s} {r meddelandet riktat till alla inloggade. - ! Det {r {nnu inte m|jligt att rikta ett meddelande till - ! en viss session. - - 13=new-logout - ( pers-no : Pers-No; - session-no : Session-No; ) - ) -) - -En asterisk (*) efter numret i tabellen nedan anger att det asynkrona -anropet ersatts av n}got annat. Se ovan under respektive anrop f|r -n{rmare beskrivning. - - Nr Asynkront anrop Nr Asynkront anrop - ------------------------------------------------------ - 10 broadcast-message 5 conf-changed-name - 4 conf-created 3 conf-deleted - 11 crowded 7 database-is-syncing - 12 directed-message 8 forced-leave-conf - 6 i-am-on 9 login - 1* logout 13 new-logout - 0 new-text 2* who-info - ------------------------------------------------------ - - - RPC-anrop - -Klienten skickar RPC-anrop med parametrar till servern. Servern svarar -endera med ett felmeddelande (se ovan i avsnitten Dialog och Felkoder) -eller med ett returv{rde. Nedan ges BNF-grammatiken f|r de datatyper -som anv{nds i parametrar och returv{rden. RPC-anropen listas i -alfabetisk ordning, men en numeriskt sorterad lista f|ljer strax -efter}t. - - -commands : RPC ( - ! Anropsnummer och -namn - ! Datayp f|r anropsparameter - ! Datatyp f|r returv{rde - - 32=add-comment - params : ( comment : Text-No; - comment-to : Text-No; ) - ; - - - 37=add-footnote - params : ( footnote : Text-No; - footnote-to : Text-No; ) - ; - - 14=add-member - params : ( conf-no : Conf-No; - pers-no : Pers-No; - priority : INTEGER; - where : INTEGER; ) - ; - ! Addera angiven person som medlem i angivet m|te - ! Priority {r prioriteten p} l{slistan - ! Where {r placering p} listan, 0 (noll) eller st|rre - ! RPC-anropet nummer 14 anv{nds {ven senare f|r att {ndra - ! prioritet och plats p} listan. - - 30=add-recipient - ! The sequence "conf-no, type" is a reversed Misc-Info. - ! Type is recpt or cc_recpt. - add-recipient-params : ( text-no : Text-No; - conf-no : Conf-No; - type : INTEGER; ) - ; - - 45=broadcast - message : HOLLERITH; - ; - ! Ett privilegierat anrop. - ! Samma effekt kan n}s genom magisk parameter till anrop 53. - ! En gammal felaktig kommentar g|r g{llande att parametern - ! skulle vara ett text-no, men s} {r inte fallet. - - 3=change-name - change-name-params : ( conf-no : Conf-No; - new-name : HOLLERITH; ) - ; - ! Anropet nummer 3 byter namn p} angivet m|te eller person. - - 4=change-what-i-am-doing - what-am-i-doing : HOLLERITH; - ; - ! Den medskickade texten kommer att visas i vilka-listan, - ! se {ven anropet nummer 51. - - 10=create-conf - params : ( name : HOLLERITH; - type : Conf-Type; ) - result : Conf-No; - - 5=create-person - create-person-params : ( name : HOLLERITH; - passwd : HOLLERITH; ) - Pers-No; - ! En ny person skapas med angivet namn och l|senord. - ! Den skapade personens personnummer returneras. - - 28=create-text - ! create-text-return returns text number zero on error - ! NB! Only Misc-Infos 0,1,2,4 can be sent here. - params : ( text : HOLLERITH; - misc-info : ARRAY Misc-Info ) - result : Text-No; - - 11=delete-conf - conf : Conf-No; - ; - ! Utpl}na ett m|te eller en person. - - 29=delete-text - Text-No; - ; - - 55=disconnect - session-no : Session-No; - ; - ! Disconnect a session. You can disconnect your own session - ! (even if you are not logged in) and any session where you - ! are supervisor of the user that is logged in on that - ! session. - - 42=enable - ena-level : INTEGER; - ; - ! This is a privileged call. - ! Set ena-level. Zero means don't use any privileges. - - 50=get-conf-stat - conf-no : Conf-No; - result : Conference; - ! Returnera m|tesstatus f|r angivet m|te - - 13=get-conf-stat-old - params : ( conf-no : Conf-No; - mask : INTEGER; ) - result : Conference - ! Eftersom den mask som ing}r i params f|ga beaktas, - ! har anropet nummer 13 ersatts av anropet 50. - ! M|tesstatusen f|r det angivna m|tet returneras. - ! Om masken {r ett j{mnt tal, s} skickas ett tomt f{lt (0H) - ! name i svaret. Fr}n b|rjan var det t{nkt: - ! mask = name + members + texts + list-sizes -- just use 255 - - 47=get-created-texts - params : ( person : Pers-No; - first : Local-Text-No; - no-of-texts : INTEGER; ) - created-texts : Text-List; - ! NB! first is a text number local to the person who wrote it. - ! It is not a Local-Text-No in his mailbox. - - 34=get-map - params : ( conf-no : Conf-No; - first-local-no : Local-Text-No; - no-of-texts : INTEGER; ) - result : Text-List; - - 23=get-marks - ; - Mark-List; - - 48=get-members - params : ( conf : Conf-No; - first : INTEGER; - no-of-members : INTEGER; ) - members : Member-List; - ! first should perhaps be Local-Conf-No... - - 46=get-membership - params : ( person : Pers-No; - first : INTEGER; - no-of-confs : INTEGER; - mask : BITSTRING (want-read-texts); ) - memberships : Membership-List; - ! first should perhaps be Local-Conf-No... - - 49=get-person-stat - person : Pers-No; - result : Person; - ! Personstatusen f|r den angivna personen returneras. - - 6=get-person-stat-old - params : ( person : Pers-No; - mask : INTEGER; ) - result : Person; - ! Eftersom den mask som ing}r i params f|ga beaktas, - ! har anropet nummer 6 ersatts av anropet 49. - ! Personstatusen f|r den angivna personen returneras. - ! Om masken {r ett j{mnt tal, s} skickas ett tomt f{lt (0H) - ! username i svaret. - - 36=get-server-info - ; - result : Info; - ! Return various information about the server. - ! Anrop 36 hette tidigare get-info med samma semantik. - - 54=get-session-info - session-no : Session-No; - result : Session-Info; - - 25=get-text - params : ( text : Text-No; - start-char : INTEGER; - end-char : INTEGER; ) - result : HOLLERITH; - - 26=get-text-stat - params : Text-No; - result : Text-Stat; - - 35=get-time - ; - Time; - - 52=get-unread-confs - pers-no : Pers-No; - conf-no-list : ARRAY Conf-No; - - 0=login - login-params : ( person : Pers-No; - passwd : HOLLERITH; ) - ; - - 1=logout - ; - ; - ! Anropet nummer 1 misslyckas aldrig. - - 12=lookup-name - name : HOLLERITH; - result : Conf-List-Old; - ! Expandera ett f|rkortat namn och returnera en lista - ! med nummer p} de m|ten och personer som det kan vara. - ! Se kommentaren vid definitionen av Conf-List. - - 27=mark-as-read - params : ( conference : Conf-No; - texts : ARRAY Local-Text-No; ) - ; - - 24=mark-text - params : ( text : Text-No; - mark-type : INTEGER; ) - ! mark-type = permanently-marked -- just use 255 (?) - ! The server only stores (does not act upon) this value. - ; - - 2=pepsi - Conf-No; - ; - ! Anropet nummer 2 anv{nds f|r att g} till det angivna m|tet. - ! Det engelska namnet {r change conference. - ! Namnet "Pepsi" h|r till avdelningen mer krystade vitsar. - - 9=query-read-texts - params : ( pers-no : Pers-No; - conf-no : Conf-No; ) - result : Membership; - ! Man kan fr}ga efter ol{sta utan att logga in. - - 53=send-message - params : ( recipient : Pers-No; - message : HOLLERITH; ) - ; - ! Ett privilegierat anrop. - ! Om mottagaren {r nummer noll, skickas meddlandet till - ! samtliga inloggade personer. Detta kan ers{tta anrop 45. - - 17=set-conf-motd - params : ( conf-no : Conf-No; - text-no : Text-No; ) - ; - ! S{tt lappen text-no p} d|rren till conf-no. - ! Set-presentation och set-etc-motd trollar dessutom - ! med f{ltet no-of-marks i textstatusen f|r den gamla - ! och den nya presentationstexten. - ! Anrop 17 hette f|rr set-etc-motd med samma semantik. - - 21=set-conf-type - params : ( conf-no : Conf-No; - type : Conf-Type ) - ; - ! M|tet conf-no {r av typen type. - - 22=set-garb-nice - params : ( conf-no : Conf-No; - nice : Garb-Nice; ) - ; - ! Inl{gg i m|tet conf-no sparas i nice dagar innan de raderas. - - 41=set-motd-of-lyskom - motd : Text-No; - ; - ! This is a privileged call. - ! The text indicated by the parameter is set to be the message - ! of the day of LysKOM. - - 8=set-passwd - params : ( person : Pers-No; - old-pwd : HOLLERITH; - new-pwd : HOLLERITH; ) - ; - ! Ge personen ett nytt l|senord. Old-pwd {r det (gamla) - ! l|senordet f|r personen som g|r RPC-anropet (inte - ! n|dv{ndigt samma som anges av f|rsta argumentet). - - 19=set-permitted-submitters - params : ( conf-no : Conf-No; - perm-sub : Conf-No; ) - ; - ! M|tet conf-no {r skrivskyddat. - ! Endast medlemmar i perm-sub f}r skriva inl{gg i conf-no. - ! Om perm-sub {r 0 (noll) (???) {r m|tet inte skrivskyddat. - - 16=set-presentation - params : ( conf-no : Conf-No; - text-no : Text-No; ) - ; - ! [ndra presentationen f|r angivet m|te eller person. - ! Ange text-no 0 (noll) f|r att ta bort presentationen. - ! Set-presentation och set-etc-motd trollar dessutom - ! med f{ltet no-of-marks i textstatusen f|r den gamla - ! och den nya presentationstexten. - - 7=set-priv-bits - params : ( person : Pers-No; - privileges : Priv-Bits ) - ; - ! Ge eller ta n}gra bittar f|r den angivna personen. - - 20=set-super-conf - params : ( conf-no : Conf-No; - super-conf : Conf-No; ) - ; - ! G|r super-conf till superm|te (organisat|r?) f|r m|tet - ! conf-no. Om conf-no {r skrivskyddat, s} skickas eventuella - ! brev vidare till superm|tet. - - 18=set-supervisor - params : ( conf-no : Conf-No; - admin : Conf-No; ) - ; - ! G|r alla medlemmar i m|tet admin till administrat|rer (???) - ! f|r m|tet conf-no. Admin {r typiskt en persons brevl}da. - - 40=set-unread - params : ( conference : Conf-No; - no-of-unread : INTEGER; ) - ; - ! Endast l{sa no-of-unread senaste i angivet m|te. - - 57=set-user-area - params : ( pers-no : Pers-No; - user-area : Text-No; ) - ; - ! Angiven text anv{nds f|r att lagra angiven persons - ! variabler. Hur detta g}r till borde kanske behandlas - ! i ett separat kapitel. - - 44=shutdown - exit-val : INTEGER; - ; - ! This is a privileged call. - ! Shutdown server. - ! An old comment says exit-val is not used by the server. - ! Samma effekt n}s genom kill -HUP mot servern. - - 33=sub-comment - params : ( comment : Text-No; - comment-to : Text-No; ) - ; - - 38=sub-footnote - params : ( footnote : Text-No; - footnote-to : Text-No; ) - ; - - 15=sub-member - params : ( conf-no : Conf-No; - pers-no : Pers-No; ) - ; - ! Subtrahera angiven person som medlem i angivet m|te. - - 31=sub-recipient - params : ( text-no : Text-No; - conf-no : Conf-No; ) - ; - - - 43=sync - ; - ; - ! Make LysKOM sync its files. This is a privileged call. - ! Samma effekt n}s med kill -SIGUSR1 mot servern. - - 56=who-am-i - ; - sesson-no : Session-No; - - 39=who-is-on-old - ; - result : Who-Info-List-Old; - ! Anrop nummer 39 {r ersatt av anrop 51, vars svar ger - ! mer information. - - 51=who-is-on - ; - result : Who-Info-List; - ! Svaret {r en lista med information om nu aktiva sessioner. -) - -De anrop vars nummer i listan nedan f|ljs av en asterisk (*) {r -ersatta av modernare verianter i den nuvarande versionen (0.33) av -Elisp-klienten. - - Nummer RPC-Anrop Nummer RPC-Anrop - ------------------------------------------------------ - 0 login 1 logout - 2 pepsi 3 change-name - 4 change-what-i-am-doing - 5 create-person 6* get-person-stat-old - 7 set-priv-bits 8 set-passwd - 9 query-read-texts 10 create-conf - 11 delete-conf 12 lookup-name - 13* get-conf-stat-old 14 add-member - 15 sub-member 16 set-presentation - 17 set-conf-motd 18 set-supervisor - 19 set-permitted-submitters - 20 set-super-conf 21 set-conf-type - 22 set-garb-nice 23 get-marks - 24 mark-text 25 get-text - 26 get-text-stat 27 mark-as-read - 28 create-text 29 delete-text - 30 add-recipient 31 sub-recipient - 32 add-comment 33 sub-comment - 34 get-map 35 get-time - 36 get-server-info 37 add-footnote - 38 sub-footnote 39* who-is-on-old - 40 set-unread 41 set-motd-of-lyskom - 42 enable 43 sync - 44 shutdown 45* broadcast - 46 get-membership 47 get-created-texts - 48 get-members 49 get-person-stat - 50 get-conf-stat 51 who-is-on - 52 get-unread-confs 53 send-message - 54 get-session-info 55 disconnect - 56 who-am-i 57 set-user-area - ------------------------------------------------------ - - - Konstruerade datatyper - -H{r definieras de datatyper som sedan anv{nds i RPC-anrop fr}n -klienten till servern och i asynkrona anrop fr}n servern till -klienten. Datatyperna listas i bokstavsordning. - - -! Pers-no and Conf-no are u_shorts in the same domain. -Conf-No ::= INTEGER; -Conf-No-List ::= ARRAY Conf-No; ! Anv{nds var? - -Conf-List ::= ARRAY ( conference : Conf-No; - type : Conf-Type; ) - -! Som svar p} anrop 12 ges Conf-List-Old, som inte kan formuleras -! med den h{r BNF-grammatiken. Conf-List borde returneras, men d} -! vore inte LysKOM bak}tkompatibelt. -! Conf-List-Old: "3 { 3 45 62 } { 1001 0000 1001 }" -! Conf-List: "3 { 3 1001 45 0000 62 1001 }" - -Conf-Type ::= BITSTRING ( - rd_prot; ! Can anyone become a member? - original; ! Comments forbidden? - secret; ! Secret mailboxes cannot easily login by name - letterbox; ! Mailbox -) - -Conference ::= ( - name : HOLLERITH; - type : Conf-Type; - creation-time : Time; - last-written : Time; - creator : Pers-No; - presentation : Text-No; - supervisor : Conf-No; - permitted-submitters : Conf-No; ! Zero means anybody - super-conf : Conf-No; ! Zero means author - msg-of-day : Text-No; ! Every conf has one - nice : Garb-Nice; - no-of-members : INTEGER; - first-local-no : Local-Text-No; ! Oldest text still stored - no-of-texts : INTEGER; ! How many texts stored -) - -Garb-Nice ::= INTEGER; ! Number of days - -Info ::= ( - version : INTEGER; - conf-pres-conf : Conf-No; ! M|tet Pres (nya) m|ten - pers-pres-conf : Conf-No; ! M|tet Pres (nya) medlemmar - motd-conf : Conf-No; ! M|tet Lappar p} d|rren - kom-news-conf : Conf-No; ! M|tet Nyheter om LysKOM - motd-of-lyskom : Text-No; ! Visas vid login -) - -! kom-types.h defines Info-Datum as the tail in Misc-Info -! kom-types.h defines Info-Type as the selector in Misc-Info - -Local-Text-No ::= INTEGER; - -Mark ::= ( text-no : Text-No; type : INTEGER ) - ! Servern ger sig inte p} att tolka markeringstypen, - ! det {r helt upp till klienten. - -Mark-List ::= ARRAY Mark; - - -Member ::= Pers-No; -Member-List ::= ARRAY Member; -Membership ::= ( - last-time-read : Time; - conference : Conf-No; - priority : INTEGER; - last-text-read : Local-Text-No; - read-texts : ARRAY Local-Text-No; -) - -Membership-List ::= ARRAY Membership; - -Misc-Info ::= SELECTION ( - 0=recpt recipient : Conf-No; ! Mottagare - 1=cc-recpt cc-recipient : Conf-No; ! Extra kopia - 2=comm-to comment-to : Text-No; ! Kommentar till - 3=comm-in commented-in: Text-No; ! Kommentar i - 4=footn-to footnote-to : Text-No; ! Fotnot till - 5=footn-in footnoted-in : Text-No; ! Fotnot i - 6=loc-no local-no : Local-Text-No ! Lokalt textnummer - 7=rec-time received-at : Time; ! Mottaget tid - 8=sent-by sender : Pers-No; ! S{nt av - 9=sent-at sent-at : Time; ! S{nt n{r -! 10=...-recpt ??? ! F|r k{nnedom -) - -Pers-List ::= ARRAY Pers-No; - -Pers-No ::= Conf-no; - -Person ::= ( - username : HOLLERITH; ! E-mail adress - privileges : Priv-Bits; - flags : Personal-Flags; - last-login : Time; ! Eller logout? - user-area : Text-No; - total-time-present : INTEGER; ! I sekunder - sessions : INTEGER; - created-lines : INTEGER; - created-bytes : INTEGER; - read-texts : INTEGER; - no-of-text-fetches : INTEGER; - created-persons : INTEGER; - created-confs : INTEGER; - first-created-local-no : INTEGER; ! Well, local isn't really true but... - no-of-created-texts : INTEGER; ! Numbers of texts in the ARRAY, - ! i.e. not erased ones. - no-of-marks : INTEGER; - no-of-confs : INTEGER; -) ! /mo - -Personal-Flags ::= BITSTRING ( - unread-is-secret; - ! V{rdet 1 betyder att antalet ol{sta texter h}lls hemligt - flg2; flg3; flg4; flg5; flg6; flg7; flg8; -) - -! Se avsnittet ovan om s{kerhetsniv}er och privilegiebittar. -Priv-Bits ::= BITSTRING ( - wheel; admin; statistic; create_pers; create_conf; change_name; - flg7; flg8; flg9; flg10; flg11; flg12; flg13; flg14; flg15; flg16; -) - -! Session-Info {r v{ldigt likt Who-Info. -Session-Info ::= ( - person : Pers-No; - working-conference : Conf-No; - session : Session-No; - what-am-i-doing : HOLLERITH; - username : HOLLERITH; ! user@host - idle-time : INTEGER; ! Sekunder sedan senaste anrop - connection-time : Time; ! Tid och datum f|r uppkoppling - ! Detta {r ej detsamma som login-tid -) - -! Session numbers are unique to each session. A person can have -! more than one session running at the same time. Session numbers -! are assigned starting from 1 up. Session numbers are not reused -! during the lifetime of the server. See Who-Info-List -Session-No ::= INTEGER; - -Text-List ::= ( first-local-no : Local-Text-No; - texts : ARRAY Text-No; ) - -! Text-No is a u_long. -Text-No ::= INTEGER; - -Text-Stat ::= ( - creation-time : Time; - author : Pers-No; - no-of-lines : INTEGER; - no-of-chars : String-Size; - no-of-marks : INTEGER; - misc-info : ARRAY Misc-Info; -) - -! UNIX <time.h> struct tm. No time zone. -Time ::= ( - seconds : INTEGER; ! 0 ... 59 - minutes : INTEGER; ! 0 ... 59 - hours : INTEGER; ! 0 ... 23 - mday : INTEGER; ! 1 ... 31 - month : INTEGER; ! jan = 0 ... dec = 11 - year : INTEGER; ! Sedan 1900 - weekday : INTEGER; ! s|n = 0 ... SAT = 6 - yearday : INTEGER; ! 0 ... 365 - isdst : INTEGER; ! positivt = sommartid, 0 = normaltid -) - -Who-Info-Old ::= ( - person : Pers-No; - what-am-i-doing : HOLLERITH; - working-conference : Conf-No; -) -Who-Info-List-Old ::= ARRAY Who-Info-Old; - -Who-Info ::= ( - person : Pers-No; - working-conference : Conf-No; - session : Session-No; - what-am-i-doing : HOLLERITH; - username : HOLLERITH; ! user@hostname -) - -Who-Info-List ::= ARRAY Who-Info; - - - - Exempel - -Nedan ett exempel fr}n en verklig LysKOM-session. Kommentarer har jag -gett med "!" som i grammatiken. Exemplet {r gammalt och inneh}ller en -del detaljer som senare tagits ur bruk, men det ger {nd} en ide om hur -det r}a protokollet ser ut. - - $ telnet laila 4894 - Trying 130.236.254.12 ... - Connected to laila.lysator.liu.se. - Escape character is '^]'. - A8Haronsson ! Jag k|r protokoll A - LysKOM ! LysKOM svarar - 1 12 13HLars Aronsson ! lookup-name - =1 2 { 8 38 } { 1001 1001 } ! Person 8 eller Person 38 - :3 2 21 7 0H ! Person 21 gick till m|te 7 - :1 1 56 ! Person 56 loggade just ut - 2 0 8 8H******** ! login Person 8 med password - :3 2 8 0 0H ! Person 8 loggade just in - =2 ! login OK - 3 10 23HAntikommunistiskt Forum 0000 - ! Jag skapar ett |ppet m|te - =3 57 ! OK, m|te 57 skapat - 4 1 ! Jag loggar ut - :1 1 8 ! Person 8 loggade just ut - =4 ! logout OK diff --git a/doc/security-levels.txt b/doc/security-levels.txt deleted file mode 100644 index a6a530fa7..000000000 --- a/doc/security-levels.txt +++ /dev/null @@ -1,50 +0,0 @@ -Skriv hit allt som priviligerade kan g|ra! -Siffrorna anger vilken enable-level man m}ste vara p} f|r att f} g|ra saken. - -(Denna fil kanske inte st{mmer med verkligheten. Tyv{rr. Men om Bellman f}r - sin vilja igenom (och det har jag inget emot) s} ska det ju {nd} g|ras om.) - -wheel -0 Kan alltid logga in. -6 Kan s{tta alla Priv_bits f|r alla personer. -7 Kan s{tta password f|r alla personer. -8 [r organisat|r (supervisor) f|r allt. -10 Kan l{sa alla texter. - -admin -2 Kan l{sa status f|r hemliga m|ten/personer. -2 Kan l{sa de skyddade delarna av statusen. -2 Kan l{sa hela text_statusen, {ven hemliga mottagare. -1 Kan l{sa last_login. -4 Kan addera/subtrahera medlemmar. -4 Kan addera/subtrahera mottagare till texter. -5 Kan s{tta superm|te. -5 Kan radera texter. -6 Kan s{tta administrat|r. -3 Kan byta namn p} alla. -1 Kan st{nga av servern. -1 Kan s{tta motd_of_kom. - -statistic -2 Kan l{sa statistikdelarna av Person-structen, {ven om de {r skyddade. - -create_conf (default on) -0 Kan skapa m|ten - -create_pers (default on) -0 Kan skapa personer -********************************************************************* - -Vilka privilegier vill vi ha? - -- L{sa valfria texter -- Alltid f} logga in -- L{sa status f|r valfria texter -- [ndra mottagare f|r valfria texter p} godtyckligt s{tt -- Flytta texter som man f}r l{sa -- F}r {ndra div status f|r godtyckliga m|ten -- F}r {ndra l|senord f|r godtycklig person -- F}r {ndra div status f|r godtycklig person, dock ej priv-bittar -- S{tta priv-bittar -- Skapa personer (default on) -- Skapa m|ten (default on) \ No newline at end of file diff --git a/doc/server-async.extend b/doc/server-async.extend deleted file mode 100644 index 7b48fa6c7..000000000 --- a/doc/server-async.extend +++ /dev/null @@ -1,23 +0,0 @@ -HUR MAN L[GGER TILL ETT ASYNKRONT MEDDELANDE I A-SERVERN - -1) L{gg till det i async.h: typedef enum ... Async. - -2) prot-a-send-async.[hc]: skriv en funktion som skickar iv{g - meddelandet. Gl|m inte att se till att andra argumentet till - async_header verkligen {r antalet element som skickas! (Reglerna - f|r hur man r{knar ut det {r lite skumma. Se s{rskilt upp med - arrayer och structar.) - -3) send-async.[hc]: skriv en funktion som skickar iv{g meddelandet - till l{mpliga clienter. Vissa meddelanden skickas till n{stan alla - klienter. I s} fall ska funktionen loopa |ver alla klienter (se - koden f|r exempel). I andra fall skall meddelandet bara till en - klient. I de fallen ska funktionen {ven ta en (Isc_clientinfo *) - som argument. - -4) Se till att skicka meddelandet p} l{mpliga st{llen. - -Local Variables: -mode:indented-swedish -eval:(auto-fill-mode 1) -End: diff --git a/doc/server.extend b/doc/server.extend deleted file mode 100644 index 690140223..000000000 --- a/doc/server.extend +++ /dev/null @@ -1,65 +0,0 @@ -ATT L[GGA TILL EN NY FUNKTION - -F|r att l{gga till en ny funktion beh|ver f|ljande {ndringar g|ras: -(Det ser kanske mycket ut, men i praktiken s} {r det inte s} jobbigt) - - 1) Deklarera funktionen i services.h. - - 2) Deklarera funktionen i server/fncdef.txt. L{gg alltid nya funktioner - sist s} att gamla klienter fortfarande fungerar. - - 2a) Om funktionen tar en inparameter av en typ som inte finns - n{mnd i fncdef.txt s} m}ste {ndringar ske i - - server/call-switch.awk - server/parse-arg-c.awk - server/isc-server.h Definitionen av Isc_clientinfo ska - ut|kas med ett f{lt d{r man kan - lagra det parseade f{ltet. - server/isc-parse.c Skriv en funktion f|r att parsea. - server/isc-parse.h - - 2b) Om funktionen tar f|r m}nga inparametrar av typen num, - string eller c_string s} m}ste man {ndra - - server/isc-server.h Definitionen av Isc_clientinfo - - 2c) Om funktionen har en utparameter av en annan typ {n de som redan - finns: - - server/prot-a.c: L{gg till en rad i switchen i prot_a_reply. - server/connections.h: L{gg till typen i Res_type och - Result_holder. - server/prot-a-output.c: skriv en funktion f|r att skriva - ut ett objekt. - server/prot-a-output.h - - 3) Skriv funktionen i l{mplig fil i server-direktoryt. De som finns att - v{lja p} n{r detta skrivs {r - - admin.c, conference.c, membership.c, person.c, session.c, text.c - - 4) L{gg till funktionsnamnet i prot_a_is_legal_fnc() i server/prot-a.c. - - 5) Kompilera om servern med 'make' i server/. - - 6) Skapa funktionsstubbar i kommunikationsdelen i filerna - - isc-client/services.c - isc-client/input.c Om nya komplicerade datatyper. - isc-client/input.h - isc-client/output.c - isc-client/output.h - - 7) Om du har nya datatyper skall funktioner f|r att parsea/skriva - dom definieras i - isc-client/isc-parse.c - isc-client/isc-parse.h - isc-client/isc-output.c - isc-client/isc-output.h - - 8) Skapa libyskom.a med 'make ar' i isc-client/. - - 9) Implementera de nya kommandona i klienterna. -I protokoll B kommer det (om lacgen n}gonsin blir klart) att bli -mycket enklare. diff --git a/doc/skeleton.doc b/doc/skeleton.doc deleted file mode 100644 index fcd4fa1ab..000000000 --- a/doc/skeleton.doc +++ /dev/null @@ -1,13 +0,0 @@ - - - LysKOM-Projektet - -------------------------------- - Titel p} dokumentet - -------------------------------- - av Nisse Gandhi - <nisgan@lysator.liu.se> - 1 april 1990 - - - -H{r b|rjar texten... diff --git a/foo b/foo deleted file mode 100644 index e69de29bb..000000000 diff --git a/scripts/Depend.make b/scripts/Depend.make deleted file mode 100644 index 7f21f9e84..000000000 --- a/scripts/Depend.make +++ /dev/null @@ -1,19 +0,0 @@ -depend: - ${SED} '/^# OBJECTS: @@@* #$$/q' Makefile > temp-Makefile - echo '# This line is generated by "make depend"'>>temp-Makefile - echo -n 'OBJECTS = ' >>temp-Makefile - ls *.c | ${AWK} 'BEGIN { pos = 10; } \ - { sub(/\.c$$/, ".o"); \ - pos += length($$0) + 1; \ - if (pos >= 75) \ - { printf("\\\n\t"); \ - pos = 9 + length($$0); \ - } \ - printf ("%s ", $$0); \ - }' >>temp-Makefile - echo >>temp-Makefile - ${SED} '/^# RULES: @@@* #$$/,/^# DEPENDENCIES: @@@* #$$/!d' \ - Makefile >>temp-Makefile - echo >>temp-Makefile - gcc -M -DCLIENT ${INCLUDES} *.c >>temp-Makefile - mv temp-Makefile Makefile diff --git a/scripts/List-Files b/scripts/List-Files deleted file mode 100755 index 292acbf6a..000000000 --- a/scripts/List-Files +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -# Lists the differences between the file 'FileList' and what's -# actually in the current directory. - -# Change to the directory specified as first parameter. -cd ${1-.} - -# Get the names of some temporary files. -FILE1=/tmp/LysKOM.$$.fl # The files in 'FileList' -FILE2=/tmp/LysKOM.$$.ls # The files in this directory - -# First find out what files are described in 'FileList'. -egrep '^\*' FileList | sed 's/^\* //' >$FILE1 - -# Find the files in this directory that we are interested in. -# Remove trailing *'s, since those are generated by 'ls -F' -# Files ending in .o and ~ are not interesting either. -ls -F | sed 's/\*$//' | egrep -v '\.o$|~$' | sort -f >$FILE2 - -# Then compare that list to the output from 'ls(1)' -diff $FILE1 $FILE2 - -# Clean up -rm $FILE1 $FILE2 diff --git a/scripts/Makefile b/scripts/Makefile deleted file mode 100644 index 6da10fa0a..000000000 --- a/scripts/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -TOPDIR = /usr/lyskom -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -all:; -depend:; -install:; -includes:; -libraries:; -binaries:; - - -clean: - $(RM) *~ core diff --git a/scripts/Parallell-depend.make b/scripts/Parallell-depend.make deleted file mode 100644 index 7d9852186..000000000 --- a/scripts/Parallell-depend.make +++ /dev/null @@ -1,26 +0,0 @@ -depend: temp-A-Makefile temp-B-Makefile temp-C-Makefile \ - temp-D-Makefile temp-E-Makefile - rm -f dependencies - cat temp-?-Makefile >dependencies - rm temp-?-Makefile temp-?-files - echo depend ready. - -temp-A-Makefile: c-indexes specials - -$(CC) -M $(CFLAGS) `cat temp-A-files` >temp-A-Makefile - -temp-B-Makefile: c-indexes specials - -$(CC) -M ${CFLAGS} `cat temp-B-files` >temp-B-Makefile - -temp-C-Makefile: c-indexes specials - -$(CC) -M ${CFLAGS} `cat temp-C-files` >temp-C-Makefile - -temp-D-Makefile: c-indexes specials - -$(CC) -M ${CFLAGS} `cat temp-D-files` >temp-D-Makefile - -temp-E-Makefile: c-indexes specials - -$(CC) -M ${CFLAGS} `cat temp-E-files` >temp-E-Makefile - -c-indexes: - ls *.c|${AWK} '{ a[i++] = $$1; } \ - END { for ( j = 0; j < i; j++ ) \ - print a[j] > sprintf("temp-%c-files", 65 + j % 5); } diff --git a/scripts/RCS-depend.make b/scripts/RCS-depend.make deleted file mode 100644 index 328384275..000000000 --- a/scripts/RCS-depend.make +++ /dev/null @@ -1,27 +0,0 @@ -depend: temp-A-Makefile temp-B-Makefile temp-C-Makefile temp-D-Makefile \ - temp-E-Makefile - rcs -l dependencies - rm -f dependencies - cat temp-?-Makefile >dependencies - rm temp-?-Makefile temp-?-files - echo " " | ci dependencies - -temp-A-Makefile: c-indexes - gcc -M ${TARGET} ${INCLUDES} `cat temp-A-files` >temp-A-Makefile - -temp-B-Makefile: c-indexes - gcc -M ${TARGET} ${INCLUDES} `cat temp-B-files` >temp-B-Makefile - -temp-C-Makefile: c-indexes - gcc -M ${TARGET} ${INCLUDES} `cat temp-C-files` >temp-C-Makefile - -temp-D-Makefile: c-indexes - gcc -M ${TARGET} ${INCLUDES} `cat temp-D-files` >temp-D-Makefile - -temp-E-Makefile: c-indexes - gcc -M ${TARGET} ${INCLUDES} `cat temp-E-files` >temp-E-Makefile - -c-indexes: sources - echo ${SRCS}|tr " " \\012 |${AWK} '{ a[i++] = $$1; } \ - END { for ( j = 0; j < i; j++ ) \ - print a[j] > sprintf("temp-%c-files", 65 + j % 5); } diff --git a/scripts/Summarize-Headers b/scripts/Summarize-Headers deleted file mode 100755 index ca5a05c32..000000000 --- a/scripts/Summarize-Headers +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -# Summarize a .h file - -# Since we write our .h files with documentation in line, they -# tend to get rather long, and it gets somewhat difficult to get -# a quick overview of what functions are declared in the file. -# This script cuts out all the "unnecessary" information. - -AWK=gawk - -$AWK '/^[ \t]*#[ \t]*define/ { print $0 ; - define = 1 ; - next ; - } - define != 0 { if (substr($0, length(), 1) == "\\") - { - printf ("\n") ; - next ; - } - else { - printf ("\n") ; - define = 0 ; - next ; - } - } - /^\/\*/,/\*\/$/ { printf ("\n") ; - next ; - } - /\/\// { next ; } - (define == 0) && \ - (comment == 0) { print $0 ; } - /\/\*/ { comment = 1 ; } - /\*\// { comment = 0 ; } -' $1 | -$AWK 'BEGIN { blank_lines = 0; } - $1 == "" { if (blank_lines++ == 0) - print $0; - } - $1 != "" { print $0; - blank_lines = 0; - } -' diff --git a/scripts/import.make b/scripts/import.make deleted file mode 100644 index 25420ee59..000000000 --- a/scripts/import.make +++ /dev/null @@ -1,51 +0,0 @@ -# This file is included by all Makefiles in the LysKOM hierarchy. -# It gives default values for all variables that is normally used. -# TOPDIR and SCRIPTDIR must be set before this file is included. -# If any of the variables are defined in the environment, that value -# will override the value that is set here. -# -# ceder is guilty. -# - -SHELL=/bin/sh -AWK = gawk -SED = /usr/bin/sed -CC = gcc -ansi -RM = /usr/gnu/bin/rm -vf - -INCLUDEDIR = $(TOPDIR)/include -LIBDIR = $(TOPDIR)/lib -ANSIDIR = $(INCLUDEDIR)/ansi - -INCLUDES = -I$(ANSIDIR) -I$(INCLUDEDIR) -OPTIMIZE-FLAGS = -O -MISC-CFLAGS = -g -Wall -PIPE = -pipe - -# -h flag makes NULL pointer references generate runtime errors -LDFLAGS = -h -L$(LIBDIR) - -CFLAGS = $(INCLUDES) $(OPTIMIZE-FLAGS) $(MISC-CFLAGS) $(PIPE) $(TARGET) - -# LysKOM executables that the typical user don't use go here. -# (The server, dbck, et c) - -LYSKOMSYSBIN = /usr/lyskom/bin - -# User executables (such as lyskom, kompost et c) - -LYSKOMUSRBIN = /usr/local/bin - -EXPORTS = CC="${CC}" SHELL="${SHELL}" AWK="${AWK}" SED="${SED}" \ - RM="${RM}" INCLUDEDIR="${INCLUDEDIR}" LIBDIR="${LIBDIR}" \ - ANSIDIR="${ANSIDIR}" INCLUDES="${INCLUDES}" \ - OPTIMIZE-FLAGS="${OPTIMIZE-FLAGS}" \ - MISC-CFLAGS="${MISC-CFLAGS}" PIPE="${PIPE}" \ - LDFLAGS="${LDFLAGS}" CFLAGS="${CFLAGS}" \ - LYSKOMSYSBIN="${LYSKOMSYSBIN}" LYSKOMUSRBIN="${LYSKOMUSRBIN}" \ - TOPDIR="${TOPDIR}" SCRIPTDIR="${SCRIPTDIR}" AR="${AR}" \ - ARFLAGS="${ARFLAGS}" - -# The Makefiles also dependes on the variables -# AR, ARFLAGS -# that are automatically set by GNU Make. diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index bdeabed4a..000000000 --- a/src/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -# All directories that make should traverse to when doing clean etc. - -SUBDIRS = include libraries server komutils clients - -all: includes libraries binaries - -includes: - for i in $(SUBDIRS) ; \ - do \ - echo making includes in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) includes) \ - done - - -.PHONY: libraries -libraries: - for i in $(SUBDIRS) ; \ - do \ - echo making libraries in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) libraries) \ - done - - -binaries: - for i in $(SUBDIRS) ; \ - do \ - echo making binaries in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) binaries) \ - done - - -install: - for i in $(SUBDIRS) ; \ - do \ - echo making install in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) install) \ - done - - -depend: - for i in $(SUBDIRS) ; \ - do \ - echo making depend in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) depend) \ - done - - -clean: - $(RM) *~ core - for i in $(SUBDIRS); \ - do \ - echo making clean in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) clean) \ - done diff --git a/src/include/Makefile b/src/include/Makefile deleted file mode 100644 index 87a2e431b..000000000 --- a/src/include/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -TARGET = -DCLIENT - -SUBDIRS = ansi server - -INSTALL-HDRS = $(wildcard *.h) - -all: includes libraries binaries - -libraries:; -binaries:; - - -.PHONY : includes -includes: - for i in $(INSTALL-HDRS);\ - do \ - cmp $$i $(INCLUDEDIR)/$$i || cp $$i $(INCLUDEDIR)/$$i; \ - done - for i in $(SUBDIRS); \ - do \ - echo making includes in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) includes); \ - done - -clean: - $(RM) *~ core temp-Makefile Distfile *.o - for i in $(SUBDIRS); \ - do \ - echo making clean in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) clean); \ - done - -depend:; \ No newline at end of file diff --git a/src/include/compiler.h b/src/include/compiler.h deleted file mode 100644 index ceeb6583d..000000000 --- a/src/include/compiler.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * compiler.h - * Defines different macros depending on the compiler to - * portably use features of different compilers, like the - * '__inline__' keyword in GCC. - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - -#ifndef SPECIAL_H_ALREADY_INCLUDED__ -#define SPECIAL_H_ALREADY_INCLUDED__ - - -#ifdef __GNUC__ - -# define Inline __inline__ /* Inline function */ -# define Volatile volatile /* Function does not return */ - -#else - -# define Inline -# define Volatile - -#endif - - -#endif /* SPECIAL_H_ALREADY_INCLUDED__ */ diff --git a/src/include/config.h b/src/include/config.h deleted file mode 100644 index 171752e25..000000000 --- a/src/include/config.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * config.h - * - * Configuration parameters for compiling. Contains among other - * things all the stupid limits you really want to be without, all the - * smart limits that has to be there to make it impossible to crash - * the server, and lots of constants and configuration options. - */ - - -#define DEBUG /* We're still debugging and want traces. */ - -/* - * Add some checks that really shouldn't be necessary. - */ -#define DEFENSIVE_CHECKS - - -/* Collating sequence used. */ -#define DEFAULT_COLLAT_TAB swedish_collate_tab - - - -/* The file kom_perror prints to. */ -/* Yes! This should be stdout. At least during testing and debugging! /ceder */ - -#define kom_errout stdout - -/* - * Security options (these must be #defines since they are used inside a - * 'const' definition in kom-types.c). - */ -#define ANYONE_CAN_CREATE_NEW_PERSONS TRUE /* Can a created person */ - /* create other persons? */ -#define CREATE_PERSON_BEFORE_LOGIN TRUE /* Can a person create himself? */ -#define ANYONE_CAN_CREATE_NEW_CONFS TRUE -#define DEFAULT_CHANGE_NAME TRUE /* Everyone is normally allowed */ - /* to change their own name. */ - -/* - * The following are constants which can not be changed without rewriting - * some of the code. - */ -#define PROTOCOL_NUMBER_BASE 10 /* The number base used in all communication - * between server and clients. */ - - -/* Where to save things. These are used by ramkomd. */ - -extern const char *DEFAULT_DBASE_DIR; -extern const char *DATAFILE_NAME; -extern const char *BACKUPFILE_NAME; -extern const char *TEXTFILE_NAME; -extern const char *STATISTIC_NAME; -extern const char *PID_NAME; -extern const char *MEMUSE_NAME; - -/* Communications */ - -extern const char * DEFAULT_CLIENT_SERVICE; -extern const char * DEFAULT_MUX_SERVICE; - -#if 0 -extern const int IN_CLIENT_PORT; /* Which port does LysKOM listen to? */ -extern const int IN_MUX_PORT; /* Which port does LysKOM listen to? */ -#endif - -/* - * The following should always be true: - * SYNCTIMEOUT <= GARBTIMEOUT <= TIMEOUT - * Times in milliseconds. - */ -extern const int TIMEOUT; /* Timeout to select() when totally idle. */ -extern const int GARBTIMEOUT; /* Timeout to select() when garbing texts - but not syncing. */ -extern const int SYNCTIMEOUT; /* Timeout to select() when syncing. */ - -extern const int GARB_INTERVAL; /* In minutes. */ -extern const int SYNC_INTERVAL; /* In minutes. */ -extern const int SYNC_RETRY_INTERVAL; /* In minutes. */ - -/* Size of the cache. (only applies to diskomd). */ - -extern const int CACHE_CONFERENCES; -extern const int CACHE_PERSONS; -extern const int CACHE_TEXT_STATS; - -/* String limits */ - -extern const int CONF_NAME_LEN; /* Conference (and Person) name */ -extern const int PWD_LEN; /* Password. It is not guaranteed that all - chars are significant. */ -extern const int WHAT_DO_LEN; /* what_am_i_doing */ -extern const int USERNAME_LEN; /* Max login-id from clients */ -extern const int TEXT_LEN; /* Max len of a text. */ -extern const int BROADCAST_LEN; /* Max len of a broadcast message */ - -/* Text_stat limits */ - -extern const int MAX_MARKS_PERSON; /* Max marks per person */ -extern const int MAX_MARKS_TEXT; /* Max marks per text */ -extern const int MAX_RECIPIENTS; /* Max recipients/cc_recipients per text */ -extern const int MAX_COMM; /* Max number of comments to a text */ -extern const int MAX_FOOT; /* Max number of footnotes to a text */ -extern const int MAX_CREA_MISC; /* Sum of recipients, cc_recipients, comm_to - * and footn_to must not exceed MAX_CREA_MISC - * when the text is created. */ - -/* - * Some other limits - */ -extern const int MAX_NO_OF_CONNECTIONS; /* the maximum number of persons - * that can use Kom simultaneously */ -extern const int MARK_AS_READ_CHUNK; /* You can't mark more than this many - * texts as read in one call. */ - -/* - * Max number of nested super_confs a message will be forwarded before - * the server gives up. - */ -extern const int MAX_SUPER_CONF_LOOP; - - -extern const int DEFAULT_NICE; /* Number of days a text normally lives. */ - -/* Max entries in the per-client transmit queue */ -extern const int MAXQUEUEDSIZE; - -/* Max entries in the per-client transmit queue to send at any one time */ -extern const int MAXDEQUEUELEN; - -/* What is whitespace? */ -extern const unsigned char *WHITESPACE; diff --git a/src/include/debug.h b/src/include/debug.h deleted file mode 100644 index 312a3ec96..000000000 --- a/src/include/debug.h +++ /dev/null @@ -1,14 +0,0 @@ -#include "config.h" /* DEBUG is defined there */ -#ifdef DEBUG -#define BUG(s) if (buglevel > 0) printf s ; -#define VBUG(s) if (buglevel > 1) printf s ; -#define BUGSTR(str) if (buglevel > 0) s_puts(str) -#define VBUGSTR(str) if (buglevel > 1) s_puts(str) -#define BUGDECL extern int buglevel -#else -#define BUG(s) -#define VBUG(s) -#define BUGSTR(str) -#define VBUGSTR(str) -#define BUGDECL -#endif diff --git a/src/include/dependencies b/src/include/dependencies deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/include/kom-errno.h b/src/include/kom-errno.h deleted file mode 100644 index 4588c5dc5..000000000 --- a/src/include/kom-errno.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * kom_errno.h - * - * Created by ceder 1990-04-18 - * - * The values that kom_errno can take. - */ - - -#ifndef _KOM_ERRNO_ALREADY_INCLUDED__ -#define _KOM_ERRNO_ALREADY_INCLUDED__ - -#include <sys/types.h> - - -typedef enum -{ - KOM_NO_ERROR = 0, /* No error has occured */ - KOM_NOT_IMPL = 2, /* Not implemented yet */ - KOM_OBSOLETE = 3, /* No longer implemented */ - KOM_PWD = 4, /* Wrong/illegal password */ - KOM_LONG_STR = 5, /* String too long */ - KOM_LOGIN = 6, /* Not logged in. */ - KOM_LOGIN_DISALLOWED = 7, /* System is in 'singel-user mode' */ - KOM_CONF_ZERO = 8, /* Attempt to use conference number 0. */ - KOM_UNDEF_CONF = 9, /* Undefined or secret conference */ - KOM_UNDEF_PERS = 10, /* Undefined or secret person */ - KOM_ACCESS = 11, /* No 'read/write permission' */ - KOM_PERM = 12, /* No permission */ - KOM_NOT_MEMBER = 13, /* Not member in conf */ - KOM_NO_SUCH_TEXT = 14, /* No such global text_no, or no access */ - KOM_TEXT_ZERO = 15, /* Can't use text no 0 */ - KOM_NO_SUCH_LOCAL_TEXT = 16, /* No such local text_no */ - KOM_LOCAL_TEXT_ZERO = 17, /* Can't use local text no 0 */ - KOM_BAD_NAME = 18, /* Too short/long or contains illegal chars */ - KOM_INDEX_OUT_OF_RANGE = 19, /* */ - KOM_CONF_EXISTS = 20, /* Already exists */ - KOM_PERS_EXISTS = 21, /* Already exists */ - KOM_SECRET_PUBLIC = 22, /* Cannot be secret and !rd_prot */ - KOM_LETTER_BOX = 23, /* Cannot change letter_box flag */ - KOM_LDB_ERR = 24, /* Should never happen, unless Willf|r makes - * a mistake. */ - KOM_ILL_MISC = 25, /* Illegal misc field. - err_stat holds field no */ - - KOM_ILLEGAL_INFO_TYPE = 26, /* Info_type parameter was illegal. This - means that there is a bug in the client. */ - KOM_ALREADY_RECIPIENT = 27, /* Already recipient to this text. */ - KOM_ALREADY_COMMENT = 28, /* Already comment to this text. */ - KOM_ALREADY_FOOTNOTE = 29, /* Already footnote to this text. */ - KOM_NOT_RECIPIENT = 30, /* Not recipient */ - KOM_NOT_COMMENT = 31, /* Not comment to this text. */ - KOM_NOT_FOOTNOTE = 32, /* Not footnote to this text. */ - KOM_RECIPIENT_LIMIT = 33, /* Too many recipients */ - KOM_COMM_LIMIT = 34, /* Too many comments */ - KOM_FOOT_LIMIT = 35, /* Too many footnotes */ - KOM_MARK_LIMIT = 36, /* Too many marks. */ - KOM_NOT_AUTHOR = 37, /* Only the author may add footnotes or - delete texts. */ - - - KOM_NO_CONNECT = 38, /* Can't connect to specified server */ - KOM_OUT_OF_MEMORY = 39, /* Couldn't get memory for result */ - KOM_SERVER_IS_CRAZY = 40, /* Client can't understand server */ - KOM_CLIENT_IS_CRAZY = 41, /* Client thinks that server says it can't - * understand client. */ - KOM_UNDEF_SESSION = 42, /* No such session exists. */ - not_used /* Det {r jobbigt att flytta kommatecknet hela - tiden... :-) /ceder */ -} Kom_err; - - -extern Kom_err kom_errno; - - -extern u_long err_stat; /* Additional information about the error */ - -/* - * print a short description of the error to stdout - */ - -void -kom_perror(void); - - -#endif /* _KOM_ERRNO_ALREADY_INCLUDED__ */ diff --git a/src/include/kom-types.h b/src/include/kom-types.h deleted file mode 100644 index 9b41a07e7..000000000 --- a/src/include/kom-types.h +++ /dev/null @@ -1,533 +0,0 @@ -/* - * KOM-types.h -- Types used by both server and client of LysKOM - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - - -#ifndef KOM_TYPES_H_ALREADY_INCLUDED__ - -#define KOM_TYPES_H_ALREADY_INCLUDED__ - -#ifndef SERVER -# ifndef CLIENT -# error must define SERVER or CLIENT -# endif -#else -# ifdef CLIENT -# error must not define both SERVER and CLIENT -# endif -#endif /* !SERVER */ - -#include <sys/types.h> -#include <limits.h> -#include <time.h> - -#include <s-string.h> -#include "misc-types.h" - - -typedef u_short Pers_no; -typedef u_short Conf_no; -typedef u_long Text_no; -typedef u_long Local_text_no; -typedef u_long Session_no; - -#define MAX_PERS_NO ((Pers_no) USHRT_MAX) -#define MAX_CONF_NO ((Conf_no) USHRT_MAX) -#define MAX_TEXT_NO ((Text_no) ULONG_MAX) -#define MAX_LOCAL_TEXT_NO ((Local_text_no) ULONG_MAX) - - - -#ifdef SERVER - #define PASSWD_LEN 64 - typedef char Password[PASSWD_LEN]; - typedef off_t Text_index; - typedef time_t Time; -# define NULL_TIME_i ((Time) 0) - -#else /* CLIENT */ - typedef struct tm Time; -# define NULL_TIME_i ((Time) { 0 }) - -#endif - - - -/* - * The privilige bits: says what priviliges a person has. E g - * if he is allowed to read texts he normally shouldn't be allowed - * to read. See file doc/security-levels.txt - */ -typedef struct { - u_int wheel : 1; - u_int admin : 1; - u_int statistic : 1; - u_int create_pers: 1; - u_int create_conf: 1; - u_int change_name: 1; - u_int flg7 : 1; /* For future use. */ - u_int flg8 : 1; - u_int flg9 : 1; - u_int flg10 : 1; - u_int flg11 : 1; - u_int flg12 : 1; - u_int flg13 : 1; - u_int flg14 : 1; - u_int flg15 : 1; - u_int flg16 : 1; -} Priv_bits; - -#ifdef SERVER -# define DEFAULT_PRIV_BITS_i ((Priv_bits) \ - { 0, 0, 0, ANYONE_CAN_CREATE_NEW_PERSONS, \ - ANYONE_CAN_CREATE_NEW_CONFS, \ - DEFAULT_CHANGE_NAME, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0 \ - }) -#else -# define DEFAULT_PRIV_BITS_i ((Priv_bits) \ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0 \ - }) -#endif -extern const Priv_bits DEFAULT_PRIV_BITS; - - - -/* - * Flags in the Person struct. - */ -typedef struct { - u_int unread_is_secret : 1;/* FALSE if everyone is allowed to ask how */ - /* many unread texts you have. */ - u_int flg2 : 1; - u_int flg3 : 1; - u_int flg4 : 1; - u_int flg5 : 1; - u_int flg6 : 1; - u_int flg7 : 1; - u_int flg8 : 1; -} Personal_flags; - -#define DEFAULT_PERSONAL_FLAGS_i ((Personal_flags) \ - { 0, 0, 0, 0, 0, 0, 0, 0 }) -extern const Personal_flags DEFAULT_PERSONAL_FLAGS; - - - -/* See file doc/misc_items */ -typedef enum { recpt = 0, /* 0 Recipient (conference) */ - cc_recpt = 1, /* 1 Carbon Copy recipient (extra kopia) */ -#if 0 - ..._recpt =10, /* 10 ...recipient (F|r k{nnedom) */ -/* Vad ska det heta p} engelska? */ -/* Please let this be a comment otherwise etags voids this file. */ -#endif - comm_to = 2, /* 2 Comment to (text) */ - comm_in = 3, /* 3 Commented in (text) */ - footn_to = 4, /* 4 This is a footnote to (text) */ - footn_in = 5, /* 5 Footnote to this text in (text) */ - - - loc_no = 6, /* 6 Sequence number within conference */ - rec_time = 7, /* 7 Received at (time) */ - sent_by = 8, /* 8 Sent by (person) */ - sent_at = 9 /* 9 Sent at (time) */ -} Info_type; - -typedef union { - Conf_no recipient; - Conf_no cc_recipient; - Local_text_no local_no; - Time received_at; - Text_no comment_to; - Text_no commented_in; - Text_no footnote_to; - Text_no footnoted_in; - Pers_no sender; - Time sent_at; -} Info_datum; - - -/* This struct contains miscellaneous information about a text. */ -typedef struct { - Info_type type; - Info_datum datum; -} Misc_info; - - -/* Fields of this type is supposed to tell the garbage collector - * which texts it should remove first. - */ -typedef u_long Garb_nice; - - -/* Struct for text status */ -typedef struct { - Time creation_time; -#ifdef SERVER - long file_pos; /* Start of the text in the text file. */ -#endif - Pers_no author; - u_short no_of_lines; - String_size no_of_chars; - u_short no_of_marks; /* Antal markeringar */ - u_short no_of_misc; /* Recipients, times, comments, ... */ - Misc_info * misc_items; /* List of miscellaneous info. */ -} Text_stat; - -#ifdef SERVER -#define EMPTY_TEXT_STAT_i ((Text_stat) \ - { NULL_TIME_i, 0, 0, 0, 0, 0, 0, NULL }) -#else -#define EMPTY_TEXT_STAT_i ((Text_stat) \ - { NULL_TIME_i, 0, 0, 0, 0, 0, NULL }) -#endif - -extern const Text_stat EMPTY_TEXT_STAT; - - - -typedef struct { - u_int rd_prot : 1; /* !(Can anyone become a member?) */ - u_int original : 1; /* Comments forbidden? */ - u_int secret : 1; /* Secret conference? */ - /* Note: if a letterbox is secret it - * will be very hard for that person - * to log in, since he can't map his - * name to a pers_no. He must either - * know his pers_no, or have another - * identity which is his supervisor. - */ - u_int letter_box : 1; /* Is this a letter box? */ -} Conf_type; - -#define NULL_CONF_TYPE_i ((Conf_type) { 0, 0, 0, 0 }) -extern const Conf_type NULL_CONF_TYPE; - - - -typedef struct { - Pers_no member; -} Member; - - - -/* Struct for marks */ -typedef struct { - Text_no text_no; - u_char mark_type; /* It's up to the clients to decide the - meaning of this field. */ -} Mark; - - - -/* Information about a person's membership in a conference */ -typedef struct { - Conf_no conf_no; - u_char priority; /* Interrupt priority */ - Time last_time_read; /* Updated every time a text in this - conf. is marked as read. */ - Local_text_no last_text_read; /* All texts before and inclusive this - are read */ - u_short no_of_read; - Local_text_no * read_texts; /* Texts after last_text_read. Sorted - in ascending order */ -} Membership; - -#define EMPTY_MEMBERSHIP_i ((Membership) \ - { 0, 0, NULL_TIME_i, 0, 0, NULL }) -extern const Membership EMPTY_MEMBERSHIP; - - - -/* Some structs to handle variable-sized arrays. */ - -typedef struct { - u_short no_of_marks; - Mark * marks; /* Pointer to an array of marks. */ -} Mark_list; - -#define EMPTY_MARK_LIST_i ((Mark_list) { 0, NULL }) -extern const Mark_list EMPTY_MARK_LIST; - - -typedef struct { - u_short no_of_confs; - Conf_no *conf_nos; -} Conf_no_list; - -#define EMPTY_CONF_NO_LIST_i ((Conf_no_list) { 0, NULL }) -extern const Conf_no_list EMPTY_CONF_NO_LIST; - - -typedef struct { - u_short no_of_members; - Member * members; -} Member_list; - -#define EMPTY_MEMBER_LIST_i ((Member_list) { 0, NULL }) -extern const Member_list EMPTY_MEMBER_LIST; - - - -typedef struct { - Local_text_no first_local_no; - u_long no_of_texts; - Text_no * texts; -} Text_list; - -#define EMPTY_TEXT_LIST_i ((Text_list) { 1, 0, NULL }) -extern const Text_list EMPTY_TEXT_LIST; - - - -/* A list of conference numbers, also telling if it is a - * mailbox (i e a person) or an ordinary conference. */ -/* Delete this ugly variant as soon as possible! */ -typedef struct { - u_long no_of_conf_nos; - Conf_no * conf_nos; - Conf_type * type_of_conf; -} Conf_list_old; -/* This is the way it should look! */ -typedef struct { - Conf_no conf_no; - Conf_type type; -} Micro_conf; - -typedef struct { - u_long no_of_confs; - Micro_conf * confs; -} Conf_list; - - -#define EMPTY_CONF_LIST_OLD_i ((Conf_list_old) { 0, NULL, NULL }) -extern const Conf_list_old EMPTY_CONF_LIST_OLD; - -#define EMPTY_CONF_LIST_i ((Conf_list) { 0, NULL }) -extern const Conf_list EMPTY_CONF_LIST; - - -/* A list of person numbers */ -typedef struct { - u_long no_of_persons; - Pers_no * persons; -} Pers_list; - -#define EMPTY_PERS_LIST_i ((Pers_list) { 0, NULL }) -extern const Pers_list EMPTY_PERS_LIST; - - - -typedef struct { - u_short no_of_confs; - Membership * confs; -} Membership_list; - -#define EMPTY_MEMBERSHIP_LIST_i ((Membership_list) { 0, NULL }) -extern const Membership_list EMPTY_MEMBERSHIP_LIST; - - - -/* The Info struct */ -typedef struct { - long version; - Conf_no conf_pres_conf; /* Presentation of new confs */ - Conf_no pers_pres_conf; /* Presentation of new persons */ - Conf_no motd_conf; /* Conf that receive motds */ - Conf_no kom_news_conf; /* News about kom */ - Text_no motd_of_lyskom; /* To be displayed after login */ - /* and maybe more... */ -} Info; - - - -typedef struct { - Pers_no creator; - Time creation_time; - Text_no presentation; - Conf_no supervisor; /* Organisat|r f|r m|tet */ - Conf_no permitted_submitters; /* People who are allowed - to submit texts to this conf. - 0 -> anyone may submit. */ - Conf_no super_conf; /* Send unallowed submissions to - the super_conf. - 0 -> unallowed submissions bounce */ - Conf_type type; /* secret, rd_prot etc */ - Time last_written; /* Time of latest text in this conf. */ - Text_no msg_of_day; /* Message to be displayed when this - conf is referenced by the user. */ - Garb_nice nice; /* How long do texts in this - conf live? */ - String name; /* Name of conference */ -#ifdef CLIENT - u_short no_of_members; - Local_text_no first_local_no; - u_long no_of_texts; -#else - Member_list members; /* List of members in conf */ - Text_list texts; /* List of texts */ -#endif -} Conference; - - -#ifdef CLIENT -# define EMPTY_CONFERENCE_i ((Conference) \ - { 0, NULL_TIME_i, 0, 0, 0, 0, NULL_CONF_TYPE_i, \ - NULL_TIME_i, 0, 0, EMPTY_STRING_i, 0, 0, 0 \ - }) -#else /* SERVER */ -# define EMPTY_CONFERENCE_i ((Conference) \ - { 0, NULL_TIME_i, 0, 0, 0, 0, NULL_CONF_TYPE_i, \ - NULL_TIME_i, 0, 0, EMPTY_STRING_i, \ - EMPTY_MEMBER_LIST_i, EMPTY_TEXT_LIST_i \ - }) -#endif /* SERVER */ -extern const Conference EMPTY_CONFERENCE; - - -#ifdef SERVER -typedef struct { - String name; /* Name of conference */ - Conf_type type; /* secret, rd_prot etc */ - Local_text_no highest_local_no; /* highest local text no */ - Garb_nice nice; /* Number of days to live */ -} Small_conf; - -#define EMPTY_SMALL_CONF_i ((Small_conf){EMPTY_STRING_i, NULL_CONF_TYPE_i, \ - 0, 0}); - -extern const Small_conf EMPTY_SMALL_CONF; -#endif - - -/* Struct for persons */ -typedef struct { - Text_no user_area; /* Misc info the clients might want to - store. 0 = not used. */ - Priv_bits privileges; - Personal_flags flags; - Time last_login; /* Or logout */ - u_long total_time_present; /* Number of seconds. */ - u_long sessions; /* Number of sessions */ - u_long created_lines; /* No. of created lines (statistics) */ - u_long created_bytes; /* No. of created bytes (statistics) */ - u_long read_texts; /* No. of read texts (statistics) */ - u_long no_of_text_fetches; /* (statistics) */ - u_short created_persons; /* (statistics) */ - u_short created_confs; /* (statistics) */ - String username; /* User-name & hostname */ -#ifdef CLIENT - Local_text_no first_created_text; /* The first text that still - * exists. */ - u_long no_of_created_texts; - u_short no_of_marks; /* This many marked texts */ - u_short no_of_confs; /* Member in this many confs */ -#else /* SERVER */ - Text_list created_texts; - Mark_list marks; /* List of marked texts */ - Membership_list conferences; /* List of conferences the person is - * a member in. */ - Password pwd; /* Encrypted password */ -#endif -} Person; - -#ifdef SERVER -# define EMPTY_PERSON_i ((Person) \ - { 0, DEFAULT_PRIV_BITS_i, \ - DEFAULT_PERSONAL_FLAGS_i, NULL_TIME_i, 0, 0, \ - 0, 0, 0, 0, 0, 0, EMPTY_STRING_i, \ - EMPTY_TEXT_LIST_i, EMPTY_MARK_LIST_i, \ - EMPTY_MEMBERSHIP_LIST_i, "\001password" \ - }) -#else -# define EMPTY_PERSON_i ((Person) \ - { 0, DEFAULT_PRIV_BITS_i, \ - DEFAULT_PERSONAL_FLAGS_i, NULL_TIME_i, 0, 0, \ - 0, 0, 0, 0, 0, 0, EMPTY_STRING_i, 0, 0, 0, 0 \ - }) -#endif -extern const Person EMPTY_PERSON; - - - -/* - * This struct is returned from the 'who_is_on' call. - */ -typedef struct { - Pers_no person; - String what_am_i_doing; - Conf_no working_conference; -} Who_info_old; - -typedef struct { - Pers_no person; - String what_am_i_doing; - String username; /* Userid and hostname. */ - Conf_no working_conference; - Session_no session_no; /* Serial number of connection. */ -} Who_info; - -typedef struct { - Pers_no person; - String what_am_i_doing; - String username; /* Userid and hostname. */ - Conf_no working_conference; - Session_no session; /* Serial number of connection. */ - Time connection_time; /* Not logintime. */ - u_long idle_time; /* Seconds. */ -} Session_info; - -#define EMPTY_SESSION_INFO_i ((Session_info) { 0, EMPTY_STRING_i, \ - EMPTY_STRING_i, 0, 0, \ - NULL_TIME_i, 0 }) - -extern const Session_info EMPTY_SESSION_INFO; - -#define EMPTY_WHO_INFO_OLD_i ((Who_info_old) { 0, EMPTY_STRING_i, 0 }) - -#define EMPTY_WHO_INFO_i ((Who_info) { 0, EMPTY_STRING_i, \ - EMPTY_STRING_i, 0, 0 }) - -extern const Who_info_old EMPTY_WHO_INFO_OLD; - -extern const Who_info EMPTY_WHO_INFO; - - - -typedef struct { - int no_of_persons; - Who_info_old * info; -} Who_info_list_old; - -#define EMPTY_WHO_INFO_LIST_OLD_i ((Who_info_list_old) { 0, NULL }) -extern const Who_info_list_old EMPTY_WHO_INFO_LIST_OLD; - - -typedef struct { - int no_of_persons; - Who_info * info; -} Who_info_list; - -#define EMPTY_WHO_INFO_LIST_i ((Who_info_list) { 0, NULL }) -extern const Who_info_list EMPTY_WHO_INFO_LIST; - - -#endif /* ifndef KOM_TYPES_H_ALREADY_INCLUDED__ */ diff --git a/src/include/misc-types.h b/src/include/misc-types.h deleted file mode 100644 index 87b110ea4..000000000 --- a/src/include/misc-types.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * misc-types.h -- Miscellaneous types and constants that are useful - * in many places in LysKOM, but are not very LysKOM- - * specific. - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - */ - - -#ifndef _MISC_TYPES_ALREADY_INCLUDED__ -#define _MISC_TYPES_ALREADY_INCLUDED__ - - -typedef enum { FALSE = 0, TRUE = 1 } Bool; - -typedef enum { OK = 017, FAILURE = 17 } Success; - -#define NO_TIME ((time_t) 0) - -#endif /* _MISC_TYPES_ALREADY_INCLUDED__ */ diff --git a/src/include/server/Makefile b/src/include/server/Makefile deleted file mode 100644 index 29b539d16..000000000 --- a/src/include/server/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -TARGET = -DCLIENT - -INSTALL-HDRS = smalloc.h - -all: includes libraries binaries - -libraries:; -binaries:; - -.PHONY : includes -includes: - -mkdir $(INCLUDEDIR)/server - for i in $(INSTALL-HDRS);\ - do \ - cmp $$i $(INCLUDEDIR)/server/$$i \ - || cp $$i $(INCLUDEDIR)/server/$$i; \ - done - -clean: - $(RM) ${OBJECTS} *~ core temp-Makefile Distfile *.o - -depend:; diff --git a/src/include/server/dependencies b/src/include/server/dependencies deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/include/server/smalloc.h b/src/include/server/smalloc.h deleted file mode 100644 index 155eb678a..000000000 --- a/src/include/server/smalloc.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * smalloc.h - * - * Contains memory allocator routines - * - */ - -/* - * The servers "general" memory handler. - */ - - -#define SMALLOC_MAGIC_ALLOC 0x12FE56A0 -#define SMALLOC_MAGIC_FREE 0xCA348E63 - -/* - * "safe" malloc. Handles the case when malloc returns NULL. - * smalloc cannot fail. - */ -extern void * -smalloc(size_t size); - - -extern void -sfree(void * ptr); /* it is legal to sfree a NULL pointer */ - -extern void * -srealloc(void * ptr, size_t size); /* Never fails. It is legal to - realloc the NULL ptr. */ - -/* - * Allocate temporary memory, which is automatically freed after this - * atomic call. - */ -void * -tmp_alloc(u_long size); - -/* - * Free all core which is allocated with tmp_alloc(). This is called from - * end_of_atomic(). - */ -void -free_tmp(void); - -/* - * Free all memory used internally in tmp_alloc(). - */ -void -free_all_tmp(void); - - -/* - * Write statistics of memory usage. - */ - -void -dump_smalloc_counts(FILE *stat_file); diff --git a/src/include/services.h b/src/include/services.h deleted file mode 100644 index e847d03c1..000000000 --- a/src/include/services.h +++ /dev/null @@ -1,477 +0,0 @@ -/* - * services.h -- All the services the LysKOM server makes available - * for clients. - * - * Requires kom-types.h - * - * Created by ceder 1990-03-23 - */ - - -#ifndef _SERVICES_H_ALREADY_INCLUDED__ -#define _SERVICES_H_ALREADY_INCLUDED__ - - -#if defined (CLIENT) -# if defined (SERVER) -# error Both CLIENT and SERVER defined! -# endif -# define KOM_(function) kom_ ## function -# define CONST const -#elif defined (SERVER) -# define KOM_(function) function -# define CONST -#else -# error Neither CLIENT nor SERVER defined! -#endif - - - - -/* - * Session control - */ -#ifdef CLIENT -extern Success -KOM_( open_connection (const char * server )); - -extern void -KOM_( set_storage_management (malloc_function new_malloc, - realloc_function new_realloc, - free_function new_free)); - -#endif - - -extern Success -KOM_( login (Pers_no person, - const String passwd )); - -extern Success -KOM_( logout (void)); /* can never fail */ - -/* Change Conference */ -extern Success -KOM_( pepsi (Conf_no conference )); - - -/* Change name of a person or conference. */ -extern Success -KOM_( change_name (Conf_no conf_no, - const String new_name)); - -extern Success -KOM_( change_what_i_am_doing (CONST String what_am_i_doing )); - - -/* Get info about a session */ - -extern Success -KOM_( get_session_info (Session_no session_no, - Session_info *result) ); - -/* - * Disconnect a session. You can disconnect your own session (even if - * you are not logged in) and any session where you are supervisor of - * the user that is logged in on that session. - */ -extern Success -KOM_( disconnect (Session_no session_no)); - -/* - * Returns your session number - */ -extern Success -KOM_( who_am_i (Session_no *session_no)); - - -/****************************** -* Person-related calls * -******************************/ - -/* - * Create a new person. Returns 0 if any error occured. - */ -extern Pers_no -KOM_( create_person (const String name, - const String passwd )); - - -/* Obsolete call; use get_person_stat instead. */ -extern Success -KOM_( get_person_stat_old (Pers_no person, - int mask, - Person * result )); - -extern Success -KOM_( get_person_stat (Pers_no person, - Person * result )); - - - -extern Success -KOM_( get_created_texts (Pers_no person, - Local_text_no first, - u_long no_of_texts, - Text_list * created_texts )); - -extern Success -KOM_( get_membership (Pers_no person, - u_short first, - u_short no_of_confs, - Bool want_read_texts, - Membership_list * memberships )); - - - -extern Success -KOM_( set_priv_bits (Pers_no person, - Priv_bits privileges )); - - -/* Set the password of PERSON to NEW_PWD. OLD_PWD is the password - * of the person who does the set. This is not necessarily the - * same as the one who gets it set. */ -extern Success -KOM_( set_passwd (Pers_no person, - const String old_pwd, - const String new_pwd )); - - -/* You can query for unread texts without logging in. */ -extern Success -KOM_( query_read_texts (Pers_no pers_no, - Conf_no conf_no, - Membership * result )); - - -extern Success -KOM_( get_unread_confs(Pers_no pers_no, - Conf_no_list *result)); - -extern Success -KOM_( set_user_area(Pers_no pers_no, - Text_no user_area)); - - -/**************************************** -* Conference-related calls * -****************************************/ - - -extern Conf_no -KOM_( create_conf (const String name, - Conf_type type )); - - -/* Delete a conference. Also used to delete persons. */ -extern Success -KOM_( delete_conf (Conf_no conf )); - - -/* - * Map conference name to number. Returns a list of the conferences - * that match the name NAME. Can be done without logging in. - */ -#ifdef SERVER -extern Success -KOM_( lookup_name (const String name, - Conf_list_old *result)); -#else -extern Success -KOM_( lookup_name (const String name, - Conf_list *result)); -#endif - -extern Success -KOM_( get_conf_stat_old (Conf_no conf_no, - int mask, - Conference * result )); - -extern Success -KOM_( get_conf_stat (Conf_no conf_no, - Conference * result )); - -extern Success -KOM_( get_members (Conf_no conf, - u_short first, - u_short no_of_members, - Member_list * members )); - - - -/* add_member is also used to change the priority of a conference */ -extern Success -KOM_( add_member (Conf_no conf_no, - Pers_no pers_no, - u_char priority, - u_short where )); /* Range of where is [0..] */ - - -extern Success -KOM_( sub_member (Conf_no conf_no, - Pers_no pers_no )); - - -/* - * Tell the server that I want to mark/unmark texts as read so that I - * get no_of_unread unread texts in conf_no. - */ -extern Success -KOM_( set_unread (Conf_no conf_no, - Text_no no_of_unread)); - -/* - * set_presentation and set_etc_motd also does some magic with the - * no_of_marks field in the Text_stat structure of the old and new text. - */ - -extern Success -KOM_( set_presentation (Conf_no conf_no, - Text_no text_no )); /* 0 to delete pres. */ - -extern Success -KOM_( set_etc_motd (Conf_no conf_no, - Text_no text_no )); - - -extern Success -KOM_( set_supervisor (Conf_no conf_no, - Conf_no admin )); - -extern Success -KOM_( set_permitted_submitters (Conf_no conf_no, - Conf_no perm_sub )); - -extern Success -KOM_( set_super_conf (Conf_no conf_no, - Conf_no super_conf )); - -extern Success -KOM_( set_conf_type (Conf_no conf_no, - Conf_type type )); - -extern Success -KOM_( set_garb_nice (Conf_no conf_no, - Garb_nice nice )); /* number of days */ - - - -/******************************** -* Calls to handle marks * -********************************/ - - -extern Success -KOM_( get_marks (Mark_list *result )); - - - -/* - * Will fail if the user is not allowed to read the text. - */ -extern Success -KOM_( mark_text (Text_no text, - u_char mark_type )); - - - - -/******************************* -* Calls to handle texts * -*******************************/ - - -extern Success -KOM_( get_text (Text_no text, - String_size start_char, - String_size end_char, - String * result)); - - -extern Success -KOM_( get_text_stat (Text_no text, - Text_stat *result)); - -extern Success -KOM_( mark_as_read (Conf_no conference, - int no_of_texts, - const Local_text_no * text_arr )); - - -/* Returns 0 on error */ -extern Text_no -KOM_( create_text (CONST String message, - u_short no_of_misc, - CONST Misc_info * misc )); - -extern Success -KOM_( delete_text( Text_no text_no )); - - - -extern Success -KOM_( add_recipient (Text_no text_no, - Conf_no conf_no, - Info_type type )); /* recpt or cc_recpt */ - -extern Success -KOM_( sub_recipient (Text_no text_no, - Conf_no conf_no )); - - -extern Success -KOM_( add_comment (Text_no comment, - Text_no comment_to )); - - -/* - * Make the text COMMENT to not be a comment to text COMMENT_TO - */ -extern Success -KOM_( sub_comment (Text_no comment, - Text_no comment_to )); - -extern Success -KOM_( add_footnote (Text_no footnote, - Text_no footnote_to )); - -extern Success -KOM_( sub_footnote (Text_no footnote, - Text_no parent )); - -extern Success -KOM_( get_map (Conf_no conf_no, - Local_text_no first_local_no, - u_long no_of_texts, - Text_list * result)); - - -/* - * Ask what the server thinks the time is. This - * might differ if on two different machines. - */ -#ifdef SERVER -extern Success -KOM_( get_time (time_t *time)); -#else /* CLIENT */ -extern Success -KOM_( get_time (struct tm *clock)); -#endif - - -/* - * Who is logged on now? - */ -extern Success -KOM_( who_is_on_old (Who_info_list_old * result )); - -extern Success -KOM_( who_is_on (Who_info_list * result )); - - -/* - * Return various information about the server - */ -extern Success -KOM_( get_info (Info *result )); - -/* - * Wait for asynchronous message from client, or input on any of - * the file-descriptors in opt_set. Returns FAILURE if nothing - * happened in msec milliseconds or an error occurs. (kom_errno == - * KOM_NO_ERR if the return was due to a timeout). Returns OK if - * there was an asynchronous message or input on any of the fd's in - * opt_set. - * - * Set opt_set to NULL if you don't want to wait on any other input - * than a message. - * - * To wait for a message or input on stdin the following code can be used: - * - * fd_set read_set; - * - * FD_ZERO(&read_set); - * FD_SET(fileno(stdin), &read_set); - * if ( kom_wait(read_set, 1000) == OK ) - * { - * if ( FD_ISSET(fileno(stdin), &read_set) ) - * handle_stdin_input(); - * else - * handle_asynchronous_message(); - * } - * else - * time_out(); - * - * (The handler is called from kom_wait and not handle_asynchronous_message, - * but there might be more to do afterwards since a handler cannot call - * functions that communicate with the server.) - */ -#ifdef CLIENT -extern Success -KOM_( wait (fd_set *opt_set, - int msec)); -#endif - -/* - * Privileged calls. - */ - -extern Success -KOM_( set_motd_of_lyskom (Text_no motd)); - -/* - * Set ena_level. 0 means don't use any privileges. - */ -extern Success -KOM_( enable (u_char ena_level)); - -/* - * Make LysKOM sync its files. - */ -extern Success -KOM_( sync (void) ); - -/* - * Close LysKOM. - */ -extern Success -KOM_( shutdown (int exit_val) ); - -/* - * Send a message to all clients. This is obsoleted by send_message() - * and will soon go away. - */ -extern Success -KOM_( broadcast (const String message) ); - -/* - * Send a message to a person, or all persons. If recipient == 0 all - * connections will receive the message. - */ -extern Success -KOM_( send_message (Pers_no recipient, - const String message) ); - - -/* - * Asynchronous messages. - */ -#ifdef CLIENT -void -register_new_text(void (*async_new_text)(Text_no text_no, - Text_stat text_s)); - -void -register_i_am_on(void (*async_i_am_on)(Who_info info)); - -void -register_i_am_off (void (*async_i_am_off)(Pers_no pers_no)); - -void -register_new_name(void (*async_new_name)(Conf_no conf_no, - String old_name, - String new_name)); -#endif /* CLIENT */ - -#endif /* _SERVICES_H_ALREADY_INCLUDED__ */ diff --git a/src/libraries/Makefile b/src/libraries/Makefile deleted file mode 100644 index 3cc5db29f..000000000 --- a/src/libraries/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -# All directories that make should traverse to when doing clean etc. -# Note that client-support depends on libmisc. - -SUBDIRS = libansi libmisc libisc libcommon client-support - -all: includes libraries binaries - - -includes: - for i in $(SUBDIRS) ; \ - do \ - echo making includes in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) includes) \ - done - - -libraries: - for i in $(SUBDIRS) ; \ - do \ - echo making libraries in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) libraries) \ - done - - -binaries:; - - -depend: - for i in $(SUBDIRS) ; \ - do \ - echo making depend in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) depend); \ - done - - -install: - for i in $(SUBDIRS) ; \ - do \ - echo making install in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) install) \ - done - - -clean: - $(RM) *~ core - for i in $(SUBDIRS); \ - do \ - echo making clean in directory $$i; \ - (cd $$i; $(MAKE) $(EXPORTS) clean) \ - done - diff --git a/src/libraries/libansi/Makefile b/src/libraries/libansi/Makefile deleted file mode 100644 index db1a7b19c..000000000 --- a/src/libraries/libansi/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -TARGET = -DCLIENT - -LIBNAME = libansi.a - -LIBOBJS = strerror.o - -all: $(LIBNAME) - -libmisc.a: $(LIBOBJS) - $(AR) $(ARFLAGS) $(LIBNAME) $? - ranlib $(LIBNAME) - -includes:; - -libraries: $(LIBNAME) - $(RM) $(LIBDIR)/$(LIBNAME) - cp $(LIBNAME) $(LIBDIR)/$(LIBNAME) - ranlib $(LIBDIR)/$(LIBNAME) - -binaries:; - -clean: - $(RM) ${LIBOBJS} *~ core temp-Makefile Distfile *.o - - -# Recreate the Makefile -include $(SCRIPTDIR)/Parallell-depend.make - - -tags: - etags -t *.[hc] - -specials:; - -include dependencies diff --git a/src/libraries/libansi/README b/src/libraries/libansi/README deleted file mode 100644 index e721d6dd8..000000000 --- a/src/libraries/libansi/README +++ /dev/null @@ -1,5 +0,0 @@ -Detta {r t{nkt att bli ett bibliotek med divers rutiner som beh|vs -f|r de stackare utan ANSI bibliotek.. (Alla n{stan). - -/pen - diff --git a/src/libraries/libansi/config.h b/src/libraries/libansi/config.h deleted file mode 100644 index 9fe0eaccb..000000000 --- a/src/libraries/libansi/config.h +++ /dev/null @@ -1,8 +0,0 @@ -/* -** config.h -** -** System: SunOS 4.1.1 -*/ - - -/* #define HAVE_STRERROR /* */ diff --git a/src/libraries/libansi/dependencies b/src/libraries/libansi/dependencies deleted file mode 100644 index 00b32730b..000000000 --- a/src/libraries/libansi/dependencies +++ /dev/null @@ -1 +0,0 @@ -strerror.o : strerror.c config.h diff --git a/src/libraries/libansi/libansi.a b/src/libraries/libansi/libansi.a deleted file mode 100644 index da20a4f3e62e290cd2381b772fd4d11db21625e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmY$iNi0gvu;VH&DM~FW$}iH(R{#Sub8`a&LsKIQ1qB5|BSQrR1!Gf?grR|fnVA__ z%m~C+P)OinWM*V%U|`5#fB*>w2F4{2CPNE|b_E%%pqc_=&wadq!jx$Y3~UVy?2HTy z49pA+3>O#@7#bEeaIiHnaDl`G85kHQ2q`cKGcYhXFfcGo5=vk&WME(rXkcL5Af~_o zlb@`$fawDh183v$2ONzrK&CUuFfg!mfLRO-3JeS^-B7jx0|N&K)Qu(#3>@50wgm$N z3rHNK%!Yx1sqO#&|3@I!vVhcp#9ff|`XK2IU|?W|*%iXTzznmCg$1Mwf`y=lgTh7< z<Tr>ggAx*3ABk<r3Q@qrz`)=P4loGcuK_}X$O0sG6B2tR68jJm`vDUBAA-#&fyA~# zV#gw}tB}~!kk~7b*t?O~ml13R1{VefkUu~e#O4P@A;<$R4B#j<fU<=cz)Hb{C<6mS z090Izfq@}`fr0V93P=EK7UO$RdSGB+;9_84{H6gB2Zb%e0SH?FL_yhL^B;f&pk_kZ z2@DKOJn6~F@yYqQ1(`XiDS8a?Nu_Ce1`P4V1x1;8C20)t#g)bJsYOLOnZ+d#PF`wJ z5kovImoUH>ddUo#c_mgQhPFk9*1AT9Cgvs<#%3lK)^Mh|HA8YnVv$vek!_KYwSl#v zk-0TPPJUjx0$8IlK8>Y$#hK}OsVNYpCLpB-*1CpJ{iw302-)I{{Gt+w9y5@ruCbB1 znT0iogxQU7fH_D7#8ikrRAVh5(q^Wn#->nv!Fo|uSwd8SoCb9<#LtEXAPHSVBMXSX z;kuyG;9xVbHZnD}W=PA)PXvXe5lD-PwShH5N`7flPO4RjAvlmMKtf=<;o{&B0gIRA zXQo({7@FD|n!@A8%FWQsR?CPXH80;Pz>p!SG|ei^(A+k$$Pg3_mexiLix)2j0Npg} Av;Y7A diff --git a/src/libraries/libansi/strerror.c b/src/libraries/libansi/strerror.c deleted file mode 100644 index dfbc8776f..000000000 --- a/src/libraries/libansi/strerror.c +++ /dev/null @@ -1,23 +0,0 @@ -/* -** strerror.c -*/ -#include "config.h" - -#ifndef HAVE_STRERROR - -extern int sys_nerr; -extern char *sys_errlist[]; - -char *strerror(int eno) -{ - static char buf[20]; - - if (eno < 0 || eno >= sys_nerr) - { - sprintf(buf, "Error %d", eno); - return buf; - } - else - return sys_errlist[eno]; -} -#endif diff --git a/src/libraries/libcommon/ChangeLog b/src/libraries/libcommon/ChangeLog deleted file mode 100644 index f17c43a93..000000000 --- a/src/libraries/libcommon/ChangeLog +++ /dev/null @@ -1,15 +0,0 @@ -Sat Jul 6 06:15:40 1991 Per Cederqvist (ceder at lysator) - - * Fixade makefilen s} att den kan generera b}de liblyskom-server.a - och liblyskom-client.a. (Den ena kompilerad med SERVER - definierad, den andra med CLIENT definierad). "make depend" - kr{ver i nul{get manuella efterjusteringar. - - * misc-parser.h: "time_t" bytt mot "Time" (som {r "struct tm" i - klienten och "time_t" i servern). - - * [ndrade "typedef struct {...} Matching_info" till "typedef - struct matching_info {...} Matching_info". - - * parser.h: s-collat-tables.h -> s-collat-tabs.h. - diff --git a/src/libraries/libcommon/Makefile b/src/libraries/libcommon/Makefile deleted file mode 100644 index b859ee5ba..000000000 --- a/src/libraries/libcommon/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -TARGET = -DCLIENT - - -LIBOBJS = kom-errno.o misc-parser.o parser.o -HDRS = misc-parser.h parser.h -LIBRARIES = liblyskom-server.a liblyskom-client.a - -all: $(LIBRARIES) - -client-dir: - mkdir client-dir - ln -s `echo $(LIBOBJS) $(HDRS) dependencies| tr ' ' '\012' | \ - sed 's/.o$$/.c/' | sed 's:^:\.\./:' ` client-dir/ - -server-dir: - mkdir server-dir - ln -s `echo $(LIBOBJS) $(HDRS) dependencies| tr ' ' '\012' | \ - sed 's/.o$$/.c/' | sed 's:^:\.\./:' ` server-dir/ - -.PHONY: liblyskom-server.a -liblyskom-server.a: server-dir - (cd server-dir; make $(EXPORTS) -f ../Makefile ../$@ TARGET=-DSERVER) - ranlib $@ - - -../liblyskom-server.a: $(LIBOBJS) - $(AR) $(ARFLAGS) $@ $? - -.PHONY: liblyskom-client.a -liblyskom-client.a: client-dir - (cd client-dir; make $(EXPORTS) -f ../Makefile ../$@ TARGET=-DCLIENT) - ranlib $@ - - -../liblyskom-client.a: $(LIBOBJS) - $(AR) $(ARFLAGS) $@ $? - - -clean: - $(RM) -r *.o core Distfile *~ client-dir server-dir $(LIBRARIES) - -libraries: includes all - (cd $(LIBDIR); $(RM) $(LIBRARIES)) - cp $(LIBRARIES) $(LIBDIR) - (cd $(LIBDIR); ranlib -t $(LIBRARIES)) - -.PHONY: includes -includes: - for i in $(HDRS);\ - do \ - cmp $$i $(INCLUDEDIR)/$$i || cp $$i $(INCLUDEDIR)/$$i; \ - done - - -binaries:; - -tags: - etags -t $(INCLUDEDIR)/*.h *.[hc] - -# Recreate the Makefile from Makefile - -include $(SCRIPTDIR)/Parallell-depend.make - -specials:; - -include dependencies diff --git a/src/libraries/libcommon/README b/src/libraries/libcommon/README deleted file mode 100644 index 3f695f0c4..000000000 --- a/src/libraries/libcommon/README +++ /dev/null @@ -1,2 +0,0 @@ -All utveckling i detta bibliotek sker p} LLL. -H{r ligger saker som anv{nds b}de i servern och tty-klienten. diff --git a/src/libraries/libcommon/dependencies b/src/libraries/libcommon/dependencies deleted file mode 100644 index dc0646a6b..000000000 --- a/src/libraries/libcommon/dependencies +++ /dev/null @@ -1,26 +0,0 @@ -kom-errno.o : kom-errno.c /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/config.h \ - /users/ceder/lyskom/include/kom-errno.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h -misc-parser.o : misc-parser.c misc-parser.h \ - /users/ceder/lyskom/include/kom-types.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /usr/gnu/lib/gcc-include/limits.h \ - /users/ceder/lyskom/include/ansi/time.h /usr/include/time.h \ - /users/ceder/lyskom/include/s-string.h \ - /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/misc-types.h \ - /users/ceder/lyskom/include/s-collat-tabs.h -parser.o : parser.c /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /users/ceder/lyskom/include/s-string.h \ - /usr/gnu/lib/gcc-include/limits.h /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/misc-types.h \ - /users/ceder/lyskom/include/s-collat-tabs.h parser.h \ - /users/ceder/lyskom/include/zmalloc.h \ - /users/ceder/lyskom/include/compiler.h diff --git a/src/libraries/libcommon/kom-errno.c b/src/libraries/libcommon/kom-errno.c deleted file mode 100644 index 16d9a2954..000000000 --- a/src/libraries/libcommon/kom-errno.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * kom_errno.c - * - * Created by ceder 1990-05-13 - * - */ - - -#include <stdio.h> - -#include <config.h> - -#include <kom-errno.h> - - -Kom_err kom_errno; - -/* Additional information about the error */ -u_long err_stat; - -/* Note that kom_errout is defined in config.h */ - -void -kom_perror(void) -{ - switch (kom_errno) - { - case KOM_NO_ERROR: - fprintf (kom_errout, "Why am I called? There was no error!\n"); - break; - - case KOM_NOT_IMPL: - fprintf(kom_errout, "Not implemented yet\n"); - break; - - case KOM_PWD: - fprintf(kom_errout, "Wrong/illegal password\n"); - break; - - case KOM_LOGIN: - fprintf(kom_errout, "Not logged in.\n"); - break; - - case KOM_LOGIN_DISALLOWED: - fprintf(kom_errout, "System is in 'singel-user mode'\n"); - break; - - case KOM_CONF_ZERO: - fprintf(kom_errout, "Attempt to use conference number 0.\n"); - break; - - case KOM_UNDEF_CONF: - fprintf(kom_errout, "Undefined or secret conference\n"); - break; - - case KOM_UNDEF_PERS: - fprintf(kom_errout, "Undefined or secret person\n"); - break; - - case KOM_ACCESS: - fprintf(kom_errout, "No 'read/write permission'\n"); - break; - - case KOM_SECRET_PUBLIC: - fprintf(kom_errout, "Cannot be secret and !rd_prot\n"); - break; - - case KOM_LETTER_BOX: - fprintf(kom_errout, "Cannot change letter_box flag\n"); - break; - - case KOM_PERM: - fprintf(kom_errout, "No permission\n"); - break; - - case KOM_NOT_MEMBER: - fprintf(kom_errout, "Not member in conf\n"); - break; - - case KOM_NO_SUCH_TEXT: - fprintf(kom_errout, "No such global text as %ld or no access\n", - err_stat); - break; - - case KOM_NO_SUCH_LOCAL_TEXT: - fprintf(kom_errout, "No such local text as %ld\n", err_stat); - break; - - case KOM_INDEX_OUT_OF_RANGE: - fprintf(kom_errout, "Index out of range\n"); - break; - - case KOM_BAD_NAME: - fprintf(kom_errout, "To short/long or contains illegal chars\n"); - break; - - case KOM_CONF_EXISTS: - fprintf(kom_errout, "Already exists\n"); - break; - - case KOM_PERS_EXISTS: - fprintf(kom_errout, "Already exists\n"); - break; - - case KOM_LDB_ERR: - fprintf(kom_errout, "LDB_err\n"); - break; - - case KOM_ILL_MISC: - fprintf(kom_errout, "Illegal misc field at %ld.\n", err_stat); - break; - - case KOM_ILLEGAL_INFO_TYPE: - fprintf(kom_errout, "Info_type parameter illegal. Client is buggy.\n"); - break; - - case KOM_ALREADY_RECIPIENT: - fprintf(kom_errout, "Already recipient to this text.\n"); - break; - - case KOM_NOT_RECIPIENT: - fprintf(kom_errout, "Not recipient.\n"); - break; - - case KOM_RECIPIENT_LIMIT: - fprintf(kom_errout, "Too many recipients.\n"); - break; - - case KOM_COMM_LIMIT: - fprintf(kom_errout, "Too many comments.\n"); - break; - - case KOM_FOOT_LIMIT: - fprintf(kom_errout, "Too many footnotes.\n"); - break; - - case KOM_NOT_AUTHOR: - fprintf(kom_errout, "Only the author may add footnotes.\n"); - break; - - case KOM_OBSOLETE: - fprintf (kom_errout, "Servern {r inte kompatibel med mig.\n"); - break; - - case KOM_LONG_STR: - fprintf (kom_errout, "F|r l}ng str{ng.\n"); - break; - - case KOM_NO_CONNECT: - fprintf (kom_errout, "Kan ej f} kontakt med servern.\n"); - break; - - case KOM_OUT_OF_MEMORY: - fprintf (kom_errout, "Dumma Emacs! Fattar du inte att du inte ska " - "bryta en\nrad inuti en str{ng bara f|r att man anv{nder " - "} och {???\n"); - break; - - case KOM_SERVER_IS_CRAZY: - fprintf (kom_errout, "Hmm, jag tror servern har b|rjat tala i " - "tungom}l...\n"); - break; - - case KOM_CLIENT_IS_CRAZY: - fprintf (kom_errout, "Hoppschan. Jag har vischt b|rjat schluddra.\n"); - break; - -#ifndef COMPILE_CHECKS - default: - fprintf(kom_errout, "Unknown error %d\n", kom_errno); - break; -#endif - } -} - diff --git a/src/libraries/libcommon/misc-parser.c b/src/libraries/libcommon/misc-parser.c deleted file mode 100644 index e32561b50..000000000 --- a/src/libraries/libcommon/misc-parser.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - * misc-parser.c - * Parse a list of misc-items for LysKOM texts. - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - * - * Any opinions expressed in this code are the author's PERSONAL opinions, - * and does NOT, repeat NOT, represent any official standpoint of Lysator, - * even if so stated. - */ - - - -#include "misc-parser.h" - -#define EXPORT - - -/* - * Return TRUE if the next misc-item exist, and it is of type - * MTYPE, FALSE otherwise. Can only be used within the function - * parse_next_misc(). - */ -#define NEXT_IS(mtype) \ - (*info < stop_pointer && (*info)->type == (mtype)) - - -#define BARF { result.type = m_error; return result; } - - -/* - * Parse out a "group" of misc-items from a list of them pointed - * to by *INFO. *STOP_POINTER must point to the item directly - * after the last in the list. **INFO will be incremented to - * point to the item after the recently parsed out group. The - * return value will have the TYPE field set to 'm_end_of_list' - * when the end of the list has been reached. - */ -EXPORT Misc_info_group -parse_next_misc (const Misc_info ** info, - const Misc_info * stop_pointer) - -{ - Misc_info_group result; - - - - /* Clear the 'result' struct */ - result.type = m_error; - result.recipient = 0; - result.cc_recipient = 0; - result.local_no = 0; - result.is_received = FALSE; - result.comment_to = 0; - result.commented_in = 0; - result.footnote_to = 0; - result.footnoted_in = 0; - result.sender = 0; - result.is_sent = 0; - - - if (*info >= stop_pointer) - { - result.type = m_end_of_list; - return result; - } - - - /* Now, do the real work... */ - switch ((*info)->type) - { - case recpt: /* These two are so similar that they can */ - case cc_recpt: /* Be handled in the same clause */ - if ((*info)->type == recpt) - { - result.type = m_recpt; - result.recipient = (*(*info)++).datum.recipient; - } - else - { - result.type = m_cc_recpt; - result.cc_recipient = (*(*info)++).datum.cc_recipient; - } - - /* There should follow a 'Local no', but check nevertheless */ - if (! NEXT_IS (loc_no)) - { BARF } - else - result.local_no = (*(*info)++).datum.local_no; - - if (NEXT_IS (rec_time)) - { - result.is_received = TRUE; - result.received_at = (*(*info)++).datum.received_at; - } - - if (NEXT_IS (sent_by)) - { - result.sender = (*(*info)++).datum.sender; - /* There _should_ be a 'sent_at' here... */ - if (! NEXT_IS (sent_at)) - { BARF } - /* Let the following if clause insert the 'sent_at' data. */ - } - if (NEXT_IS (sent_at)) - { - result.is_sent = TRUE; - result.sent_at = (*(*info)++).datum.sent_at; - } - - break; - - - case comm_to: - result.type = m_comm_to; - result.comment_to = (*(*info)++).datum.comment_to; - - if (NEXT_IS (sent_by)) - { - result.sender = (*(*info)++).datum.sender; - /* There _should_ be a 'sent_at' here. */ - if (! NEXT_IS (sent_at)) - { BARF } - /* Let the following if clause insert the 'sent_at' data. */ - } - if (NEXT_IS (sent_at)) - { - result.is_sent = TRUE; - result.sent_at = (*(*info)++).datum.sent_at; - } - - break; - - - case footn_to: - result.type = m_footn_to; - result.footnote_to = (*(*info)++).datum.footnote_to; - - if (NEXT_IS (sent_at)) - { - result.is_sent = TRUE; - result.sent_at = (*(*info)++).datum.sent_at; - } - - break; - - - case comm_in: - result.type = m_comm_in; - result.commented_in = (*(*info)++).datum.commented_in; - break; - - - case footn_in: - result.type = m_footn_in; - result.footnoted_in = (*(*info)++).datum.footnoted_in; - break; - - -#ifndef COMPILE_CHECKS - default: - result.type = m_error; - break; -#endif - } - - return result; -} diff --git a/src/libraries/libcommon/misc-parser.h b/src/libraries/libcommon/misc-parser.h deleted file mode 100644 index f5b1b1879..000000000 --- a/src/libraries/libcommon/misc-parser.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * misc-parser.h - * Parse a list of "misc-item":s for a text in LysKOM - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - - -#include <kom-types.h> - - - -typedef enum { - m_recpt, - m_cc_recpt, - m_comm_to, - m_comm_in, - m_footn_to, - m_footn_in, - m_end_of_list, /* End of list reached */ - m_error /* Bad misc-items found */ -} Misc_struct_type; - - -typedef struct { - Misc_struct_type type; - Conf_no recipient; - Conf_no cc_recipient; - Local_text_no local_no; - Time received_at; - Text_no comment_to; - Text_no commented_in; - Text_no footnote_to; - Text_no footnoted_in; - Pers_no sender; - Time sent_at; - Bool is_received; - Bool is_sent; -} Misc_info_group; - - - -#define is_received(mstruct) ((mstruct).is_received != FALSE) -#define is_sent_by(mstruct) ((mstruct).sender != 0) -#define is_sent(mstruct) ((mstruct).is_sent != FALSE) - - -/* - * Parse out a "group" of misc-items from a list of them pointed - * to by *INFO. *STOP_POINTER must point to the item directly - * after the last in the list. **INFO will be incremented to - * point to the item after the recently parsed out group. The - * return value will have the TYPE field set to 'm_end_of_list' - * when the end of the list has been reached. - * - * If the has a bad format, the TYPE field will be 'm_error', - * and **INFO_POINTER will point to the item before the bad (or - * missing) item. - */ -extern Misc_info_group -parse_next_misc (const Misc_info ** info_pointer, - const Misc_info * stop_pointer); diff --git a/src/libraries/libcommon/parser.c b/src/libraries/libcommon/parser.c deleted file mode 100644 index fd445f717..000000000 --- a/src/libraries/libcommon/parser.c +++ /dev/null @@ -1,418 +0,0 @@ -/* - * client/parser.c -- Routines to parse commands - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - * - * Any opinions expressed in this code are the author's PERSONAL opinions, - * and does NOT, repeat NOT, represent any official standpoint of Lysator, - * even if so stated. - */ - - - -#include <stddef.h> - -#include <s-string.h> -#include <s-collat-tabs.h> - -#include <misc-types.h> - -#include "parser.h" - - -#define EXPORT /* To emphasize export of objects */ -#define PRIVATE static - - -#if defined (SERVER) -# include <server/smalloc.h> -# define MALLOC smalloc -# define REALLOC srealloc -# define FREE sfree -#elif defined (CLIENT) -# include <zmalloc.h> -# define MALLOC zmalloc -# define REALLOC zrealloc -# define FREE zfree -#else -# include <malloc.h> -# define MALLOC malloc -# define REALLOC realloc -# define FREE free -#endif - - - -/* - * Remove paranthesized "expressions" from the string STR. - * E g if STR is "Foo (Bar (vfslck)) Gazonk", then it is reduced - * to "Foo _ Gazonk", where '_' is the character in SEPARATOR. - * Superflous close paranthesis are disregarded. - */ -EXPORT void -remove_parenthesis (String * str, - char blanker) - -{ - String_size i; /* Index in loop */ - int nesting_depth; - - - /* Match parantheses. Remove text inside parantheses. */ - nesting_depth = 0; - for ( i = 0 ; i < s_strlen(*str) ; i++ ) - { - if (str->string[i] == '(') - nesting_depth++; - - if (str->string[i] == ')') - { - nesting_depth--; - str->string[i] = blanker; /* Don't forget that... */ - if (nesting_depth < 0) - nesting_depth = 0; - } - - if (nesting_depth > 0) - str->string[i] = blanker; - } - - return; -} - - - - -/* - * Convert a String to a list of tokens (words). This list is - * easier to parse than a string (since the string would have to - * be tokenized first anyway). The last entry is EMPTY_STRING. - * Returns NULL if any error occured (couldn't allocate memory). - */ -EXPORT Parse_token * -tokenize (const String source, - const String separators) - -{ - Parse_token * tokens = NULL; - Parse_token * temp_list; /* Temporary */ - String work_string = EMPTY_STRING; - String a_token; - String a_temp_token; /* More temporaries... */ - int no_of_tokens; - int list_size; - String_size pos_in_string; - const int chunk_size = 10; - - - - /* Copy string to working area */ - if (s_strcpy(&work_string, source) == FAILURE) - { - /* Couldn't allocate space for temporary string. */ - return NULL; - } - - remove_parenthesis (&work_string, separators.string[0]); - - no_of_tokens = 0; - list_size = 0; - pos_in_string = 0; - - while ( ! s_empty(a_token - = s_strtok (work_string, &pos_in_string, - separators))) - { - /* Make the token point into the original source string - * instead of the working string */ - a_temp_token = s_fsubstr (source, - pos_in_string - s_strlen (a_token), - pos_in_string - 1); -#if 0 -// * /* Get a real copy of the word */ -// * a_temp_token = EMPTY_STRING; -// * if (s_strcpy(&a_temp_token, a_token) == FAILURE) -// * { -// * /* Grumble... */ -// * free_tokens (tokens); -// * s_clear(&work_string); -// * return NULL; -// * } -#endif - - /* Is the allocated list large enough? */ - if (no_of_tokens++ >= list_size) - { - /* No, allocate more */ - temp_list = REALLOC (tokens, (list_size += chunk_size) - * sizeof(Parse_token)); - if (temp_list == NULL) - { - /* Sigh. Out of memory. */ - free_tokens (tokens); - s_clear (&work_string); - return NULL; - } - else - { - /* OK, we got what we asked for */ - tokens = temp_list; - } - } - - /* Insert the new token in the list */ - tokens [no_of_tokens-1].word = a_temp_token; - tokens [no_of_tokens-1].start_in_string = - pos_in_string - s_strlen(a_temp_token); - } - - s_clear (&work_string); - - /* Is there room in the list for the 'stop' element? */ - if (list_size <= no_of_tokens) - { - /* No, get some more memory */ - temp_list = REALLOC (tokens, (++list_size) * sizeof(Parse_token)); - if (temp_list == NULL) - { - /* Sigh. Out of memory. */ - free_tokens (tokens); - return NULL; - } - else - { - /* OK, we got what we asked for */ - tokens = temp_list; - } - } - - /* OK, insert the 'stop' element. */ - tokens [no_of_tokens].word = EMPTY_STRING; - tokens [no_of_tokens].start_in_string = END_OF_STRING; - - return tokens; -} - - - - -/* - * Count the number of tokens (words) in TOKEN_LIST. Used to - * set the NUMBER_OF_WORDS field in a 'Matching_info' object. - */ -extern int -count_words (const Parse_token * token_list) - -{ - int no_of_words; - - no_of_words = 0; - while (! s_empty(token_list++ -> word)) - no_of_words++; - - return no_of_words; -} - - - - -/* - * Free the list of tokens (// and the strings they are pointing to //). - * Free:ing NULL is a no-op. - */ -EXPORT void -free_tokens (Parse_token * token_list) - -{ - if (token_list != NULL) - { - FREE (token_list); - } -} - - - - -/* - * Returns the number of the first word of SOURCE that does - * not match PATTERN. A word "foo" in SOURCE matches "foobar" - * in PATTERN, but not vice versa. - */ -EXPORT int -match (Parse_token * source, - Parse_token * pattern, - char collat_tab [ COLLAT_TAB_SIZE ] ) - -{ - int word_no; - - word_no = 0; - while ( (! s_streq (pattern[word_no].word, EMPTY_STRING)) - && (! s_streq (source[word_no].word, EMPTY_STRING)) - && (s_usr_strhead (source[word_no].word, - pattern[word_no].word, - collat_tab))) - { - word_no++; - } - - return word_no; -} - - - - -/* - * Searches for a matching string in the table 'match_table'. - * Some weird pattern matching is done. - * parse().no_of_matches is -1 if an error occured (out of - * memory). - * - * What? You want a description of how it matches? Forget it! BUG! - * Try for yourself, and you'll find out! - */ - -EXPORT Parse_info -parse (String source_string, - Matching_info * match_table, - Bool allow_trailing_words, - Bool number_of_words_must_match, - String separators, - char collat_tab [ COLLAT_TAB_SIZE ] ) - -{ - Parse_info answer; - int * temp_indexes; - int index; - int size_of_index_list; - Parse_token * source_words; - int no_of_source_words; - int first_non_matching; - int best_match; - int highest_priority; - - const int chunk_size = 20; - - - - source_words = tokenize(source_string, separators); - if (source_words == NULL) - { - answer.no_of_matches = -1; - return answer; - } - - no_of_source_words = count_words(source_words); - - /* Check if SOURCE_STRING was empty of words */ - if (no_of_source_words == 0) - { - answer.indexes = MALLOC (1 * sizeof(int)); - if (answer.indexes == NULL) - { - /* Gahh! Someone eats memory! */ - answer.no_of_matches = -1; - return answer; - } - answer.indexes[0] = -1; - answer.no_of_matches = 1; - return answer; - } - - - answer.no_of_matches = 0; - answer.indexes = NULL; - size_of_index_list = 0; - index = -1; - best_match = 1; /* At least one word */ - highest_priority = 1; - while (! s_empty (match_table[++index].name)) - { - first_non_matching = match (source_words, match_table[index].tokens, - collat_tab); - - if ( ( ! allow_trailing_words - && first_non_matching < no_of_source_words) - || ( number_of_words_must_match - && first_non_matching != count_words (match_table[index].tokens))) - { - continue; /* Try next entry in table */ - } - - if (first_non_matching < best_match) - continue; /* Try next entry in table */ - - if ( first_non_matching == best_match - && highest_priority > match_table[index].priority) - continue; - - /* If we reach this far, then we have a match that should be - * inserted in the table. But if it is a better match than any - * before, then we clear the table first. */ - if ( first_non_matching > best_match - || match_table[index].priority > highest_priority) - { - highest_priority = match_table[index].priority; - best_match = first_non_matching; - answer.no_of_matches = 0; - } - - /* Insert the match in the table */ - - /* Increase the size if necessary */ - if (answer.no_of_matches >= size_of_index_list) - { - temp_indexes = REALLOC (answer.indexes, - (size_of_index_list += chunk_size) - * sizeof(answer.indexes)); - if (temp_indexes == NULL) - { - /* Grumble! Out of memory. */ - FREE (answer.indexes); - answer.no_of_matches = -1; - return answer; - } - - answer.indexes = temp_indexes; - } - - highest_priority = match_table [index].priority; - answer.indexes[answer.no_of_matches] = index; - /* Find out where the arguments start. - * This value should not be used if more than one match is found. - */ - /* Special hack needed if no parameters */ - if (s_empty (source_words [first_non_matching].word)) - answer.arguments = EMPTY_STRING; - else - answer.arguments = - s_fsubstr(source_string, - source_words[first_non_matching]. - start_in_string, - END_OF_STRING); - answer.no_of_matches++; - } - - /* All matches found by now */ - - /* Strip trailing blanks from the argument */ - if (answer.no_of_matches == 1) - answer.arguments = s_strip_trailing (answer.arguments, separators); - - return answer; - -} /* END: parse() */ diff --git a/src/libraries/libcommon/parser.h b/src/libraries/libcommon/parser.h deleted file mode 100644 index 922bb4416..000000000 --- a/src/libraries/libcommon/parser.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * client/parser.h -- Header file for LysKOM command parsing routines - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * e-mail: Bellman@Lysator.LiU.SE - */ - - -#ifndef PARSER_H_ALREADY_INCLUDED__ -#define PARSER_H_ALREADY_INCLUDED__ - - -#include <misc-types.h> -#include <s-string.h> -#include <s-collat-tabs.h> - - - -/* - * Information about one word. If the field 'word' is - * EMPTY_STRING, then the struct is considered to be the last - * in an "array". BUG: "array" is wrong word - */ -typedef struct { - String word; - String_size start_in_string; -} Parse_token; - - -/* - * Information about one string to match against during parse(). - * A list of these should be passed to parse() as the CMD_TABLE - * parameter. The 'tokens' field is set by doing - * I.tokens = tokenize(I.name, Separators); - */ -typedef struct matching_info { - String name; /* Name to match against */ - Parse_token * tokens; /* Tokenized version of name */ - int priority; /* Normally in interval 1..15 */ -} Matching_info; - - - -/* - * Remove paranthesized "expressions" from the string STR by - * replacing them with the character SEPARATOR. - * Superflous close paranthesis are disregarded. - */ -extern void -remove_parenthesis (String * str, - char separator); - - - -/* - * Convert a String to a list of tokens (words). This list is - * easier to parse than a string (since the string would have to - * be tokenized first anyway). - * Returns NULL if any error occured (couldn't allocate memory). - */ -extern Parse_token * -tokenize (const String source, - const String separators); - - - -/* - * Count the number of tokens (words) in TOKEN_LIST. Used to - * set the NUMBER_OF_WORDS field in a 'Matching_info' object. - */ -extern int -count_words (const Parse_token * token_list); - - - -/* - * Free the list of tokens (// and the strings they are pointing to //). - * Free:ing NULL is a no-op. - */ -extern void -free_tokens (Parse_token * token_list); - - - -/* - * Returns the number of the first word of SOURCE that does - * not match PATTERN. A word "foo" in SOURCE matches "foobar" - * in PATTERN, but not vice versa. - */ -extern int -match (Parse_token * source, - Parse_token * pattern, - char collat_tab [ COLLAT_TAB_SIZE ] ); - - - -/* - * Contains the result of a parse(). - */ -typedef struct { - int no_of_matches; /* Number of found matches */ - int * indexes; /* List of indexes */ - String arguments; /* The arguments... */ -} Parse_info; - - -/* - * Searches for a matching string in the table 'match_table'. - * Some weird pattern matching is done. The 'ARGUMENTS' field of - * the result is not a separate String, but points into - * SOURCE_STRING. - * If ALLOW_TRAILING_WORDS is false, then SOURCE_STRING may not - * contain any trailing words. - * If NUMBER_OF_WORDS_MUST_MATCH is true, then all the words - * in from the entry in MATCH_TABLE must be present (possibly - * abbrevated) in SOURCE_STRING. - * parse().no_of_matches is -1 if an error occured (out of - * memory). - * If SOURCE_STRING is empty, i e does not contain any words, - * the 'no_of_matches' field is 1, and indexes[0] is -1. - * - * What? You want a description of how it matches? Forget it! BUG! - * Try for yourself, and you'll find out! - */ - -extern Parse_info -parse (String source_string, - Matching_info * match_table, - Bool allow_trailing_words, - Bool number_of_words_must_match, - String separators, - char collat_tab [ COLLAT_TAB_SIZE ] ); - - -#endif /* PARSER_H_ALREADY_INCLUDED__ */ diff --git a/src/libraries/libmisc/ChangeLog b/src/libraries/libmisc/ChangeLog deleted file mode 100644 index 55adb3952..000000000 --- a/src/libraries/libmisc/ChangeLog +++ /dev/null @@ -1,43 +0,0 @@ -Tue Aug 27 07:20:34 1991 Per Cederqvist (ceder at lysator) - - * pom.c: Tog bort variablerna ts och pmt som inte anv{nds. - -Sat Jul 6 05:43:41 1991 Per Cederqvist (ceder at lysator) - - * Fullbordade {ndringen fr}n char till unsigned char i - s-string.[hc] som Peter p}b|rjade. - - * Skrev om Makefilen f|r att klara RCS. - - * Alla filer i libmisc.a placerade under RCS. - - * s-collat-tables.[hco] omd|pt till s-collat-tabs.[hco]. ar tycker - inte om f|r l}nga namn. - -Thu Dec 20 04:59:36 1990 Thomas Bellman (bellman at lave) - - * s-string.[ch]: s_strchr() och s_strrchr(): Lade till en - parameter som anger var s|kningen ska b|rja. - - * s-string.c: [ndrat fr}n if-satser f|r kontroll av parametrar - till att anv{nda assert()-makrot. - - * s-string.[ch]: Lade till s_strrchr(). - - * zmalloc.c: Fixat en del buggar d{r pekare till z_info-structen - returnerades i st f pekare efter denna, samt lite annat. - -Sat Dec 8 03:05:51 1990 Thomas Bellman (bellman at laila) - - * [ndrade tillbaka s_strcpy(). Den ska sl{ppa loss minnet {ven om - den f}r en EMPTY_STRING. - -Sat Dec 1 12:09:35 1990 Lars Willf|r (willfor at nanny) - - * [ndrade s_strcpy s} att den med s{kerhet fungerar {ven om - source_string == EMPTY_STRING. - -Thu Aug 9 05:12:52 1990 Thomas Bellman (bellman at laila) - - * Biblioteket skapat ig}r. - diff --git a/src/libraries/libmisc/Makefile b/src/libraries/libmisc/Makefile deleted file mode 100644 index cd4627ab6..000000000 --- a/src/libraries/libmisc/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# Makefile for LysKOM -# -############################################################################### -# -# SPECIAL CONSIDERATIONS: -# -# - Requires GNU make. -# - CC, OPTIMIZE-FLAGS and other make variables are passed down -# in the environment. -# - C compiler must be ANSI conformant. -# -############################################################################### -# -# SPECIAL TARGETS: -############################################################################### -TOPDIR = /usr/lyskom/src -SCRIPTDIR = $(TOPDIR)/scripts - -include $(SCRIPTDIR)/import.make - -TARGET = -DCLIENT - -LIBNAME = libmisc.a - -LIBOBJS = pom.o s-collat-tabs.o s-string.o zmalloc.o - -INSTALL-HDRS = pom.h s-collat-tabs.h s-string.h zmalloc.h - -all: $(LIBNAME) - -$(LIBNAME): $(LIBOBJS) - $(AR) $(ARFLAGS) $(LIBNAME) $? - ranlib $(LIBNAME) - -libraries: $(LIBNAME) - $(RM) $(LIBDIR)/$(LIBNAME) - cp $(LIBNAME) $(LIBDIR)/$(LIBNAME) - ranlib -t $(LIBDIR)/$(LIBNAME) - -includes: - for i in $(INSTALL-HDRS);\ - do \ - cmp $$i $(INCLUDEDIR)/$$i || cp $$i $(INCLUDEDIR)/$$i; \ - done - -binaries:; - -testnumlist: testnumlist.o numlist.o - $(CC) -o testnumlist testnumlist.o numlist.o - - -clean: - $(RM) ${OBJECTS} *~ core temp-Makefile Distfile *.o - - -# Recreate the Makefile -include $(SCRIPTDIR)/Parallell-depend.make - - -tags: - etags -t $(INCLUDEDIR)/*.h *.[hc] - -specials: includes; - -include dependencies diff --git a/src/libraries/libmisc/README b/src/libraries/libmisc/README deleted file mode 100644 index 922de6f14..000000000 --- a/src/libraries/libmisc/README +++ /dev/null @@ -1,2 +0,0 @@ -All utveckling i detta bibliotek sker p} LLL. -H{r ligger includefiler som {r gemensamma f|r server och klient. diff --git a/src/libraries/libmisc/dependencies b/src/libraries/libmisc/dependencies deleted file mode 100644 index 123b2966a..000000000 --- a/src/libraries/libmisc/dependencies +++ /dev/null @@ -1,46 +0,0 @@ -numlist.o : numlist.c /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/ansi/stdlib.h \ - /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /users/ceder/lyskom/include/misc-types.h \ - numlist.h -testnumlist.o : testnumlist.c /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/ansi/stdlib.h \ - /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /users/ceder/lyskom/include/misc-types.h \ - numlist.h -numlist2.o : numlist2.c /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/ansi/stdlib.h \ - /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /users/ceder/lyskom/include/misc-types.h \ - numlist2.h -zmalloc.o : zmalloc.c /users/ceder/lyskom/include/ansi/stddef.h \ - /users/ceder/lyskom/include/ansi/sys/types.h /usr/include/sys/types.h \ - /usr/gnu/lib/gcc-include/sys/stdtypes.h /usr/include/sys/stdtypes.h \ - /usr/include/sys/sysmacros.h /users/ceder/lyskom/include/ansi/malloc.h \ - /users/ceder/lyskom/include/ansi/string.h \ - /users/ceder/lyskom/include/compiler.h zmalloc.h -pom.o : pom.c /users/ceder/lyskom/include/ansi/sys/types.h \ - /usr/include/sys/types.h /usr/gnu/lib/gcc-include/sys/stdtypes.h \ - /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h \ - /users/ceder/lyskom/include/ansi/time.h /usr/include/time.h \ - /users/ceder/lyskom/include/ansi/math.h /usr/include/math.h \ - /usr/include/floatingpoint.h /usr/include/sys/ieeefp.h \ - /users/ceder/lyskom/include/ansi/stdio.h pom.h -s-collat-tabs.o : s-collat-tabs.c s-collat-tabs.h \ - /usr/gnu/lib/gcc-include/limits.h -s-string.o : s-string.c /users/ceder/lyskom/include/ansi/sys/types.h \ - /usr/include/sys/types.h /usr/gnu/lib/gcc-include/sys/stdtypes.h \ - /usr/include/sys/stdtypes.h /usr/include/sys/sysmacros.h \ - /users/ceder/lyskom/include/ansi/stdio.h \ - /users/ceder/lyskom/include/ansi/string.h \ - /users/ceder/lyskom/include/ansi/ctype.h /usr/include/ctype.h \ - /users/ceder/lyskom/include/ansi/stdlib.h \ - /users/ceder/lyskom/include/ansi/stddef.h /usr/gnu/lib/gcc-include/assert.h \ - /users/ceder/lyskom/include/misc-types.h s-collat-tabs.h \ - /usr/gnu/lib/gcc-include/limits.h s-string.h diff --git a/src/libraries/libmisc/numlist.c b/src/libraries/libmisc/numlist.c deleted file mode 100644 index fe5caa4ec..000000000 --- a/src/libraries/libmisc/numlist.c +++ /dev/null @@ -1,615 +0,0 @@ -/* - * File: numlist.c - * - * A numlist is supposed to be an efficient implementation of - * a list of numbers. One of the big features is intervals. - * - * Author: Inge Wallin - * - * Three plus signs (+++) denote places where more work may be needed. - */ - -#include <stdio.h> -#include <stdlib.h> - -#include <misc-types.h> - -#include "numlist.h" - - -/* ================================================================ */ -/* Some useful macros */ - - -#define IS_INTERVAL_START(x) (((x) & INTERVAL_MASK) == INTERVAL_START) -#define IS_INTERVAL_END(x) (((x) & INTERVAL_MASK) == INTERVAL_END) - -#define NUMBER_OF(x) ((x) & NUMBER_MASK) - -#define MAKE_INTERVAL_START(x) ((x) | INTERVAL_START) -#define MAKE_INTERVAL_END(x) ((x) | INTERVAL_END) - - -/* ================================================================ */ -/* Numlist_node */ - - -static Numlist_node * -numlist_node_create() -{ - Numlist_node * nln; - - nln = (Numlist_node *) malloc(sizeof(Numlist_node)); - if (nln == NULL) { - fprintf(stderr, "Virtual memory exhausted"); - abort(); - } - - nln->num_numbers = 0; - nln->next = NULL; - - return nln; -} - - - -/* - * Insert the number NUM at index INDEX in the numlist node NLN. - * All numbers starting at index INDEX and subsequent are moved - * one step back. - */ - -static void -numlist_node_insert_num(Numlist_node * nln, - int index, - u_long num) -{ - int i; - - for (i = nln->num_numbers; i > index; --i) - nln->numbers[i] = nln->numbers[i - 1]; - nln->numbers[index] = num; - ++nln->num_numbers; -} - - - -/* - * Delete the number with index INDEX from the node NODE. If this - * was the last number in the node, delete the entire node. PREV_NODE - * points to the node just before NODE and NL is the Numlist they - * both belong to. - */ - -static void -numlist_node_del_num(Numlist * nl, - Numlist_node * node, - Numlist_node * prev_node, - int index) -{ - int i; - - /* Delete the number from this node. */ - for (i = index; i < node->num_numbers - 1; ++i) - node->numbers[i] = node->numbers[i + 1]; - --(node->num_numbers); - - /* If this node became empty, delete it and fix all pointers. */ - if (node->num_numbers == 0) { - if (prev_node == NULL) { - nl->first = node->next; - if (nl->first == NULL) - nl->last = NULL; - } else { - prev_node->next = node->next; - if (nl->last == node) - nl->last = prev_node; - } - free(node); - } -} - - - -/* - * Split the node NODE into two nodes. The numbers starting with the - * index INDEX is put in the second (new) node and the other remain - * in the old one. NL points to the Numlist the node belongs to. - */ - -static void -numlist_node_split(Numlist * nl, - Numlist_node * node, - int index) -{ - Numlist_node * new_node; - int i; - - new_node = numlist_node_create(); - new_node->next = node->next; - node->next = new_node; - - for (i = index; i < node->num_numbers; ++i) - new_node->numbers[i - index] = node->numbers[i]; - - new_node->num_numbers = node->num_numbers - index; - node->num_numbers = index; - - if (nl->last == node) - nl->last = new_node; -} - - -/* ================================================================ */ -/* Numlist */ - - -/* - * Create a new, empty Numlist and return a pointer to it. - */ - -Numlist * -numlist_create() -{ - Numlist * nl; - - nl = (Numlist *) malloc(sizeof(Numlist)); - if (nl == NULL) { - fprintf(stderr, "Virtual memory exhausted"); - abort(); - } - - nl->first = NULL; - nl->last = NULL; - nl->last_num = NUMLIST_NO_NUMBER; - - return nl; -} - - - -/* - * Return TRUE if the Numlist NL is empty, otherwise return FALSE. - */ - -Bool -numlist_isempty(Numlist *nl) -{ - return nl->first == NULL; -} - - - -/* - * return TRUE if NUM is a member of the numlist NL, otherwise - * return FALSE. - */ - -Bool -numlist_member(Numlist *nl, u_long num) -{ - Numlist_node * nln; - u_long last; - int i; - - /* If num is bigger than the last number, return FALSE immediately. */ - last = numlist_last(nl); - if (last == NUMLIST_ERR || num > last) - return FALSE; - - nln = nl->first; - while (nln != NULL) { - if (num <= NUMBER_OF(nln->numbers[nln->num_numbers - 1])) { - for (i = 0; i < nln->num_numbers; ++i) { - - /* Check if we can abort the loop. */ - if (num < NUMBER_OF(nln->numbers[i])) - return FALSE; - - /* Take care of an interval. */ - if (IS_INTERVAL_START(nln->numbers[i])) { - if (NUMBER_OF(nln->numbers[i]) <= num - && num <= NUMBER_OF(nln->numbers[i + 1])) - return TRUE; - ++i; - } else { - if (nln->numbers[i] == num) - return TRUE; - } - } - } - - nln = nln->next; - } - return FALSE; -} - - - -/* - * Return the first number in the numlist NL. Also store a pointer - * to the first node, the index to this particular cell and the - * first number itself in the numlist. This makes it more efficient - * to get the next number later. - * - * If NL is empty, return the constant NUMLIST_ERR. - */ - -u_long -numlist_first(Numlist *nl) -{ - u_long first; - - if (numlist_isempty(nl)) { - return NUMLIST_ERR; - } else { - first = NUMBER_OF(nl->first->numbers[0]); - nl->last_num = first; - nl->last_node = nl->first; - nl->last_index = 0; - - return first; - } -} - - - -/* - * Return the last number in the numlist NL. If NL is empty, - * return the constant NUMLIST_ERR. - * - * Unlike numlist_first(), this routine does NOT set last_num - * and the other cache fields in NL. - */ - -u_long -numlist_last(Numlist *nl) -{ - Numlist_node * last; - - if (numlist_isempty(nl)) { - return NUMLIST_ERR; - } else { - last = nl->last; - return NUMBER_OF(last->numbers[last->num_numbers - 1]); - } -} - - - -/* - * Return the first number that is a member of the numlist NL and - * bigger than NUM. If there is no such number, the constant - * NUMLIST_ERR is returned. - */ - -u_long -numlist_next(Numlist *nl, u_long num) -{ - Numlist_node * nln; - int index; - int i; - - /* If we got NUM the last time, we have cached some info about */ - /* where to find the next entry. Use that info. */ - if (num == nl->last_num) { - nln = nl->last_node; - index = nl->last_index; - if (IS_INTERVAL_START(nln->numbers[index])) { - - /* Last number was in an interval. */ - if (num < NUMBER_OF(nln->numbers[index + 1])) { - nl->last_num = num + 1; - return num + 1; - } else { - ++index; - } - } - - ++index; - if (index < nln->num_numbers) { - nl->last_num = NUMBER_OF(nln->numbers[index]); - nl->last_index = index; - return nl->last_num; - } - - /* If we get here the next number is not in this node */ - /* but in the next. */ - nln = nln->next; - if (nln == NULL) { - nl->last_num = NUMLIST_NO_NUMBER; - return NUMLIST_ERR; - } else { - nl->last_num = NUMBER_OF(nln->numbers[0]); - nl->last_node = nln; - nl->last_index = 0; - - return nl->last_num; - } - } - - /* ...otherwise find NUM in the list and return the next number. */ - nln = nl->first; - ++num; - while (nln != NULL) { - if (num <= NUMBER_OF(nln->numbers[nln->num_numbers - 1])) { - for (i = 0; i < nln->num_numbers; ++i) { - - if (num <= NUMBER_OF(nln->numbers[i])) { - nl->last_num = NUMBER_OF(nln->numbers[i]); - nl->last_node = nln; - nl->last_index = i; - return nl->last_num; - } - - /* Take care of an interval. */ - if (IS_INTERVAL_START(nln->numbers[i])) { - if (num <= NUMBER_OF(nln->numbers[i + 1])) { - nl->last_num = num; - nl->last_node = nln; - nl->last_index = i; - - return num; - } else { - ++i; - } - } - } - } - nln = nln->next; - } - - return NUMLIST_ERR; -} - - - -/* - * Enter the number NUM into the numlist NL. If NL is already in - * NL, do nothing. - */ - -void -numlist_insert(Numlist *nl, u_long num) -{ - Numlist_node * nln; - Numlist_node * last; - int last_num; - int i; - int j; - - nl->last_num = NUMLIST_NO_NUMBER; - - last_num = numlist_last(nl); - if (last_num != NUMLIST_ERR && num <= last_num) { - nln = nl->first; - while (nln != NULL) { - if (num <= NUMBER_OF(nln->numbers[nln->num_numbers - 1])) { - for (i = 0; i < nln->num_numbers; ++i) { - if (num <= NUMBER_OF(nln->numbers[i])) - goto found; - } - } - nln = nln->next; - } - } - - /* If we get here, num is not found. It is also the case that num */ - /* is bigger than all numbers in the numlist. */ - last = nl->last; - if (last == NULL) { - - /* Empty numlist. */ - nl->first = nl->last = numlist_node_create(); - nl->first->num_numbers = 1; - nl->first->numbers[0] = num; - - } else if ((NUMBER_OF(last->numbers[last->num_numbers - 1]) == num - 1) - && IS_INTERVAL_END(last->numbers[last->num_numbers - 1])) { - /* Enter num into last interval */ - last->numbers[last->num_numbers - 1] = MAKE_INTERVAL_END(num); - - } else if (last->num_numbers < NUM_LONGS_IN_NUMLIST) { - /* There is room for num in the last Numlist_node. */ - if (last->numbers[last->num_numbers - 1] == num - 1) { - last->numbers[last->num_numbers - 1] - = MAKE_INTERVAL_START(num - 1); - last->numbers[last->num_numbers++] = MAKE_INTERVAL_END(num); - } else - last->numbers[last->num_numbers++] = num; - - - } else { - /* We have to create a new Numlist_node to host num. */ - nl->last = numlist_node_create(); - last->next = nl->last; - nl->last->num_numbers = 1; - nl->last->numbers[0] = num; - } - return; - - found: - /* Here we have found a number that is bigger than num. */ - /* nln points to the Numlist_node and i is the index to it. */ - - /* If num is already in the list, do nothing. */ - if (NUMBER_OF(nln->numbers[i]) == num - || IS_INTERVAL_END(nln->numbers[i])) - return; - - /* Step through the different cases and take appropriate action. */ - if (IS_INTERVAL_START(nln->numbers[i]) - && NUMBER_OF(nln->numbers[i]) == num + 1) { - - /* Enter num into the next interval. */ - nln->numbers[i] = MAKE_INTERVAL_START(num); - - /* +++Take care of the case that two intervals could be */ - /* collapsed into one, e.g. like 17-21, 22-31 => 17-31. */ - - } else if (i > 0 - && IS_INTERVAL_END(nln->numbers[i - 1]) - && NUMBER_OF(nln->numbers[i - 1]) == num - 1) { - - /* Enter num into the previous interval. */ - nln->numbers[i - 1] = MAKE_INTERVAL_END(num); - - } else if (nln->num_numbers < NUM_LONGS_IN_NUMLIST) { - - /* Squeeze in num. There is room in this Numlist_node. */ - for (j = nln->num_numbers; j > i; --j) - nln->numbers[j] = nln->numbers[j - 1]; - if (i > 0 && nln->numbers[i - 1] == num - 1) { - nln->numbers[i - 1] = MAKE_INTERVAL_START(num - 1); - nln->numbers[i] = MAKE_INTERVAL_END(num); - } else if (i < nln->num_numbers - 1 - && nln->numbers[i + 1] == num + 1) { - nln->numbers[i] = MAKE_INTERVAL_START(num); - nln->numbers[i + 1] = MAKE_INTERVAL_END(num + 1); - } else { - nln->numbers[i] = num; - } - - nln->num_numbers++; - - } else { - /* Squeeze in num. There is no room in this Numlist_node. */ - /* +++This implementation is a bit crude. We should split */ - /* the node as evenly as possible. */ - - numlist_node_split(nl, nln, i); - nln->numbers[nln->num_numbers++] = num; - } - - /* +++We never take care of the case that two intervals in adjacent */ - /* nodes could be collapsed into one. Should we? */ - return; -} - - - -/* - * Delete the number NUM from the Numlist NL. If NUM is not - * a member of NL, do nothing. - */ - -void -numlist_delete(Numlist *nl, u_long num) -{ - Numlist_node * nln1; - Numlist_node * nln2; - int last_num; - int i; - int j; - - nl->last_num = NUMLIST_NO_NUMBER; - - last_num = numlist_last(nl); - if (last_num == NUMLIST_ERR || num > last_num) - return; - - nln1 = nl->first; - nln2 = NULL; - while (nln1 != NULL) { - if (num <= NUMBER_OF(nln1->numbers[nln1->num_numbers - 1])) { - for (i = 0; i < nln1->num_numbers; ++i) { - if (num == nln1->numbers[i] /* An ordinary number */ - || (IS_INTERVAL_START(nln1->numbers[i]) - && NUMBER_OF(nln1->numbers[i]) <= num - && num <= NUMBER_OF(nln1->numbers[++i]))) - goto found; - - /* If we are already past the number, it is not here */ - /* ==> return. */ - if (num < NUMBER_OF(nln1->numbers[i])) - return; - } - } - nln2 = nln1; - nln1 = nln1->next; - } - return; - - /* When we get here, nln1 points to the node where the number */ - /* resides, nln2 points to the node before if not NULL, and i */ - /* i is the index into the node. If the number is within an */ - /* interval, i points to the end of the interval (++i above). */ - found: - if ((nln1->numbers[i] & INTERVAL_MASK) == 0) { - /* An ordinary number. */ - numlist_node_del_num(nl, nln1, nln2, i); - - } else { - /* An interval. */ - if (NUMBER_OF(nln1->numbers[i]) == num) { - /* The number is at the end of the interval. */ - --(nln1->numbers[i]); - if (NUMBER_OF(nln1->numbers[i]) - == NUMBER_OF(nln1->numbers[i - 1])) { - - numlist_node_del_num(nl, nln1, nln2, i); - nln1->numbers[i - 1] &= NUMBER_MASK; - } - - } else if (NUMBER_OF(nln1->numbers[i - 1]) == num) { - /* The number is at the start of the interval. */ - ++(nln1->numbers[i - 1]); - if (NUMBER_OF(nln1->numbers[i]) - == NUMBER_OF(nln1->numbers[i - 1])) { - - numlist_node_del_num(nl, nln1, nln2, i); - nln1->numbers[i - 1] &= NUMBER_MASK; - } - - } else if (NUMBER_OF(nln1->numbers[i - 1]) == num - 1 - && NUMBER_OF(nln1->numbers[i]) == num + 1) { - /* The interval is only 3 numbers */ - nln1->numbers[i - 1] &= NUMBER_MASK; - nln1->numbers[i] &= NUMBER_MASK; - - } else { - /* The number is within the interval. We must split it. */ - if (IS_INTERVAL_END(nln1->numbers[i])) - --i; - - /* If there is not room for two new numbers, split the node. */ - if (nln1->num_numbers > NUM_LONGS_IN_NUMLIST - 2) { - if (i < NUM_LONGS_IN_NUMLIST / 2) { - /* Split the node after the interval and keep it here. */ - numlist_node_split(nl, nln1, i + 2); - } else { - /* Split the node before the interval */ - /* and use the new node. */ - numlist_node_split(nl, nln1, i); - nln1 = nln1->next; - i = 0; - } - } - - /* Now nln1 points to the node with the interval and */ - /* i is the index to the start of the interval. */ - if (NUMBER_OF(nln1->numbers[i]) == num - 1) { - /* NUM is second element ==> leave only one to the left. */ - numlist_node_insert_num(nln1, i, - NUMBER_OF(nln1->numbers[i])); - nln1->numbers[i + 1] += 2; - - } else if (NUMBER_OF(nln1->numbers[i + 1]) == num + 1) { - /* NUM is second last element ==> leave only one to */ - /* the right. */ - numlist_node_insert_num(nln1, i + 2, - NUMBER_OF(nln1->numbers[i + 1])); - nln1->numbers[i + 1] -= 2; - - } else { - /* NUM is deep inside the interval */ - /* ==> Make 2 new intervals. */ - for (j = nln1->num_numbers + 1; j >= i + 2; --j) - nln1->numbers[j] = nln1->numbers[j - 2]; - nln1->numbers[i + 1] = MAKE_INTERVAL_END(num - 1); - nln1->numbers[i + 2] = MAKE_INTERVAL_START(num + 1); - nln1->num_numbers += 2; - } - } - } -} diff --git a/src/libraries/libmisc/numlist.h b/src/libraries/libmisc/numlist.h deleted file mode 100644 index c0f4c0f94..000000000 --- a/src/libraries/libmisc/numlist.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * File: numlist.h - * - * A numlist is an ordered list of numbers. One of the big features - * of this implementation is intervals. - * - * Author: Inge Wallin - */ - - -#ifndef NUMLIST__H -#define NUMLIST__H - -#include <sys/types.h> - - -#define INTERVAL_MASK 0xc0000000 -#define NUMBER_MASK 0x3fffffff -#define INTERVAL_START 0x80000000 -#define INTERVAL_END 0x40000000 - - -/* This constant is returned whenever there are no more fitting values */ -/* for a call, e.g. when numlist_first() is called with an empty Numlist. */ - -#define NUMLIST_ERR 0xffffffff - - -/* This constant is stored in the field last_num when no previous */ -/* number is stored. */ - -#define NUMLIST_NO_NUMBER 0xffffffff - - -/* - * One int + 13 longs + one pointer + the length info that - * malloc adds makes 64 bytes. This should make allocation fairly - * efficient. - */ - -/* #define NUM_LONGS_IN_NUMLIST 13 */ -#define NUM_LONGS_IN_NUMLIST 5 - - -typedef struct numlist_node Numlist_node; -typedef struct numlist Numlist; - -struct numlist_node { - int num_numbers; - u_long numbers[NUM_LONGS_IN_NUMLIST]; - Numlist_node * next; -}; - - -struct numlist { - Numlist_node * first; - Numlist_node * last; - - /* The following info is used only for speeding up numlist_next(). */ - u_long last_num; /* The last number returned. */ - Numlist_node * last_node; /* The node containing the last number... */ - int last_index; /* ...and the index to it. */ -}; - - -/* ================================================================ */ -/* Prototypes for all global functions in the numlist package. */ - - -Numlist *numlist_create(void); -Bool numlist_isempty(Numlist *); -Bool numlist_member(Numlist *, u_long); -u_long numlist_first(Numlist *); -u_long numlist_last(Numlist *); -u_long numlist_next(Numlist *, u_long); -void numlist_insert(Numlist *, u_long); -void numlist_delete(Numlist *, u_long); - -/* - * Useful (?) but not yet implemented: - * - * void numlist_destroy(Numlist *); - * void numlist_insert_interval(Numlist *, u_long, u_long); - * void numlist_delete_interval(Numlist *, u_long, u_long); - * Numlist *numlist_union(Numlist *, Numlist *); - * Numlist *numlist_intersection(Numlist *, Numlist *); - * Numlist *numlist_difference(Numlist *, Numlist *); - * void numlist_print(FILE *, Numlist *); - * void numlist_read(FILE *, Numlist *); - */ - -#endif /* NUMLIST__H */ diff --git a/src/libraries/libmisc/numlist2.c b/src/libraries/libmisc/numlist2.c deleted file mode 100644 index 2124a4540..000000000 --- a/src/libraries/libmisc/numlist2.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * File: numlist2.c - * - * This file is supposed to be a reference while testing numlist. - * - * Author: Inge Wallin - */ - - -#include <stdio.h> -#include <stdlib.h> - -#include <misc-types.h> - -#include "numlist2.h" - - -Numlist * -Numlist_create() -{ - Numlist * nl; - int i; - - nl = (Numlist *) malloc(sizeof(Numlist)); - if (nl == NULL) { - fprintf(stderr, "Virtual memory exhausted"); - abort(); - } - - for (i = 0; i < NUM_CELLS; ++i) - nl->cells[i] = 0; - - return nl; -} - - -Bool -numlist_isempty(Numlist *nl) -{ - int i; - - for (i = 0; i < NUM_CELLS; ++i) - if (nl->cells[i] != 0) - return FALSE; - - return TRUE; -} - - -Bool -numlist_member(Numlist *nl, u_long num) -{ - return (nl->cells[num / 32] & ((u_long) 1 << (num & 31))) != 0; -} - - -u_long -numlist_first(Numlist *nl) -{ - int i; - int j; - - if (numlist_isempty(nl)) - return NUMLIST_ERR; - - for (i = 0; i < NUM_CELLS; ++i) { - if (nl->cells[i] != 0) { - for (j = 31; j >= 0; --j) { - if ((nl->cells[i] & ((u_long) 1 << j)) != 0) - return i * 32 + j; - } - } - } - - return NUMLIST_ERR; -} - - -u_long -numlist_next(Numlist *nl, u_long num) -{ - /* NYI */ - return NUMLIST_ERR; -} - - -void -numlist_insert(Numlist *nl, u_long num) -{ - nl->cells[num / 32] |= ((u_long) 1 << (num & 31)); -} - - -void -numlist_delete(Numlist *nl, u_long num) -{ - nl->cells[num / 32] &= ~((u_long) 1 << (num & 31)); -} - diff --git a/src/libraries/libmisc/numlist2.h b/src/libraries/libmisc/numlist2.h deleted file mode 100644 index da0a59412..000000000 --- a/src/libraries/libmisc/numlist2.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * File: numlist2.h - * - * This file is supposed to be a reference while testing numlist. - * - * Author: Inge Wallin - */ - - -#ifndef NUMLIST2__H -#define NUMLIST2__H - -#include <sys/types.h> - - -#define NUMLIST_ERR 0xffffffff - -#define MAX_NUMS 131072 -#define NUM_CELLS (MAX_NUMS / 32) - -typedef struct { - u_long cells[NUM_CELLS]; -} Numlist; - - -Numlist *numlist_create(void); -Bool numlist_isempty(Numlist *); -Bool numlist_member(Numlist *, u_long); -u_long numlist_first(Numlist *); -u_long numlist_next(Numlist *, u_long); -void numlist_insert(Numlist *, u_long); -void numlist_delete(Numlist *, u_long); - - -#endif /* NUMLIST2__H */ diff --git a/src/libraries/libmisc/pom.c b/src/libraries/libmisc/pom.c deleted file mode 100644 index 4b26fb243..000000000 --- a/src/libraries/libmisc/pom.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * pom.c -- Calculate the Phase Of the Moon - * - * Written by G|ran ]hlstr|m 1984-04-05, revision 5 1986-03-03 - * - * Modified by Thomas Bellman 1991-01-29 - */ - -#include <sys/types.h> -#include <time.h> -#include <math.h> -#include <stdio.h> - -#include "pom.h" - - -#define EXPORT - - -#define RADS (M_PI/180.0) - -#if 0 -static char * pmt[] = { "NM", "FQ", "FM", "LQ" }; -#endif -static short ix; -static double m; /* Sun's Mean Anomaly */ -static double mp; /* Moon's Mean Anomaly */ -static double f; /* Moon's Argument of Latitude */ -static struct tm dt; - - -/* New & Full Moon correction */ -static double -mcorr (double t) - -{ - double tmp; - - tmp = (0.1734-3.93E-4*t) * sin(m) + 0.0021 * sin(2.0*m) - 0.4068 * sin(mp); - tmp += 0.0161 * sin(2.0*mp) - 0.0004 * sin(3.0*mp) + 0.0104 * sin(2.0*f); - tmp += 0.0004 * sin(2.0*f + m) - 0.0051 * sin(m+mp) - 0.0074 * sin(m-mp); - tmp -= 0.0004 * sin(2.0*f - m) + 0.0006 * sin(2.0*f + mp); - return tmp += 0.0010 * sin(2.0*f - mp) + 0.0005 * sin(m + 2.0*mp); -} - - - -/* First & Last Quarter correction */ -static double -qcorr (double t) - -{ - double tmp, tmp2; - - tmp = (0.1721 - 0.0004*t) * sin(m) + 0.0021 * sin(2.0*m) - 0.628 * sin(mp); - tmp += 0.0089 * sin(2.0*mp) - 0.0004 * sin(3.0*mp) + 0.0079 * sin(2.0*f); - tmp += 0.0003 * sin(2.0*f + m) - 0.0119 * sin(m+mp) - 0.0047 * sin(m-mp); - tmp += 0.0021 * sin(2.0*f - mp) - 0.0004 * sin(2.0*f - m); - tmp += -0.0006 * sin(2.0*f + mp) + 0.0003 * sin(m + 2.0*mp); - tmp += 0.0004 * sin(m - 2.0*mp) - 0.0003 * sin(2.0*m + mp); - tmp2 = (0.0028 - 0.0004 * cos (m) + 0.0003 * cos (mp)); - if (ix == 1) - tmp += tmp2; - else - tmp -= tmp2; - - return tmp; -} - - - -/* When is nearest phase? */ -static double -pcon (void) - -{ - double frc; - double year; - double k; - double t; - double tmp; - int leap; - - - year = (dt.tm_hour + ((dt.tm_min + (dt.tm_sec / 60.0)) / 60.0)) / 24.0; - year += dt.tm_yday; - - /* Leap year? */ - leap = dt.tm_year + 1900; - leap = (leap % 4 == 0 && (leap % 100 != 0 || leap % 400 == 0)); - - /* This year with decimals */ - year = dt.tm_year + year / (365.0 + leap); - - k = year * 12.3685; - k -= (frc = k - floor (k)); - - /* Determine nearest phase */ - for ( ix = 0 ; frc > ix * 0.25 + 0.125 ; ix++ ) - ; - t = (k += ix * 0.25) / 1236.85; - tmp = 2415020.75933 + 29.53058868 * k - + (1.178E-4 - 1.55E-7 * t) * pow (t, 2.0); - tmp += 3.3E-4 * sin (166.56*RADS + 132.87*RADS * t - - 9.173E-3*RADS * pow(t, 2.0)); - m = RADS * fmod (359.2242 + 29.10535608 * k - - (3.47e-6*t + 3.33e-5) * pow (t, 2.0), 360.0); - mp = RADS * fmod (306.0253 + 385.81691806 * k - + (1.236e-5*t + 0.0107306) * pow (t, 2.0), 360.0); - f = RADS * fmod (21.2964 + 390.67050646 * k - - (2.39e-6*t + 1.6528e-3) * pow (t, 2.0), 360.0); - return tmp += ((ix % 2 == 0) ? mcorr (t) : qcorr (t)); -} - - - -/* JD at this instant */ -static double -dcon (void) - -{ - double a, b, d, m, y; - - - m = dt.tm_mon; - y = dt.tm_year + 1900.0; - d = dt.tm_mday + dt.tm_hour / 24.0 + dt.tm_min / 1440.0 - + dt.tm_sec / 86400.0; - if (m <= 2.0) - { - y -= 1.0; - m += 12.0; - } - a = floor (y/100.0); /* Gregorian Calendar correction */ - b = 2.0 - a + floor (a / 4.0); - return (floor (365.25 * y) + floor (30.6001 * (m+1.0)) + d + 1720994.5 + b); -} - - - -EXPORT struct pom -phase_of_the_moon (struct tm * when) - -{ - int p1, p2, p3, p4; - char sgn; - double tmp; - struct pom result; - - - dt = *when; - dt.tm_mon++; - dt.tm_yday++; - tmp = pcon() - dcon(); - sgn = (tmp > 0) ? '-' : '+'; - tmp = fabs (tmp); - tmp -= (p1 = floor (tmp)); - tmp = tmp * 24.0 - (p2 = floor (tmp * 24.0)); - tmp = tmp * 60.0 - (p3 = floor (tmp * 60.0)); - p4 = floor (tmp * 60.0); - - result.quarter = ix % 4; - result.days = (sgn == '+') ? p1 : -p1; - result.hours = (sgn == '+') ? p2 : -p2; - result.minutes = (sgn == '+') ? p3 : -p3; - result.seconds = (sgn == '+') ? p4 : -p4; - - return result; -} diff --git a/src/libraries/libmisc/pom.h b/src/libraries/libmisc/pom.h deleted file mode 100644 index f0f7c32d1..000000000 --- a/src/libraries/libmisc/pom.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * pom.h - * Calculate the phase of the moon at any given time. - * - * - * This file is in the public domain. No rights reserved. - */ - - -#ifndef POM_H_INCLUDED__ -#define POM_H_INCLUDED__ - - -struct pom { - enum { pom_NM, pom_FQ, pom_FM, pom_LQ } - quarter; /* Nearest quarter */ - /* Time since nearest quarter. All fields are negative if - * nearest quarter is in the future. */ - int days; - int hours; - int minutes; - int seconds; -}; - - -/* - * Calculate the phase of the moon at the time WHEN, which should be - * the GMT time. - */ -extern struct pom -phase_of_the_moon (struct tm * when); - - -#endif /* POM_H_INCLUDED__ */ diff --git a/src/libraries/libmisc/s-collat-tabs.c b/src/libraries/libmisc/s-collat-tabs.c deleted file mode 100644 index b16990a1c..000000000 --- a/src/libraries/libmisc/s-collat-tabs.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * s-collat-tables.c -- Collating tables used for the s_usr_strcmp() - * routine in s-string.[ch] - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - -#include "s-collat-tabs.h" - - -/* - * Collating tables: - * swedish_collate_tab: Swedish text. "][\}{|" in the right - * order. Upper and lower case letters - * are equal. - * english_collate_tab: English text. Upper and lower case - * letters are equal. - */ - - - -char swedish_collate_tab [ COLLAT_TAB_SIZE ] = - { - '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', - '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', - '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', - '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '}', '{', '|', '~', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '}', '{', '|', '~', '', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�' - }; - - - -char english_collate_tab [ COLLAT_TAB_SIZE ] = - { - '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', - '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', - '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', - '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '[', '\\', ']', '~', '_', - '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', '{', '|', '}', '~', '', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�', - '�', '�', '�', '�', '�', '�', '�', '�' - }; diff --git a/src/libraries/libmisc/s-collat-tabs.h b/src/libraries/libmisc/s-collat-tabs.h deleted file mode 100644 index 0c47985f8..000000000 --- a/src/libraries/libmisc/s-collat-tabs.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * s-collat-tables.h -- Declarations for collating tables - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - * - * Any opinions expressed in this code are the author's PERSONAL opinions, - * and does NOT, repeat NOT, represent any official standpoint of Lysator, - * even if so stated. - */ - - -#include <limits.h> - -#define COLLAT_TAB_SIZE (UCHAR_MAX+1) - - -extern char swedish_collate_tab [ COLLAT_TAB_SIZE ]; -extern char english_collate_tab [ COLLAT_TAB_SIZE ]; -#if 0 -extern char iso8859_1_collate_tab [ COLLAT_TAB_SIZE ]; -#endif diff --git a/src/libraries/libmisc/s-string.c b/src/libraries/libmisc/s-string.c deleted file mode 100644 index 7874163b6..000000000 --- a/src/libraries/libmisc/s-string.c +++ /dev/null @@ -1,938 +0,0 @@ -/* - * s-string.c -- Routines for manipulating objects of type String. - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - * - * Any opinions expressed in this code are the author's PERSONAL opinions, - * and does NOT, repeat NOT, represent any official standpoint of Lysator, - * even if so stated. - */ - - -#include <sys/types.h> -#include <stdio.h> -#include <string.h> -#include <ctype.h> -#include <stdlib.h> -#include <assert.h> - -#include <misc-types.h> -#include "s-collat-tabs.h" -#include "s-string.h" - - -#define EXPORT /* To emphasize objects that are exported */ - - -/* The empty String */ -EXPORT const String EMPTY_STRING = EMPTY_STRING_i; - - -static free_function x_free = NULL; -static malloc_function x_malloc = NULL; -static realloc_function x_realloc = NULL; - - - -/* - * Functions to manipulate strings of type 'String'. - * All these functions return a value of type Success, which is - * an enum of OK an FAILURE (do NOT trust the order of these!). - * - * All functions automatically allocates (and deallocates) any - * necessary storage, using the storage management functions - * defined by the s_set_storage_management() call. - */ - - -/* Macro to reallocate new storage. Works even if PTR is a - * nil pointer. */ -#define REALLOC_0(ptr, size) (((ptr) == NULL) \ - ? MALLOC_0 (size) \ - : (*x_realloc) ((ptr), size)) - -/* Free storage. Works even if PTR is a nil pointer. */ -#define FREE_0(ptr) (((ptr) == NULL) \ - ? ((void) 0) \ - : (*x_free) (ptr)) - -#define MALLOC_0(size) ((*x_malloc) (size)) - - -/* - * Set the functions to use for storage management. These must - * be call compatible with the normal functions malloc(), - * realloc() and free(). - */ -EXPORT void -s_set_storage_management (malloc_function new_malloc, - realloc_function new_realloc, - free_function new_free) - -{ - x_malloc = new_malloc; - x_realloc = new_realloc; - x_free = new_free; -} - - - -/* - * Create an object of type String from an ordinary C string. - */ -EXPORT Success -s_crea_str (String * dest_string, - const char * c_string ) - -{ - String_size length; - void * temp_ptr; /* To hold result from malloc/realloc - * before actually using it. */ - - length = strlen(c_string); - - temp_ptr = MALLOC_0 (length); - if (temp_ptr == NULL) - { - return FAILURE; - } - - FREE_0 (dest_string->string); - dest_string->string = temp_ptr; - - strncpy((char *)dest_string->string, c_string, length); - dest_string->len = length; - - return OK; -} - -/* - * Create a string from a buffer. The contents of the buffer - * are copied into the new string. - */ - -EXPORT Success -s_mem_crea_str (String * dest_string, - const unsigned char * buffer, - String_size length) -{ - void * temp_ptr; /* To hold result from malloc/realloc - * before actually using it. */ - - temp_ptr = MALLOC_0 (length); - if (temp_ptr == NULL) - { - return FAILURE; - } - - FREE_0 (dest_string->string); - dest_string->string = temp_ptr; - - memcpy(dest_string->string, buffer, length); - dest_string->len = length; - - return OK; -} - - -/* - * Create a string of a given size. The contents of the string - * are unspecified. The LysKOM-server uses this to get a string - * of a fixed size into which it can fread() data. This is probably - * not a good idea since it relies heavily on the implementation - * of strings. However, by using this function, those places are - * easy to identify if the implementation should be done differently. - */ - -EXPORT Success -s_size_crea_str(String *result, - String_size length) -{ - void * temp_ptr; /* To hold result from malloc/realloc - * before actually using it. */ - - temp_ptr = MALLOC_0 (length); - if (temp_ptr == NULL) - { - return FAILURE; - } - - FREE_0 (result->string); - result->string = temp_ptr; - result->len = length; - - return OK; -} - - -/* - * Return a temporary String from a C string, i e return a struct - * pointing to the actual C string. Suitable for sending a 'String' - * object as parameter to a function (IF that function does not modify - * it's parameter. Note that normally String variables should be set - * by s_crea_str(), to deallocate the memory used by it. - */ -EXPORT String -s_fcrea_str (const unsigned char * c_string) - -{ - String temp; - - /* Cast needed to make compiler not warn about assignment from - * const pointer to non-const pointer. Sigh... */ - temp.string = (unsigned char *)c_string; - temp.len = strlen((const char *)c_string); - return temp; -} - - - -/* - * Free's the space used by a String object. The object is - * set to EMPTY_STRING. - */ -EXPORT void -s_clear (String * str) -{ - FREE_0 (str->string); - *str = EMPTY_STRING; -} - - - -/* - * Copy SOURCE_STRING to DEST_STRING. Old value of DEST_STRING is - * retained if an error was encountered. If 'foo' is a separate - * String, then it is legal to do 's_strcpy(&foo, foo)'. - */ -EXPORT Success -s_strcpy (String * dest_string, - const String source_string) - -{ - void * temp_ptr; /* To hold result from malloc/realloc - * before actually using it. */ - - if (s_strlen(source_string) == 0) - { - s_clear (dest_string); - return OK; - } - - /* (Re-)allocate memory */ - temp_ptr = REALLOC_0 (dest_string->string, s_strlen(source_string)); - if (temp_ptr == NULL) - return FAILURE; - dest_string->string = temp_ptr; - - /* Copy the string */ - memcpy (dest_string->string, - source_string.string, - s_strlen (source_string)); - dest_string->len = s_strlen (source_string); - - return OK; -} - - - -/* - * In String STR remove the characters starting with number FIRST - * and ending with number LAST, inclusive. If FIRST > LAST, then - * no characters are removed. - */ -extern Success -s_strdel (String * str, - String_size first, - String_size last ) - -{ - String_size i; /* Just an index in a loop */ - - - assert ( first >= 0 && first <= s_strlen (*str) - && last >= -1 && last < s_strlen (*str)); - - for ( i = last + 1 ; i < s_strlen(*str) ; i++ ) - str->string [i-(last-first+1)] = str->string [i]; - - str->len -= last-first+1; - - return OK; -} - - - -/* - * Append SOURCE_STRING to the end of DEST_STRING. DEST_STRING is not - * changed if an error is encountered. - */ -EXPORT Success -s_strcat (String * dest_string, - const String source_string) - -{ - void * temp_ptr; /* To hold result from malloc/realloc - * before actually using it. */ - - /* (Re-)alloc space for new string */ - temp_ptr = REALLOC_0 (dest_string->string, - dest_string->len + source_string.len); - if (temp_ptr == NULL) - { - return FAILURE; - } - dest_string->string = temp_ptr; - - /* Append SOURCE_STRING to *DEST_STRING */ - memcpy (dest_string->string + s_strlen (*dest_string), - source_string.string, - s_strlen (source_string)); - dest_string->len += source_string.len; - - return OK; -} - - - -/* - * Extract a substring from SOURCE_STRING, starting with char no - * START_CHAR and ending with char no END_CHAR. First character - * is character no 0. If END_CHAR < START_CHAR, then DEST_STRING - * is set to 'EMPTY_STRING'. If END_CHAR is equal to the macro - * 'END_OF_STRING', then the substring reaches to the last character - * in SOURCE_STRING. - */ -EXPORT Success -s_substr (String * dest_string, - const String source_string, - String_size start_char, - String_size end_char) - -{ - String_size sub_len; /* Length of substring */ - void * temp_ptr; /* To hold result from malloc/realloc - * before really using it. */ - - if (end_char == END_OF_STRING) - end_char = s_strlen(source_string)-1; - - assert ( start_char >= 0 && end_char >= -1 - && start_char <= s_strlen (source_string) - && end_char < s_strlen (source_string)); - - sub_len = end_char - start_char + 1; - - /* Will the substring be empty? */ - if (sub_len <= 0) - { - s_clear (dest_string); /* Free and set to EMPTY_STRING */ - return OK; - } - - /* (Re-)allocate space for substring */ - temp_ptr = REALLOC_0(dest_string->string, sub_len); - if (temp_ptr == NULL) - { - return FAILURE; - } - dest_string->string = temp_ptr; - - /* Copy substring to DEST_STRING */ - memcpy (dest_string->string, - source_string.string + start_char, - sub_len); - dest_string->len = sub_len; - - return OK; -} - - - -/* - * Fast extraction of a substring. Returns an object of type - * String wich points into SOURCE_STRING. Thus you should NEVER - * modify the result of this function. (Raw character modifying - * is OK if you know what you are doing, but never use anything - * that might call free or realloc on it.) If END_CHAR is equal - * to the macro 'END_OF_STRING', then the substring reaches to - * the last character in SOURCE_STRING. - */ -EXPORT String -s_fsubstr (const String source_string, - String_size start_char, - String_size end_char ) - -{ - String sub_string; /* Substring struct */ - - - if (end_char == END_OF_STRING) - end_char = s_strlen(source_string)-1; - - assert ( start_char >= 0 && end_char >= -1 - && start_char <= s_strlen (source_string) - && end_char < s_strlen (source_string)); - - sub_string.len = end_char - start_char + 1; - - /* Is the substring empty? */ - if (sub_string.len < 1) - { - return EMPTY_STRING; - } - - sub_string.string = source_string.string + start_char; - - return sub_string; -} - - - -/* - * Returns -1 if ARG is negative, 0 if 0 and +1 if positive. - * Used in the string comparison routines. - */ -static int -sign (int arg) -{ - if (arg < 0) - return -1; - else if (arg == 0) - return 0; - else - return +1; -} - - - -/* - * Compares two strings. Returns -1 if STR1 is lexically less - * than STR2, +1 if STR1 is greater than STR2, and 0 if they are - * equal. - */ -EXPORT int -s_strcmp (String str1, - String str2) - -{ - u_int index; - String_size shortest; /* Length of the shortest string */ - int retval_based_on_lengths; - - - retval_based_on_lengths = sign(str1.len - str2.len); - - if (str1.len < str2.len) - shortest = str1.len; - else - shortest = str2.len; - - - /* If they point to the same string, then we only have to - * compare the lengths. */ - if (str1.string == str2.string) - return retval_based_on_lengths; - - - /* Find first diff:ing character (in [index]) */ - index = 0; - while ( (index < shortest) - && (str1.string[index] == str2.string[index]) ) - index++; - - /* If no diff:ing char, then the shortest is the "smallest" */ - if (index >= shortest) - return retval_based_on_lengths; - else /* ...else check which character was the "smallest". */ - return sign(str1.string[index] - str2.string[index]); - -} - - - -/* - * Makes INDEX (type char) positive. Those that are negative, - * result in a positive number above the other numbers. This - * works as if bitcopying a 2's complement nuber to an unsigned - * number. - * - * NOTE: This code might need to be modified for some arhitectures. - */ -#define POS_INDEX(index) ((u_char)(index)) - -/* - * Compares two strings with user specified collation order. - * Returns the same values as s_srcmp(). - * COLLAT_TAB is a table of collating values for every char. - */ -EXPORT int -s_usr_strcmp (String str1, - String str2, - char * collat_tab) - -{ - u_int index; - String_size shortest; /* Length of the shortest string */ - int retval_based_on_lengths; - - - retval_based_on_lengths = sign(str1.len - str2.len); - - if (str1.len < str2.len) - shortest = str1.len; - else - shortest = str2.len; - - - /* If they point to the same string, then we only have to - * compare the lengths. */ - if (str1.string == str2.string) - return retval_based_on_lengths; - - - /* Find first diff:ing character (in [index-1]) */ - index = 0; - while ( (index < shortest) - && ( collat_tab [ POS_INDEX( str1.string [index] )] - == collat_tab [ POS_INDEX( str2.string [index] )]) ) - index++; - - - /* If no diff:ing char, then the shortest is the "smallest" */ - if (index >= shortest) - return retval_based_on_lengths; - - /* ...else check which character was the "smallest". */ - else - return sign( collat_tab [ POS_INDEX( str1.string[index] )] - - collat_tab [ POS_INDEX( str2.string[index] )] ); - -} - - - -/* - * Checks if STR1 is the exact beginning of STR2, e g if STR1 - * is "foobar" and STR2 is "foobarf" then the result is TRUE. - */ -EXPORT Bool -s_strhead (String str1, - String str2) - -{ - String_size i; /* Index in comparison loop */ - - - /* If STR1 is longer than STR2, then it can't be a head. */ - if (s_strlen(str1) > s_strlen(str2)) - return FALSE; - - /* If they point to the same string, then STR1 is a head - * of STR2. (We have already compared the lengths.) */ - if (str1.string == str2.string) - return TRUE; - - /* Check character by character */ - for ( i = 0 ; i < s_strlen(str1) ; i++) - if (str1.string[i] != str2.string[i]) - return FALSE; /* Diff. found, so not head. */ - - /* No differences found */ - return TRUE; -} - - - -/* - * Checks if STR1 is the exact beginning of STR2, but uses a - * user specified collating sequence for comparison (as in - * s_usr_strcmp()). - */ -EXPORT Bool -s_usr_strhead (String str1, - String str2, - char collat_tab [ COLLAT_TAB_SIZE ]) - -{ - String_size i; /* Index in comparison loop */ - - - /* If STR1 is longer than STR2, then it can't be a head. */ - if (s_strlen(str1) > s_strlen(str2)) - return FALSE; - - /* If they point to the same string, then STR1 is a head - * of STR2. (We have already compared the lengths.) */ - if (str1.string == str2.string) - return TRUE; - - /* Check character by character */ - for ( i = 0 ; i < s_strlen(str1) ; i++) - { - if ( collat_tab [ POS_INDEX( str1.string[i] )] - != collat_tab [ POS_INDEX( str2.string[i] )] ) - { - return FALSE; /* Diff. found, so not head. */ - } - } - - /* No differences found */ - return TRUE; -} - - - - -/* - * From STR strip all trailing characters that can be found - * in STRIP_STRING. - */ -extern String -s_strip_trailing (String str, - const String strip_string) - -{ - while ( s_strlen (str) > 0 - && s_strchr (strip_string, - str.string[s_strlen(str) - 1], 0) != -1) - str.len--; - return str; -} - - - - -/* - * Returns the index of the first occurrence in the String STR - * of the character CH, starting at position STAR_POS. Returns - * -1 if no occurrence. - */ -EXPORT String_size -s_strchr (const String str, - char ch, - String_size start_pos) - -{ - unsigned char * ptr; - - assert (start_pos >= 0 && start_pos <= s_strlen (str)); - - ptr = memchr (str.string + start_pos, ch, s_strlen (str) - start_pos); - if (ptr == NULL) - return -1; - else - return ptr - str.string; -} - - - -/* - * Returns the index of the last occurrence in the String STR - * of the character CH, starting at position START_POS. Returns - * -1 if no occurrence. - */ -EXPORT String_size -s_strrchr (const String str, - char ch, - String_size start_pos) - -{ - String_size index; - - if (start_pos == END_OF_STRING) - start_pos = s_strlen (str) - 1; - - assert (start_pos >= -1 && start_pos < s_strlen (str)); - - index = start_pos; - while (index >= 0 && str.string[index] != ch) - index--; - - return index; /* This will be -1 if not found. */ -} - - - - -/* - * Return the index of the first occurrence in the String LOOK_IN - * of any of the characters in the String SEARCH_FOR, or -1 if none. - */ -extern String_size -s_strpbrk (const String look_in, - const String search_for) - -{ - String_size i; - - for ( i = 0 ; i < s_strlen (look_in) ; i++ ) - if (s_strchr (search_for, look_in.string[i], 0) != -1) - return i; - - return -1; -} - - - - -/* - * Find the first character in LOOK_IN that *is* present in - * SEARCH_FOR, and return its index, or the length of LOOK_IN if - * it contains only characters that are not present in SEARCH_FOR. - */ -extern String_size -s_strcspn (const String look_in, - const String search_for) - -{ - String_size i; - - i = 0; - while ( i < s_strlen (look_in) - && s_strchr (search_for, look_in.string[i], 0) == -1) - i++; - return i; -} - - - - -/* - * Find the first character in LOOK_IN that is *not* present in - * SKIP_CHARS, and return its index, or the length of LOOK_IN if - * it contains only characters that are present in SKIP_CHARS. - */ -extern String_size -s_strspn (const String look_in, - const String skip_chars) - -{ - String_size i; - - i = 0; - while ( i < s_strlen (look_in) - && s_strchr (skip_chars, look_in.string[i], 0) != -1) - i++; - return i; -} - - - - - -/* - * Pick out the first token from SOURCE separated by one or more - * of the characters in SEPARATORS, starting in position START_POS. - * - * More specifically: start in position START_POS and skip over - * separator characters (any of those present in SEPARATORS). - * Extract the substring starting with the first non-separator, - * and ending the character immediately before the first separator - * following. *start_pos will be the index of the first separator - * character after the token. - * - * Note that the return value actually points into SOURCE. It - * is not separately allocated. - */ -EXPORT String -s_strtok (const String source, - String_size * start_pos, - const String separators) - -{ - String_size first_char; /* First character in token */ - String_size end_char; /* First character after token */ - - - /* Check of parameters - we might save some time on this */ - if ( (*start_pos >= s_strlen(source)) - || s_empty(separators) || s_empty(source) ) - { - return EMPTY_STRING; - } - - /* Skip leading separators */ - first_char = *start_pos; - while ( (first_char < s_strlen(source)) - && (s_strchr (separators, source.string[first_char], 0) != -1) ) - first_char++; - - /* End of source string? Then we can stop here. */ - if (first_char >= s_strlen(source)) - { - *start_pos = first_char; - return EMPTY_STRING; - } - - /* Find next separator */ - end_char = first_char; - while ( (end_char < s_strlen(source)) - && (s_strchr (separators, source.string[end_char], 0) == -1) ) - end_char++; - - /* OK, we're practically done. */ - *start_pos = end_char; - return s_fsubstr(source, first_char, end_char-1); -} - - - - -/**************************************************** - * Misc. routines using our String type. * - ****************************************************/ - - -/* - * Convert a char to a number in base BASE. - */ -static int -char2digit (const char ch, - const int base) -{ - int index; - static char * translate_table = - "0123456789abcdefghijklmnopqrstuvwxyz"; - - index = 0; - while ( (index < base) - && ( translate_table[index] - != (isalpha(ch) ? tolower(ch) : ch))) - index++; - - if (index >= base) - return -1; - else - return index; -} - - - -/* - * Convert the String STR to a long, using the base BASE. - * Leading blanks are skipped according to isblank() in <ctype.h>. - * The index of the first character that couldn't be used to form - * the number is returned in *FIRST_ILL_CHAR. Returns -1 in - * *first_ill_char if there was an error in the parameters. - * BASE may be in the range 2..36 - */ -#define MAXBASE 36 -EXPORT long -s_strtol (const String str, - String_size * first_ill_char, - const int base ) - -{ - long number = 0; /* The result */ - int sign = 0; /* Sign o' the times :-) */ - String_size char_no; - int digit; - - - assert (base >= 2 && base <= MAXBASE); - - if (s_empty(str)) - { - *first_ill_char = -1; - return 0; - } - - - /* Skip all blanks */ - char_no = 0; - while ( (char_no < s_strlen(str)) && isspace(str.string[char_no]) ) - char_no++; - - /* Find any sign character (+ or -) */ - if (str.string[char_no] == '+') - { - sign = +1; - char_no++; - } - else if (str.string[char_no] == '-') - { - sign = -1; - char_no++; - } - - while ( (char_no < s_strlen(str)) - && ((digit = char2digit(str.string[char_no], base)) != -1) ) - { - number = number * base + digit; - char_no++; - } - - *first_ill_char = char_no++; - if (sign != -1) - return number; - else - return -number; -} - - - - -/************************************************ - * Input/Output routines for String * - ************************************************/ - - - -/* - * Outputs the string STR on the stream STREAM. No information - * about the length of the string is output. - */ -EXPORT Success -s_fputs (FILE * stream, - const String str) - -{ - String_size i; - - for ( i = 0 ; i < str.len ; i++ ) - putc (str.string[i], stream); - - return OK; -} - - -/* - * Create an ordinary C string from a String. - * The pointer returned will point to a '\0'-terminated character - * array which is obtained with the malloc-function supplied to - * s_set_storage_management(). It should be freed by the caller. - * NULL is returned if there is an error. The String may contain - * '\0's, but the resulting string will be truncated at the first - * '\n'. Thou shalt not depend on this behaviour. Later versions - * might substitute "foobar" for '\0's. - */ - -EXPORT char * -s_crea_c_str(const String source) -{ - char *dest; - - dest = MALLOC_0( 1 + s_strlen(source) ); - - if ( dest == NULL ) - return NULL; - - memcpy(dest, source.string, s_strlen(source)); - dest[ s_strlen(source) ] = '\0'; - return dest; -} diff --git a/src/libraries/libmisc/s-string.h b/src/libraries/libmisc/s-string.h deleted file mode 100644 index 18a5b9622..000000000 --- a/src/libraries/libmisc/s-string.h +++ /dev/null @@ -1,445 +0,0 @@ -/* - * s-string.h - * Our own string type. Definition of string type, - * and functions to manipulate these strings. - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - - -#ifndef S_STRING_H_ALREADY_INCLUDED__ -#define S_STRING_H_ALREADY_INCLUDED__ - - -#include <limits.h> -#include <stdio.h> -#include <stddef.h> - -#include <misc-types.h> - -#include "s-collat-tabs.h" - - -typedef long String_size; -#define END_OF_STRING LONG_MAX - - -/* - * All objects of type String *must* be initialized to EMPTY_STRING - * before using any destructive function on them. If you only use - * non-destructive functions (s_strlen(), s_strcmp(), ...), you can - * set them with - * str = s_fcrea_str("Hej hopp i lingonskogen"); - * But the value of this may *not* be used in any destructive call, - * since str.string points to read-only memory. - - * Note also that you need to call s_free() on any auto variables - * of type String before exiting the block they are declared in, - * since otherwise the memory they use will still be allocated. - * This is of course the same rules as for normal pointers. - - * To make it possible for people to use their own storage - * management routines, you can set the functions to use for - * malloc(), realloc() and free() with the - * s_set_storage_management() function. This MUST be called - * before using any of the other functions, even if you want to - * use the normal malloc(), realloc() and free(). - - * Terminology: - * -- A "separate" String is an object that points to some memory - * that is somehow obtained from malloc() or its cousins. This - * means that it is legal to free() or realloc() it. - */ - - -typedef struct { - String_size len; - unsigned char * string; -} String; - -/* - * Note that the first character is String.string[0], and the last - * character is String.string[String.len-1] - */ - - -/* This is the representation of the empty String */ -#define EMPTY_STRING_i ((String) { 0, NULL }) -extern const String EMPTY_STRING; - - - -/* - * Functions to manipulate strings of type 'String'. - * All these functions return a value of type Success, which is - * an enum of OK an FAILURE (do NOT trust the order of these!). - * - * All functions automatically allocates (and deallocates) any - * necessary storage. - */ - - - -typedef void (*free_function) (void *); -typedef void * (*malloc_function) (size_t); -typedef void * (*realloc_function) (void *, size_t); - -/* - * Set the functions to use for storage management. These must - * be call compatible with the normal functions malloc(), - * realloc() and free(). - */ -extern void -s_set_storage_management (malloc_function new_malloc, - realloc_function new_realloc, - free_function new_free); - - -/* - * Returns the number of characters in a String - */ -#define s_strlen(str) ((str).len) - - - -/* - * Create an object of type String from an ordinary C string. - */ -extern Success -s_crea_str (String * dest_string, - const char * c_string ); - - -/* - * Create a string from a buffer. The contents of the buffer - * are copied into the new string. - */ - -extern Success -s_mem_crea_str (String * dest_string, - const unsigned char * buffer, - String_size length); - -/* - * Create a string of a given size. The contents of the string - * are unspecified. The LysKOM-server uses this to get a string - * of a fixed size into which it can fread() data. This is probably - * not a good idea since it relies heavily on the implementation - * of strings. However, by using this function, those places are - * easy to identify if the implementation should be done differently. - */ - -extern Success -s_size_crea_str(String *result, - String_size length); - -/* - * Return a temporary String from a C string, i e return a struct - * pointing to the actual C string. Suitable for sending a 'String' - * object as parameter to a function (IF that function does not modify - * it's parameter. Note that normally String variables should be set - * by s_crea_str(), to deallocate the memory used by it. - */ -extern String -s_fcrea_str (const unsigned char * c_string); - - - -/* - * Free's the space used by a String object. The object is - * set to EMPTY_STRING. - */ -extern void -s_clear (String * str); - - -/* - * Create an ordinary C string from a String. - * The pointer returned will point to a '\0'-terminated character - * array which is obtained with the malloc-function supplied to - * s_set_storage_management(). It should be freed by the caller. - * NULL is returned if there is an error. The String may contain - * '\0's, but the resulting string will be truncated at the first - * '\n'. Thou shalt not depend on this behaviour. Later versions - * might substitute "foobar" for '\0's. - */ - - -extern char * -s_crea_c_str(const String source); - - - -/* - * Copy SOURCE_STRING to DEST_STRING. Old value of DEST_STRING is - * retained if an error was encountered. Note that it is never - * legal to do 's_strcpy(&foo, foo)', since the string 'foo' is - * pointing to is reallocated before it is read. - */ -extern Success -s_strcpy (String * dest_string, - const String source_string); - - - -/* - * In String STR remove the characters starting with number FIRST - * and ending with number LAST, inclusive. If FIRST > LAST, then - * no characters are removed. - */ -extern Success -s_strdel (String * str, - String_size first, - String_size last ); - - - -/* - * Append SOURCE_STRING to the end of DEST_STRING. DEST_STRING is not - * changed if an error is encountered. - */ -extern Success -s_strcat (String * dest_string, - const String source_string); - - - -/* - * Extract a substring from SOURCE_STRING, starting with char no - * START_CHAR and ending with char no END_CHAR. First character - * is character no 0. If END_CHAR < START_CHAR, then DEST_STRING - * is set to 'EMPTY_STRING'. If END_CHAR is equal to the macro - * 'END_OF_STRING', then the substring reaches to the last character - * in SOURCE_STRING. - */ -extern Success -s_substr (String * dest_string, - const String source_string, - String_size start_char, - String_size end_char); - - - -/* - * Fast extraction of a substring. Returns an object of type - * String wich points into SOURCE_STRING. Thus you should NEVER - * modify the result of this function. (Raw character modifying - * is OK if you know what you are doing, but never use anything - * that might call free or realloc on it.) If END_CHAR is equal - * to the macro 'END_OF_STRING', then the substring reaches to - * the last character in SOURCE_STRING. - */ -extern String -s_fsubstr (const String source_string, - String_size start_char, - String_size end_char ); - - - -/* Check if a string is the empty string. Returns TRUE or FALSE. - */ -#define s_empty(str) (((str).len == 0) ? TRUE : FALSE) - - -/* Check if two strings are equal. - */ -#define s_streq(str1, str2) (s_strcmp(str1, str2) == 0) -#define s_usr_streq(str1, str2, collat_tab) \ - (s_usr_strcmp(str1, str2, collat_tab) == 0) - - - -/* - * Compares two strings. Returns -1 if STR1 is lexically less - * than STR2, +1 if STR1 is greater than STR2, and 0 if they are - * equal. - */ -extern int -s_strcmp (String str1, - String str2); - - - -/* - * Compares two strings with user specified collation order. - * Returns the same values as s_strcmp(). - * COLLAT_TAB is a table of collating values for every char. - */ -extern int -s_usr_strcmp (String str1, - String str2, - char collat_tab [ COLLAT_TAB_SIZE ]); - - - -/* - * Checks if STR1 is the exact beginning of STR2, e g if STR1 - * is "foobar" and STR2 is "foobarf" then the result is TRUE. - */ -extern Bool -s_strhead (String str1, - String str2); - - - -/* - * Checks if STR1 is the exact beginning of STR2, but uses a - * user specified collating sequence for comparison (as in - * s_usr_strcmp()). - */ -extern Bool -s_usr_strhead (String str1, - String str2, - char collat_tab [ COLLAT_TAB_SIZE ]); - - - -/* - * From STR strip all trailing characters that can be found - * in STRIP_STRING. STR isn't altered in any way. The returned - * object points to the same string as STR, but with a possibly - * shorter length. The pointer is unchanged *even* if the length - * should be 0, which means you don't "lose" the storage but can - * free it with s_free(). - */ -extern String -s_strip_trailing (String str, - const String strip_string); - - - -/* - * Returns the index of the first occurrence in the String STR - * of the character CH. Returns -1 if no occurrence. - */ -extern String_size -s_strchr (const String str, - char ch, - String_size start_pos); - - - -/* - * Returns the index of the last occurrence in the String STR - * of the character CH. Returns -1 if no occurrence. - */ -extern String_size -s_strrchr (const String str, - char ch, - String_size start_pos); - - - -/* - * Return the index of the first occurrence in the String LOOK_IN - * of any of the characters in the String SEARCH_FOR, or -1 if none. - */ -extern String_size -s_strpbrk (const String look_in, - const String search_for); - - - -/* - * Find the first character in LOOK_IN that *is* present in - * SEARCH_FOR, and return its index, or the length of LOOK_IN if - * it contains only characters that are not present in SEARCH_FOR. - */ -extern String_size -s_strcspn (const String look_in, - const String search_for); - - - -/* - * Find the first character in LOOK_IN that is *not* present in - * SKLIP_CHARS, and return its index, or the length of LOOK_IN if - * it contains only characters that are present in SKIP_CHARS. - */ -extern String_size -s_strspn (const String look_in, - const String skip_chars); - - - -/* - * Pick out the first token from SOURCE separated by one or more - * of the characters in SEPARATORS, starting in position START_POS. - * - * More specifically: start in position START_POS and skip over - * separator characters (any of those present in SEPARATORS). - * Extract the substring starting with the first non-separator, - * and ending the character immediately before the first separator - * following. *start_pos will be the index of the first separator - * character after the token. - * - * Note that the return value actually points into SOURCE. It - * is not separately allocated. - */ -extern String -s_strtok (const String source, - String_size * start_pos, - const String separators); - - - - -/**************************************************** - * Misc. routines using our String type. * - ****************************************************/ - - -/* - * Convert the String STR to a long, using the base BASE. - * Leading blanks are skipped according to isblank() in <ctype.h>. - * The index of the first character that couldn't be used to form - * the number is returned in *FIRST_ILL_CHAR. Returns -1 in - * *first_ill_char if there was an error in the parameters. - * BASE may be in the range 2..36 - */ -extern long -s_strtol (const String str, - String_size * first_ill_char, - const int base ); - - - - -/************************************************ - * Input/Output routines for String * - ************************************************/ - - - -/* - * Outputs the string STR on the stream STREAM. No information - * about the length of the string is output. - */ -extern Success -s_fputs (FILE * stream, - const String str); - - - -/* - * Outputs the string STR on stdout. No information - * about the length of the string is output. - */ -#define s_puts(str) s_fputs(stdout, str) - - -#endif /* _S_STRING_H_ALREADY_INCLUDED__ */ diff --git a/src/libraries/libmisc/testnumlist b/src/libraries/libmisc/testnumlist deleted file mode 100755 index 103245d0a3816fd38dda3481d15c1add2871998a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmZo*V&rCEP+)*y1_lNONe%`E1&{!U!{Gaafk8#w{XGMV64TR0&(9Jp%4Zmu7!G*t zWMEKYOJ`tUOJrcs@(A$=)@SkqiOm3!Y8LnYF!1Oz`0Zq1V#tW-hq4O%!v3G|cy7Sp zQN_5%qk;iMclqsNG`s(Yfq{WT*Wv#Mj|v6_kG%gU^cnniG1`E|1$Y`j&P(TT{KZ(7 zz`$t2lgG&Y|5Vxs6&nTy`Ttke{XfIh^#30N16vaV69a<+(}i{aFI-sn|B6QyV-m;~ zeZBu5^sN|Y=vy%^&}RUN`0Zji12$Vi*Wv#QeZBu@plT}gtr#ox_5NP~oALtW3Wh}x zm1+!A*8M-D&!nLD|HTCmi@|Rf!vwG#k4F`w63ASSDu$DOyBN{}`gI-tzwui4|4JH5 zM1KNUPM<;FictcL_5NSEw(kE0eP+L13@%_3WE_9}JE80G|Br4ZD0Kh-(5+&~`TxZu z@Ba&r3I;}ny#FsQzWaa2Z$d!7&wU0Szc{~Ag?t7cj|v9X1Q~^V1{seE2KNLZsF-I0 zheAGsfJX%bv!6pMlV7R6ghzl!1p^b<jTH<meh&II3=9nQ3@jki{Tx8yre9iIq@R<S zq@R<bSDeqFpORXpUzJ*v4^9RW$wegwRtkCf3aHAs7#J8-A#$h^3b}~|1(|v23TcU% zIi*FZAcYLV5S1WPV5W01G%zqQH83y;F)%Q&GcYi)g6(7Q`^mt>PysSr)ihK!S%*OZ z0(2Ps!v6mV-pRnk$m0bjbA=Qt8JHLa1okjQ2Z2Nc5^@YI8JHMlm>d`yyd2U!6hJ&4 zmxc`>S&1AAgnF=y092P;fe2dz0~5m!eFlgMrv?E5eTKyU42*Y60{j!i5b_=s4AEfm zm;isjLZ@~A{}i!oTKE4?Zk<9N1Ba5{|38~1<ivs43VQ$l=oav>{Qse#_x}e|!vO{c z2A&271_p*SmIAv3rUC_h28fLP|NsACY=|mQvQJ|vuz{%ZsQUK>Wapg=_x>;lB=C4t z{d)`MABgY|TKE4?0>l3r9N`iR^&zq05=(5j+=;;mmsqfyTmt-YxP=SqmOPX=@&en4 zh$AaV3<&ID;7Z^F%MlSvx6fg?h707H+uH*CK{+NTvA85YuQXRdLBUo*HI$11ERdO( zl3D>3@C*C@2NY}i8VnpBRsS!5btgbY1U#z#p9hQhfkboz{{I2Rgx9+Nf6~SD_5S}! zWcZt+koW(OZU%$I|34A_2~X%B2DeUO4})8qAYtH|TToJ|kXM?UlUZD1#lWSStQyLo z8mf?)SDac@lA6K=;-sYJq=MO@c}1zo`RRF?RjDZo$@#gtiFqkj3aZImpj`MN@jn9t z(+gdP|9?EH{;vRq%q<s4IQ-k;wC?|p0DrG_|9_-0FdQoQbfHh5q2N1+^r-sZ4OS}v zsv`vS{(t9TU`R>#0g-upJPZt6=|wyY3<~Kv2{}9r44LU1JPZtl>0t?R`g;FAfzAKV zz`%A6#Pg{7?+P;O<{q#(!#{_6e;7m(d_Zzwk^c+~Ts<J3N7a7~u*ykbafW|lV3kTm zjJl5he<VmHNPt}8c|f1Rqv}66)!fVo@K0c1U`k;4Z{^egVu8|7SY}a4X=08-Zfb6R zQKdp^MMh$2aY<?l11LoPcvLXRfNhBZg-Qg-|9{eCJgWYmD$szHEns;QFsT;c4@xgi z6TsvO1_@AU0ka8|7WJ9@3SntYMeqNgE$bL~@?}6GAeBm>vWDSlqvA#h1|F7RP#JIw zBFDg^xQ;=9hXuq7nxLZh{|CtJAQM5guV0~V9)k!trSm8V1UGD0_y146f<hhx57<;a z1|AiLr%jidlpF&*6({nrfJ>K4Ao<`4Aku3>TA0^527xp=koig=eJdFxKy0rGX&fNh zX$1pIf|^1eg8)cYF_S?8BCn>wz_M)}15X+kNR?t9g8&1Iz8(V)C^T*uMELu>W8nG! z1?tux`b>!o|5kxQ5)?itCh;id{r|%tp_|7b@c#$MO&~vRnUEs~QmMc+VI9O~CB6SY z6gSGSfc@|z;TlL5WR8m9lywXO3QZuL3LsV<1BZ$R0}Cj8VQ%~Xhk->!5AGUJ+=_tQ zdA$MTB1GK&eTN#i*CW8HywKv71!Q;8e?><I4p1l~Vwr&f6c%0+!VeTN9%xixK*;?6 zqR*tS$H0-uz?h@!@c&1If64zX>;C^p=TXsP-~q9cm=f5)Y4Z)p3{Z&#E{zx%pg#To zM?vsugMtAE15*R2e%Y{&fhU!LVU^Rm|6f4v0r_vsgd7Hj86cj5-v2KO20SbXwaF0E z`%q<(Y9|L&8JHbON+3Tf>HYumwDCftf<u6Zf&jwQRF(q91dE_`|Gy-N!St&b@IXQz zBqsxwWB4Bjl7*C}2@L<$z&>SC(fj`annM0SLg(Ke1%?QJuZDECg8vCN309!6PzX@c zU|?Zt1i47p5uDaJz-b1YK0!H0F_3`=q|#{xg8<02NZ}4MHwDRDwFDKAYTXP57LaNG z|0w05hc1!{U-X$ks=@KJf`KEAff3Bt&0ydG>1N>2&48rb|9?QWKP1$V!qo=kB2enZ z7JkW6FtdZ26rDiniGe4mA%TH$LjowT{s>wJ$`k+pK=XtFNHy5CdjEf@81k?%HGx6} ztTT@R6e>R$1VCyOG#EG%7#On<p$<w-X+j{mlK&v}1^*Km7`+lqKq4R$RWuneP5Xls zu6Ya`P*X)fdO#^OXdMF&$lP=WhF>6?K;~dgrROkG=^l`J%v73c0WuqGj^6(-SbYd} zlVaZgFGzl^Lp2X6{5_!Ik3Ic@N;VF~JO&;HaB2dlD{xwZny<&elb{5Si!acWYz49j zo|2hB;mClTlHWkm3nY{wsrqk)uEYN?5&m1&{r{3)1Wrlo{(niz0QnUZj^Hqi0+|c; zIc7dLa$5KQ14tf}W427lQ3A0Q^!|T<q&83*0G9_W2@H%8LF@j1NVo)20d?g9usxvE z{sUZ#8zeIPlv4ngRiNCXz@Y5Fz@pFqQl$`3!U!%)ITQlGp#n0INg?n552d{SKTzXV zNsoaixN%cM8Yo22<RRe?ZX3%W>jwFq;}C<KViO0bbX)<FD`D9(AvX=gg4qEzc>@PS zngyn~3M0oM26>PPAURN;Q*uxcM3~IO5;QSE1X)gT9Rm+o)GU$VhYG~!iXcCO{l&nc zn90BbsnrxR7+ByTkiozL3j-z&P<Ud7csj^;pnMOF3537XnG!%@cL7x&L>}B5FhP|8 z#UaSwL7)(ofXP99C9l}T12V17Yu*13`5`b_SbYF76&%{2@B+IBCI>SY98*#VolujZ zF~O(;k^#pA0|Pjv=?46NqoVi!%@&Z2Fkij_rB5Z~cFLQCTVOZ2f%JpI=V=4T7r~92 zK(S|lE{YO&V0R+i!NZaOF0Y{Nm=F1W(46}LUUKSzO2-Wo(%@kS)eR0G?5b55K<Q1P zDS;2>7D#FUsa9|ZnvkFY9xu@Q53MP_2SL^S0i`O4+MtP`_ARJRP|^GU0$O9e@OW+y z&O^vK{bwIiPKVX)Uy{ISfdx|Q1pNO4YEgspJOjfykZqt)Ma^5_+|0l*2QA+-Fm!>` zgTfi)^DP^ASkePvB9O8Gk`}-z44xJsGN6<IGB-&9qytn+fXqRaOJPc2O0WURW6CA7 zBrq^1fb=CW{Lj(N`~L@0H$h7ohW~mA49u`r1X6zRYDklThVc(jiycxXezgPjxDptc z;qij%k~BzK(EI-(cmt^Q3$9(Erh<F|a-)*o{|`?al?)^pAgzN<4QU3LHhsAQiEB{V z8Qi4n^#29Z29OClED#qk^?=L*`4>6QfI=!Q10fT%frA0YL%0+qg2fd&SX=>4%?b`` zARjeDTwnup0T;*|bQeJLQ9~L$Zz1dj$$?7>Er{PVK&G}pO!Z-bh-vBl{{Rt*0hJxg zV0J)Efus{~nE~o=fb)C_^OgxYE+vehJfABCa!*KuJ_91ozL<gYffCer&>ZsxoSq=5 z0F+)qYEbP0g*M2=;4%nHss!8d0c1}i!zXBL>FE9c5Y!g3AqNyjJP8a8&p^I{gf(hA z6l5|uESzwu0FT9dfcYhn;Zp%frGkSV$d2~V4K*-3nn3PW5eNdMk~a|lZ&>&LO&+Yi zeFGW~0`;hroGx`LIYxr}RKe^1ze%_RG7-gfpxUtkR{9{zmhfC@P;gQJmt|mid4(pB zyn;i>1fO>dfBs(pl`sqp3``7J3=AwH3``6~3=A9~x{85;3q&_DFz|!uE(Qi+5Iu>3 zK?p?8Vqo9{(Tf-uBtY~k1_p5uy@`QA3`Fl@V2~66n+zGD0}bU#LPqHr_!t-%c%f|2 z=p7FO0|N^K0|Pe$0|O%i0|O@m0|PT?Y!^DR2hz*Nz`!656$5DnsR5Y*(jy2O9%Eo& z;Ada}n=Jrk3o|e<fY>q&3=AMOpwU7Q7Gq#w0Lg*e2g0HZ3=AMF%fP?@l9PbiCC$LV z0Afpl2Dm|%GB7ZJ*dQiI4n%{@mSbRG0O<wsL2MAsz{<eh!@yt#($CJ$!1j=ViMayg zK28SKGf=iLD+4PZblhB$k%4&uSR(_2JUausC1`Y&fq_Ajm4UgAfkDlJfq_Avm4P{l zfk9~o0|SFKBLmwbsCp-M2G%0b2rvT!gEu1s3n;6Bq=H!)n3q7+$FnjpK4M@{+Qh)X zP|VK2tOpviWME*ZWMp7U11V-;U}$1w-~hQ7#O-2bU{PRTPzA-+OjZWAjSLK$Y77hv zD;XJBKyd_8v!0QG9b_Jey^WQDeGdbJZVLkg!!cF{Hctiy!yE<%hHH!rY^y;E7#JAt zF*2|&fwG@7GO*o%vfnW>Fjqp^UsxH~y%`uZ8yFZESy>s_Ll_t|XE87^in1~=_AoGL z3o$S-Dzh>$r!g>S?P6eHG-737+{VD59TJ~fl3G#15TBZoSdz#PpPHA#P+XE&1QMyp zEMbU`cZu|K^!0RRh|f*T%!A0qr{&})g5*-cN>cO6GK=!_7<`M%GfR>)7}CrvEG!J; zON&!e7(hdSpwX}Ry!@2Z_=2L$JdnQ3{3M3>__Unjq|!77h-ex@DO447+$=u1C^fMp zl_9>Mw4|6JzBoBC4@oU#C=H<(GMWZ*Y)(#oGDCbC*swH)_{5}qkf+j$Qd1GCGmBF} zLv#p%+|=Bp)FK2wC$YE$!Ar|5Lgway0uDYB5Aii9$$tUW?a;i$kPMBWQED^<MnhmU z1V%$(M27$~0}}%e0~3P^{!oy7!oVPTg@K77hJgt*3?q7hfk8}zfk7O$R)C#>L1GF6 z1ET|UEkOdP-Q)KYVrt_5|NsAgV_*Q&?-&@t^fLw~Fny1K8BAYeU;)$T7+AsdF$Oj; zy^nz%OmAc00MqLjIKlKX22gtvY=MJ@vZilxQHh~mv4WwVnSzCdzJZaxfrWx|enDlC zf}y2_sX}mRo`P>?GIUBCtPMfHT0#gB1_mZ9f^1C4Dn{9(Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF z0;3@?SVDjWv>+2SR}Wg#2wJ=eUB@U2VT0Ew%0k(ob&c9cY|9j|FO)#y?$9-6AdyTY zb~O@v5fXbh68k0+`#XZoD2T*1Mq-B{v5S$|{YdPENbD_0>@!I08wfTN8xq?LiS35O z4nktbBC(PD%T$CUj^uZyRwVHWNbK22?4?NTO-SthNbIvn?CVJEM@a0qNbDa7HZvm< zn;VHOio}*hVml+T{gBv^NbC$Gb|DhG3W?o}#O^_2Peo$SLt?K)Vk5;J^8+OD*9bNX zQrxkqA&DcWNd^}N25IQJSrA*Efk9~-D6zVL7py3|K-r2649Wpewh{w_atxHM!oZ-M z1!b!-FevYWvK1H@l#fB#nhXre=b&sY1_qTVC|jF>LFEMl14|r|+mO;K%SnVdD<2YD z9<nG0wAPo^43x<r>!w-lKx+Q~|Nn=9fz=7h{=vY&>H%7z4_W)n>iGa<IRldih;m_I zFodoF2Kn8Dfk73tej3C!WnfSRTjRpOV8+0pY6ewr&cL8*2W49@FsQ=Jv1DLSg@unb z1A}TDRE-S-gX$Xw239YyVc_+~tT9M#PKUY^<mNnxJDG|Y7+CWm?qv3Xn&SjrBMow! z8v}!y4OHBnfkDj;%JyJjP=mR_i-AEc0xIs!z@P?;FMkFGHSl_97Y2p^1_m|Ii5DO< zgBTdp)<D$<Gcc&Z;xUAQLG1)oJd}Y!?E;h?!N8z)4a$yWU{HGkWk)eEsC|O6qZt^~ zenHuB3=HZZCdjUM1_pI-@#?|=T6U|>0g`ZGU`S(NPzSGFa$#UdXJAkVtvv^+&t_my z2d&Kpv2z$0)O8pbSPLNG30gPKT7eXXbx<}a-n$^-$vlUFfwdbd{+)q=6`a5R|NsAq zfq`{4RLwC42G%){FlT9EU|^jKW%n>Ju+D>&?dk>$46G}V*xMlGJXrhy$b67L7#LWQ z${beM8e;|q1~zGg8a5LoHd6V?R)8elg~VQi#6FM2euH4Mb0D#$kl4CNY*!?9AQHPC ziM<|)ja0_6pGFeDhQvnlFFR8C!;a*4_J0WV9GpmO5hS)85?dRIZGpr_s&_a7ki?^r z*l9>?q_UR-sqE!wK~mF)#GZ!4-h;$Gj>Nu%#D0jxeuc#TjKuzfU~{q}v60F&PH`l0 zB_uXd+;Jk+FPtezYLMcNb3T$dQkvwv4o$aSpfu_N&W!3XwiW|}x*t?rn}I<cR#xaR zFsOr*xC;Y=E(3!)XnzMN4;nBqsDrJ6l%MKtP`$<s4C;MQwh04+`ZNXxPNek7g;a-f zg@X+MDQ4iBgT!77$=4vaaUBJTL&|fmGmw1BAjiPKbrzC0LFEP4IjFy8fsArtU~pn! zP=~Qy85q<TLB-t|7}U2w*&y*#P_{b*gF38C^I%|5zXuifWMEK#!oa}w9O|A~3=G_` z4J;fC4BXt%GMtBjfm;O17GPlD2Ip~zo4MtoZZ2S8;8uXTc?$yrw<6TdZ=iNXGBBva z*s%-@>ffN^aSRL^u<|gLfk6Z86c+}Dcm@UyEvT9#1_liSC_9;fK?Agp1{6mr3=A5u zdMcHHK?4@oX$%Y+K~VJ>3=A5uxXxr?(16wBSquysu(-})V9;oSs?TF!(CA}e;5G+4 z1ng$+0I1(VVG<2xgTf>Q$_9l=5tJ>$z`zY|`$5B}9vVJJ7#O%4AmPIp$H2hd2ninz z&^{oLUuqZ_;Oqtl290@8_cSsvXe@)Wn-~~0VDa0+z@V`YD&ES#paF|tkoXIzcsm1w z#ycpxgMmTgAC%q2z@Q1Mo4OeoG(r2PKyK(^V9=CfVBnq#@jJ*p+-soz0{MM2lnwIx z9w-~+cce7TeG!_Te=sm`UxoOcF^_?P`x?~mF!#)a?nMIGJBNWm6BgHV85lHS@jH)! zK@+?W%7uYpJ_Cbh2-N+H7#K8Rak`j+K{E*|zJ!566BfVA7#K85pyJCJ7&L1b7`U%P z`~}(r#SJdUpmFp8>ds#b4BQ_f?qq_sNkDt1Kwbj5a}xuDCTMRIh`pJCL30`d1NSGW znGFmKJZ#V~fz|c<Ap4#eK<bY$Fld6MT^JaSGB9Yu+9Agn7&H$--Fbq6K@-*vImy7F z35(NH3=Ep!eO4|E45t|wG+}w?90P+E%&zkc3|ipz*e(nVmlzndU~P#j3=CSZFucmZ zpj8I7>ly=tRuz<egMmQ{=Es{13|f<*;-?uHw5CDX_ZS$oU}^FJ1A`XK{SO%!v^Fs? z@bE&zVHN`ej{?}E3=A9$3_R*kHV*>>j~>VpNSO1OLfJnU7<g=;>@N%qJPwe!U@Bl> z;Bkb+1v4yfet_&31Bd5l1_muy`v1bfpapAte`8?Kx&n3ccLoM6SYG(Sz@P<dv;AaX z(1PWK-wX`eu)Oe>fkB&(fq};f;up}~G@f9n`$2w*g1Yk$0|QSI#GTB23=BNUP<KMh zRnWP5pgnFNcQW!ZFldWG+{4Jvz@QC{7e+w_25lXvxDW$_Hni={D8j&?9l*fAlLB!A z$Q+&$BsU<HEj-OoH#}ot;Aw%l0kq!_Y_9@nKONM3bp{4)Xn%xJgMmRCnnxHl85p#o zd4y4mfkC?ts$Q3YK^s~wG3qfeXhZu-jQR`=+DD*j3>g@-q3M&+lz~AT8s>~<3=G=P zw907Cz@QCnGc#H+Fla-=oY9hjK?j;{8SNMtbfD!AqdfzI4tVdS3wSSq4mb#07#JNH z7<BZY_Bt~#=)l6tg@Hi_nok*B85nfJplaM17<8b06Gk5f1|67xeHj>ZilA!z7#MV* zd4bWNfk6l6_W%Y4ojFi7K@1E!>!9pl1_m8yUym__fk6ix+%61^p$rT<ub^te7#MWE zK-p0Y3_39XMl&$zg7;*)Ffhh2FzCYEAIrd?3(cFLIzbm&e=#O7Fz7<dI>sah23=@b z#~8rCpql_SKb?U=Hv`JfVqnmP`6ZiyLAQp1fu|K5cnsPh3=BL|k<!l`C>xX?7bB(T zRZuo4KZ3^}{{R0E%8%P1X^cgSfq`c`*wYMburM!!?iFQlVPLFfV9@P?x~HCjL3aw2 z-N3-03%1gQfw7T+K^MH&)P;euiGe{E+W%r~W?;|-TjRpO*uub|dk3nwm4QJQ+Gb#E zV_?t&SD6qsda(4<$-tlo+TRLtLq7w99(ZrB3j^Z>1_nKF5V$ZfPG(@xgVryMQy3WZ zU|~L$fk6)z<}(-=^k8{p76XGGEd9@6V9<lsxs3A|81$fJ4&wp_20duskZ~acgC4YO zVO-3>pbvA;3I+y!m>X6yFz6dW{k4jLK_BLZ)eH>!u<%^Vz@QIv!&U|ceOMaa#=xKt zEt45{F)-*u%VfsA3=H~bpk^LnV9<x<wc`v71~7Y1GB6lG+enOO7#Iv-{yodUU;s;3 zAaPi}ILE+X0BsjBo@Zb%fW_kl1_lFIUbw`-U;rxzE;BF~z~bl%c&LE^T>e~RU@(N% zM~pWa7z|<g_W=WgA+&yHe8|9H2pwBse8#|F2us_~85j&x7#MhVfIR`;kIZu#oQNQG z$|Wcpl!n3MhtN6&JVx~Y|9?;#egRF-pfn8br~Lo_{{sU94|t66|NsAQ7#MhdgA*MC zTNDEW&mTzI<}!hX=O^giXHdHO$-rO;D<^+5Fc`whia!hthOjjMmw~|$T0b)WXJ9ad zw#h+zh74Ch%mi&JGK7X96B7f2A+%g&VrF14gqEL7><kQs&!Fl#7#NJ8;lsqkz+eQ8 zJ0@NR1|w*j2c*{sI@ZA?z`$UX2h}Ucz+eP*Gm|g_gAue2Ws+iGFoO1Fm}D3jjG$#5 zlL7;S(GI9yB?bl~XxYxB!oXkz&5ulK3=GE5x{^tqfx#G>*O;^z7>uo;dUY5WjG<*0 zlO6+uG0dF?3=GCSP&I}O494InbYWmJWneJg0~I%CU@(TZZI~<=7)+r30wx;<1`}vn zVzOmmFoD_Sz`$SvP1{V43=Af)uyST#FoBK{F}X7^m_W;a(0G^$w9Uih$-rO&ZObwF zGccII+!n;ZV6p=0o?r$B6KH#kDU^Z11e`=%7?>g%7)(JC%izMm6ve<`3a!VP;u#oB zp<{_m2@DLT(EJ4!hvq4!L<R;^X!>DFVqh?Zg?};wgDET=(is>`k1#Os{Dq`{&>nnV z0dRnU(?72`l+DAyzzZHvfTVw3@c1Vr{qw@wT3;9#crBrM;R6E$uPv1QhJk_C5t9D7 zTo@R5oxq-B;G4q0!0QYyXc<f|Ffj0XBF;eI4M3cMz#EP@1A#XNaRvf!65^}_-VDT9 z2fQVS^9^`w5oa3kb|TI+;GK&&(|~s|;_L$6O^CA#cn=}YDB!(>IHQ2~5#r1N-p`0L z2l$u~XAbZQBF-G(Q-Ga0z`($#hd5XObWW{aJ_BS!VLn4iYH<m4>%U$;Lwa&@d~$wn zL1s>BiXMtwGDBuwiB*ZAZIPk1u92aMxrv3bnTdrpoM~>&kercNWL08hTV!NyU~On* zZq1OBpO>xx)@Y1RV`*M-W_n&~3Ph<1NU4Fft|3%Es;ntOwm2ids05<N3?!;+Y-Da` zVGSZ-b|V~M4pIRz6`~K-SPO`>nW?F<Db!xDUQ|_<5LF<jL0t^-v!MY<Lf6p90^)DD zE~qp(*bJ<VOiisBz^6G_l^7a<w3t{MSTm&LmnP+;T9p`r1IYp;1hyM44h|8pcv*gC zidBiBsjZ<YLwsg_QfZo1h@qKnv5`T1a$bp*p^kx$v5|FrK}nI7p}DP=p`nhk5lAG4 zAwDUwIMvF~T*u4=BoLoenpT`yWo4*iX$Iz}<s_zCndulBS?Cy=S;sKMr)B1(S{dmW znwaQVSX(m`XQmgYmc)b707G#>YHA9IX~IyF4AKZ<n=&LPgJ?rThJsA6tRX`#=opF; zs}c)_yqwIuY>>1WLvl`jGMH)1P?DLO3KBGCh>wpi&a47+3>gYaic&Ju(m*nXAenMd zFoJj%3@}Be3~)hXhSGSD0;>{3Lx$3LaO{GtER6@JJQIe}cu;U!m6$S=A|#=5@r9*{ zAjgInTG$p_lqKd^8Cu#V78!z4u(h#{fsUDpwKW4&QHh}iLrP*wN)gB{#tg|YrjdcI zmJvf{UOq_Nlp!Ux48$;F$cOmBn4uIBAQlYiFh+K2B}k1i1Huf3w3PVV#NuqL5@Qgv zIJLwo#K_RL*w`p7r8qt*v!vL{$O!5-bFkZtOwFvVVQNc^3>lpA^K-09jErql-5h;_ zU9AjsLV`kFtqgUn8G=iblT(X}txAkcY*YQctqe_d+#Ef9LW5jEiNcz}4{~lU_~a0) z5+hUFiehNF01<*IuqrV!L&#Y%Kowbq7=e=^_|Oh3BXe6VBU4CX1Rd&OWn>Odh#)@b zoDwTjXi|g-<fo*9R6$ZBSSS;8da;!uI7u2CSzE)bg19Hd$kevj$Re*a7i3scYEdyP z_2-p>P8BJ(GO~aMmWj0~$aX_B1M3(D&@mz)iwrHn83WZ+$l)kfZic1|c{zDj1xDr! znO24%i>*u<7(g`mbQSO^Cs0*Z1xA*(T1IAI4Mye+3=E)?Tddp+8S-+hj4T<_GV?Nv zGg4EmjEor=VCM`Qfs6th31WcE#3+2B;i@-U@Pg`{(Smoh;DwcxqXjScd~;B-2P!$h z#Ubq2CTOWKOiE+OSyWbOM&^jp71i621F1k_u!0m490+l%G~~h@T%{C1O7sF#aN*8? zIB^PmYF0{W4yJifL8xJfG9OfHfoh3@qSP|5&5$|+W(}zFKsUd*ASbf~)wN(DB(oVn z4nZ|3FSQ(EKD0_gR7TK1ax=1o);I_$=z&{SZbrr+xdM<9Xf+QxdJ9d)ssK{&8JUCc z53qs-5HwZALn?PSkRnhJFhKaoH6y6vwn8WXbHSA&%m{Gxi%^hPnu}y9w8n=<3rq_n zE|IERP~aiyf>{EhK{01#2sR+g$`Gl_hMZJ}-4H`7NCGng(O6B%%umwGXTW`U8>q@h zJ**9ON*m;yGJ>bG!TbttSs)T5ByJIWNKhd75MLqq&<IBeK%yDJ2l)=c1IHhN3yK@i zz`!UT4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z Q5Eu=C(GVC7fk7Gq0IWWazW@LL diff --git a/src/libraries/libmisc/testnumlist.c b/src/libraries/libmisc/testnumlist.c deleted file mode 100644 index e63e15473..000000000 --- a/src/libraries/libmisc/testnumlist.c +++ /dev/null @@ -1,109 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> - -#include <misc-types.h> - -#include "numlist.h" - - -/* ================================================================ */ -/* Some useful macros */ - - -#define IS_INTERVAL_START(x) (((x) & INTERVAL_MASK) == INTERVAL_START) -#define IS_INTERVAL_END(x) (((x) & INTERVAL_MASK) == INTERVAL_END) - -#define NUMBER_OF(x) ((x) & NUMBER_MASK) - -#define MAKE_INTERVAL_START(x) ((x) | INTERVAL_START) -#define MAKE_INTERVAL_END(x) ((x) | INTERVAL_END) - - -/* ================================================================ */ - - -void -numlist_node_print(Numlist_node *nln) -{ - int i; - u_long num; - - putchar('['); - for (i = 0; i < NUM_LONGS_IN_NUMLIST; ++i) { - if (i < nln->num_numbers) { - num = nln->numbers[i]; - printf("%c%5U%c,", IS_INTERVAL_START(num) ? '<' : ' ', - NUMBER_OF(num), IS_INTERVAL_END(num) ? '>' : ' '); - } else { - printf(" ,"); - } - } - putchar(']'); - putchar('\n'); -} - - - -void -numlist_print(Numlist *nl) -{ - Numlist_node * nln; - - printf("last_num = %U\n", nl->last_num); - printf("last_index = %U\n", nl->last_index); - nln = nl->first; - while (nln != NULL) { - numlist_node_print(nln); - nln = nln->next; - } - putchar('\n'); -} - - - -int -main() -{ - Numlist * nl; - Bool finished; - - nl = numlist_create(); - puts("Empty numlist:"); - numlist_print(nl); - - finished = FALSE; - while (!finished) { - char command; - u_long num; - - scanf("\n%c%U", &command, &num); - switch (command) { - case 'i': - numlist_insert(nl, num); - printf("%U inserted\n", num); - numlist_print(nl); - break; - - case 'd': - numlist_delete(nl, num); - printf("%U deleted\n", num); - numlist_print(nl); - break; - - case 'q': - finished = TRUE; - break; - - case ' ': - case '\n': - break; - - default: - printf("Unrecognized command: %c\n", command); - break; - } - } - - return 0; -} - diff --git a/src/libraries/libmisc/zmalloc.c b/src/libraries/libmisc/zmalloc.c deleted file mode 100644 index 80a200707..000000000 --- a/src/libraries/libmisc/zmalloc.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * zmalloc.c - * - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - * - * - * Any opinions expressed in this code are the author's PERSONAL opinions, - * and does NOT, repeat NOT, represent any official standpoint of Lysator, - * even if so stated. - */ - - - -#include <stddef.h> -#include <malloc.h> -#include <string.h> - -#include <compiler.h> - -#include "zmalloc.h" - - -#define EXPORT - - -typedef struct { - int refcount; - size_t size; -} z_info; - - - -#define REFCOUNT(pointer) \ - (((z_info *) ((char *) pointer - sizeof (z_info)))->refcount) - -#define AREA_SIZE(pointer) \ - (((z_info *) ((char *) pointer - sizeof (z_info)))->size) - - -#define MIN(n1, n2) (((n1) < (n2)) ? (n1) : (n2)) - - - -EXPORT void * -zmalloc (size_t size) -{ - void * memory; - - memory = malloc (size + sizeof (z_info)); - if (memory == NULL) - return NULL; - ((z_info *) memory)->size = size; - ((z_info *) memory)->refcount = 1; - return (char *) memory + sizeof (z_info); -} - - - -EXPORT void * -zcalloc (size_t n, - size_t size) - -{ - void * memory; - - memory = malloc (n * size + sizeof (z_info)); - if (memory == NULL) - return NULL; - ((z_info *) memory)->size = n * size; - ((z_info *) memory)->refcount = 1; - memset ((char *) memory + sizeof (z_info), - 0, n * size); - - return (char *) memory + sizeof (z_info); -} - - - -EXPORT void * -zrealloc (void * ptr, - size_t size) - -{ - void * memory; - - if (ptr == NULL) - return zmalloc (size); - if (REFCOUNT (ptr) > 1) - { - memory = zmalloc (size); - if (memory == NULL) - return NULL; - memcpy (memory, ptr, MIN (size, AREA_SIZE (ptr))); - --REFCOUNT (ptr); - return memory; - } - else - { - memory = realloc ((char *) ptr - sizeof (z_info), - size + sizeof (z_info)); - return (char *) memory + sizeof (z_info); - } -} - - - -EXPORT void -zfree (void * ptr) -{ - if (ptr != NULL && --REFCOUNT (ptr) <= 0) - { - free ((char *) ptr - sizeof (z_info)); - } -} - - - -EXPORT void -zdestruct (void * ptr) -{ - if (ptr != NULL) - free ((char *) ptr - sizeof (z_info)); -} - - - -EXPORT void * -zuse (void * ptr) -{ - if (ptr != NULL) - { - ++REFCOUNT (ptr); - } - return ptr; -} - - - -EXPORT void * -zown (void * ptr) -{ - void * memory; - - if (ptr == NULL) - return NULL; - if (REFCOUNT (ptr) == 1) - return ptr; - else - { - if ((memory = malloc (AREA_SIZE (ptr))) == NULL) - return NULL; - memcpy (memory, ptr, AREA_SIZE (ptr)); - zfree (ptr); - - return memory; - } -} diff --git a/src/libraries/libmisc/zmalloc.h b/src/libraries/libmisc/zmalloc.h deleted file mode 100644 index a11a8c256..000000000 --- a/src/libraries/libmisc/zmalloc.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * zmalloc.h -- Memory allocation routines with reference counts - * - * - * Copyright (C) 1990 Lysator Computer Club, - * Linkoping University, Sweden - * - * Everyone is granted permission to copy, modify and redistribute - * this code, provided the people they give it to can. - * - * - * Author: Thomas Bellman - * Lysator Computer Club - * Linkoping University - * Sweden - * - * email: Bellman@Lysator.LiU.SE - */ - - -#ifndef _ZMALLOC_H_INCLUDED__ -#define _ZMALLOC_H_INCLUDED__ - - -/* Declare 'size_t' */ -#include <stddef.h> - -#include <compiler.h> - - - -/* - * Allocate a piece of memory and set its reference count to 1. - * Allocating a zero sized object is allowed, and results in a - * unique pointer that can be used by all the other routines in - * this package, and must be released using zfree(), but it - * points to "nothing". - */ -extern void * -zmalloc (size_t size); - - -/* - * Allocate N contigous objects of size SIZE, set the contents - * to binary 0 and set the reference count to 1. Allocating 0 - * objecs, or objects of size zero, is allowed, and results in a - * unique pointer that can be used by all the other routines in - * this package, and must be released using zfree(), but it - * points to "nothing". - */ -extern void * -zcalloc (size_t n, - size_t size); - - -/* - - * Reallocate the storage PTR points to the size SIZE. If - * "others" are still holding references to this memory, they - * can still use it, and the caller of zrealloc() gets a copy of - * the original memory area. NULL is returned if the request - * couldn't be honored, and the memory area is still in use by - * the caller. Reallocating the NULL pointer is equivalent to - * doing a zmalloc() with the same size. The same rules for - * allocating objects of size 0 as for zmalloc() and zcalloc() - * applies. - - */ -extern void * -zrealloc (void * ptr, - size_t size); - - -/* - * Indicate that the memory pointed to by PTR is not used anymore - * by the caller, i e the reference count is decremented by one. - * The memory pointed to might be released as a result of this - * call. Freeing the NULL pointer is a no-op. - */ -extern void -zfree (void * ptr); - - - -/* - * Free the area pointed to by PTR regardless of how many are - * referencing it. This invalidiates all pointers to the area. - * Calling zdestruct() on a NULL pointer is a no-op. - */ -extern void -zdestruct (void * ptr); - - - -/* - * Add onother user of the memory pointed to by PTR, i e increase - * the reference count by one. Return value is PTR. Using the - * NULL pointer is a no-op, i e it just returns NULL. - */ -extern void * -zuse (void * ptr); - - - -/* - * Get a private copy of the area pointed to by PTR. If - * necessary, i e if others are holding references to the area, - * copies the contents to a new place, and releases the original - * area. If you want to keep a reference to the old area, you - * should do 'zown(zuse(p))'. - */ -extern void * -zown (void * ptr); - - -#endif /* _ZMALLOC_H_INCLUDED__ */ -- GitLab