! Short Notes jaspu needs "credential" datni needs s:du'u:du'u/quote/string of letters or numbers: liste - s/physical object/actual, enumerated list (as opposed to a description of a sequence, which is porsi, or an unenumerated grouping of items, which is cmima)/ - otherwise you can't use liste even for verbal lists! tadji - deserves a rafsi jbovlaste voting in error: mutpaprylu'a, ckulu'a, rejlu'a all usefull, all words for same type off "reference". Is "reference;with author and audience" useful/good? Except do any of them have different place structure anyways? Yes; places of document word should be associated with target. ! General Comments !! Theory Of Minimal-Length Word Use This document attempts to, where possible, develop jvajvo that completely and rigorously match the meaning of various computer terms as viewed by computing experts. As such, many of them are very long (although c.f. German) with baroque place structures. Before you object to this, please understand that they are *mostly not meant to be used*. It is my belief that a Lojban speaker should use whatever word has the place structure needed and does not introduce confusion given the context. There are not going to be very many times where it is necessary to say samterlutselmutpapri instead of se mutpapri. {la'o zoi lojban.org zoi samterlutselmutpapri lu la .lojban. mo li'u .e so'i drata la'o zoi ...paypal.com/... zoi fa'u la'o zoi ...teddyb.org/... zoi lu .e'u ko dunda li'u fa'u lu gubni datni la .camgusmis li'u la'o zoi paypal.com zoi fa'u la'o zoi teddyb.org zoi} is a contrived but reasonable use of samterlutselmutpapri because the whole place structure is being used. In everyday usage, though, things like {la'o zoi ...lojban.org/... zoi cu cinri mutpapri} is much, much more likely. If you only need on place, and inspeficity about the exact nature of the item you're discussing isn't likely to be a problem, use the shortest word that fits! This is especially hard, I expect, for English speakers. English has a ridiculous amount of words, and (much worse) defines "good writing" at least partly in terms of using the most specific word for the job. An English author would almost never say "A attacked B" if A is using a gun; they'd use "shot" instead. This is why my current draft (as of 1 Aug 2006) of {la nicte cadzu} has many instances of {xumjimcelxa'i} that need to be replaced with xarci or gunta. With fu'ivla, some of this doesn't apply, but there the likelyhood of the audience being unfamiliar with the fu'ivla imposes a similar constraint: if a more-well known word that is (at worst) not much longer will do well enough, use it! In summary, I assert that good Lojban writing uses the shortest, (usually) *least* specific word that doesn't introduce confusion, in the same way that good English writing uses the most specific word available. !! About mutpapri xorxes and I have had a long, running discussion over the years about some of these terms, with "web page" at the forefront of our arguments. xorxes has asserted that papri has the place structure we want, that is x1 is a web page in web site x2. I've eventually come to agree, *however*, the actual definition makes papri sound like a physical page specifically, and I can't get past that. If the BPFK wants to tweak the definition to make it mean something more like "document" and less like "page", I'll stop using mutpapri. ! About kliki I consider kliki the wrong word for many English uses of the word "click' in a computer context, because most of them suck in English, too. I don't click on a link when I'm using a text-only browser, for example. However, sometimes click/kliki really is the right term, as when a user is being instructed in the use of a GUI and you really do want to tell the user not just to activate a widget but *how*. Having said that, though, I don't use kliki here for two reasons: (1) I'm unclear on whether it's supposed to be a word for general widget activation (for which I think pilno is fine) or for specifically using the button of a pointing device and (2) I'm rather attached to the gismu algorithm, and am not terribly interested in gismu (experimental or otherwise) that don't use it, except for the Lojban-specific ones of course. ! Document Terms document - mutpapri (papri, with def'n changes) to focus on relation to other, superset works; vreji to focus on work's subject; cukta to focus on auther and audience mutpapri - mucti papri - document - smallest contiguous part of a set of documents, i.e. accessible without doing anything other then changing sensory focus mutpaprylu'a - mutpapri / cukta / vreji pluta - p1 is a [bibliographic] reference / ?? to document p2=mp1 from document p3=mp1 via document(s) p4=mp1 (sequence); (sa'a document- descriptive places start here in all versions) document referenced is part of larger work mp2 -- drop p4 due to relative uselessness? samymutpaprylu'a - skami mutpapri pluta - hyperlink - p1 is a hyperlink / a document reference that can be used by a computer program to find the referenced document ...(as previous) !! Web Terms samterlutmutpapri - skami te pluta mutpapri - web page - mp1=p3 is a web page / document containing hyperlinks in website / collection of hyperlinking documents mp2; links to documents including p2 with links including p3 via web sites includong p4 (use fa'u to associate elements of x3, x4 and x5) samterlutselmutpapri or se samterlutmutpapri - web site ralsamterlutselmutpapri - www - places as se samterlutmutpapri with r2 at the end; r3 is "best known" and "biggest" uebe - short for ralju samterlutselmutpapri uebe mutpapri - web page - uebe selmutpapri - web site - url - judri fi le uebe pilno le ti/dei samymutpaprylu'a - click a link/click here - pilno le ti pluta (short) surf to / go to url - catlu le .uebe se judri be la'o zoi ... Zoi surf / browse - kalsa catlu le .uebe !!! Web Application Terms search - sisku - x2 can be used to indicate what property the search is over, for example a text widget labelled "sisku lo ka ma cmene kei lo mutpapri" for searching page names OK / Continue / Cancel / Quit - see the WIMP section; for web applications sich as forum, the jmina forms are often correct Post (forum or similar) - jmina / co'u jmina ! Sessions logged in/on - ca'o se jaspu le skami vreji (be le du'u le se jaspu cu jarco lo ka djuno le drani se mipri) (vreji in RAM counts!) le samru'e lo nu pilno / galfi le skami login - co'a se jaspu logout - co'u se jaspu session - lo za'i se jaspu ! Hardware memory - sorcu le datni RAM - zasni sorcu le datni - keyboard - lerfu cupra tutci / lerpratci (jbovlaste has lercu'aca'a, which is fine, but I like this better) - t1=c1 is a keyboard / letter data entry device (most general) for producing letters / glyphs including c2=l1 by process c3 (t2 is subsumed by the definitipn and the x2 and x3 places, l2 and l3 are per lerfu and hence dropped) mouse / trackball / touchpad / pointing device - skami cuxna tutci / samcu'atci ? - t1 is a pointing device (most general) / computerised tool allowing agent c1 to choose widget / item c2 amongst widgets / items c3 on computer s1 which has purpose s2 left / right mouse button - samcuhatci zunle / pritu bo batke ! WIMP/GUI !! jvinu I might be taking a bit of liberty with the x3 of jvinu here; "point of view" is, after all, a bit fuzzy. If it bothers people, a more specific idea of containment could probably be made with jvinu + nenri. !! Words window - jvinu /samji'u - j1 is a window / dialogue box / computerized display / etc for data j2 on / in / contained by display area / desktop j3 with window generated by / running on computer s1 and display area generated by / running on computer s1 (s2 dropped because it is per-computer) desktop - ralju te samji'u - conceptually outer-most display area widget / button / menu item / etc - cabra / samymutca'a - c1=m1 is a computeruzed virtual / immaterial widget / button / menu item / etc (extremely general) for purpose(s) including c2 used by agent(s) including c3 being generated by computer s1, computer for purpose s2 menu (as a whole) - liste samymutca'a - probably covers some other widgets too; if the distinction is important to you, mail me and I'll figure something out menu (as list of items) - samymutca'a liste / liste lo samymutca'a (po'u [specification]) OK / continue (so many uses!) - .ie / co'u gasnu / diha / diha gasnu / .i'a (most geberal?) / jmina / others? Cancel / Quit - na gasnu / .ie nai / na jmina / fanmo / na ku Pause - deha / deha gasnu click - pilno / batke catke pilno click with left / right mouse button - pilno [le samymutca'a] tahi le nu catke le samcuhatci zunle / pritu bo batke (tahi tuha le zunle batke for short) double click - ze'i re roi batke catke pilno / (left button specifically) ze'i re roi pilno tahi tuha le zunle batke icon - sinxa [be foo] samymutca'a text field - selciska samymutca'a ! Text straight line / column / row of text - lerlihi - li1 is a line of letters / glyphs including li2=le1 (quote or list / set of lerfu) (other places of lerfu are per-lerfu and so dropped) line / row of text - pinta lerlihi column of text - sraji lerlihi delete - vimcu le pritu lerfu backspace - vimcu le zunle lerfu text editor - lerfu mutpapri galfi samtci word processor - selciska galfi samtci ! Miscellaneous log / activity log - plivei (NB: xorxes has used this for "log in", with which I utterly disagree) - v1 is a log / usage log / record of usage events including v2 (nu/qoute/du'u) which is a record of v3=p1's usage of resource p2 for purpose p3 (often unknown / not recorded in a usage log) recorded in medium v4 (v4 moved to the end on account of relative uselessness; x2-5 can be assoicated unsing fa'u of there's more than one of each, otherswise each is a non-complete description by default) sysadmin - skami jitro interface / user interface - pilno tadji / plitadji - t1 is an interface / method for p1 to use p2 for purpose p3 under conditions t3 (t2 subsumed by the pilno places, t3 last due to uselessness) GUI - pixra plitadji CLI - lerfu? plitadji ! Use Cases * double left click on the word processor icon, open the File menu and select "New File". ** ze'i re roi pilno le sinxa be le selciska galfi samtci tahi tuha le zunle batke .i ba bo pilno le cabra liste po'u la vreji / la'o zoi File zoi gi'e ba bo pilno le cabra po'u la cnino vreji / la'o zoi New File zoi * Surf to www.foo.com and enter your name in the "new user" text field, then click on "continue" ** catlu le .uebe se judri be laho zoi www.foo.com zoi gihe ciska le do cmene le selciska cabra po'u la cnino pilno / la'o zoi New User zoi gi'e pilno la jmina / laho zoi Continue zoi noi cabra ! ToDO monitor, screen, crash, reboot, power on, save, file, directory, screen capture, operating system, trackpad, trackball, cursor, domain, host, spam, account, cut & paste, highlight, back button, drag, install, enter text, header, footer, frame, numbered list, font, page layout, print, paper sizes, trash, delete, undelete, - --------------------------------------------------------------------- ! Short Notes jaspu needs "credential" datni needs s:du'u:du'u/quote/string of letters .a numbers: jbovlaste voting in error: mutpaprylu'a, ckulu'a, rejlu'a all usefull, all words for same type off "reference". Is "reference;with author and audience" useful/good? Except do any of them have different place structure anyways? Yes; places of document word should be associated with target. ! General Comments !! Theory Of Minimal-Length Word Use This document attempts to, where possible, develop jvajvo that completely and rigorously match the meaning of various computer terms as viewed by computing experts. As such, many of them are very long (although c.f. German) with baroque place structures. Before you object to this, please understand that they are *mostly not meant to be used*. It is my belief that a Lojban speaker should use whatever word has the place structure needed and does not introduce confusion given the context. There are not going to be very many times where it is necessary to say samterlutselmutpapri instead of se mutpapri. {la'o zoi lojban.org zoi samterlutselmutpapri lu la .lojban. mo li'u .e so'i drata la'o zoi ...paypal.com/... zoi fa'u la'o zoi ...teddyb.org/... zoi lu .e'u ko dunda li'u fa'u lu gubni datni la .camgusmis li'u la'o zoi paypal.com zoi fa'u la'o zoi teddyb.org zoi} is a contrived but reasonable use of samterlutselmutpapri because the whole place structure is being used. In everyday usage, though, things like {la'o zoi ...lojban.org/... zoi cu cinri mutpapri} is much, much more likely. If you only need on place, and inspeficity about the exact nature of the item you're discussing isn't likely to be a problem, use the shortest word that fits! This is especially hard, I expect, for English speakers. English has a ridiculous amount of words, and (much worse) defines "good writing" at least partly in terms of using the most specific word for the job. An English author would almost never say "A attacked B" if A is using a gun; they'd use "shot" instead. This is why my current draft (as of 1 Aug 2006) of {la nicte cadzu} has many instances of {xumjimcelxa'i} that need to be replaced with xarci or gunta. With fu'ivla, some of this doesn't apply, but there the likelyhood of the audience being unfamiliar with the fu'ivla imposes a similar constraint: if a more-well known word that is (at worst) not much longer will do well enough, use it! In summary, I assert that good Lojban writing uses the shortest, (usually) *least* specific word that doesn't introduce confusion, in the same way that good English writing uses the most specific word available. !! About mutpapri xorxes and I have had a long, running discussion over the years about some of these terms, with "web page" at the forefront of our arguments. xorxes has asserted that papri has the place structure we want, that is x1 is a web page in web site x2. I've eventually come to agree, *however*, the actual definition makes papri sound like a physical page specifically, and I can't get past that. If the BPFK wants to tweak the definition to make it mean something more like "document" and less like "page", I'll stop using mutpapri. ! Document Terms document - mutpapri (papri, with def'n changes) to focus on relation to other, superset works; vreji to focus on work's subject; cukta to focus on auther and audience mutpapri - mucti papri - document - smallest contiguous part of a set of documents, i.e. accessible without doing anything other then changing sensory focus mutpaprylu'a - mutpapri / cukta / vreji pluta - p1 is a [bibliographic] reference / ?? to document p2=mp1 from document p3=mp1 via document(s) p4=mp1 (sequence); (sa'a document- descriptive places start here in all versions) document referenced is part of larger work mp2 -- drop p4 due to relative uselessness? samymutpaprylu'a - skami mutpapri pluta - hyperlink - p1 is a hyperlink / a document reference that can be used by a computer program to find the referenced document ...(as previous) - --------------------------------------------------------------------- !! Web Terms samterlutmutpapri - skami te pluta mutpapri - web page - mp1=p3 is a web page / document containing hyperlinks in website / collection of hyperlinking documents mp2; links to documents including p2 with links including p3 via web sites includong p4 (use fa'u to associate elements of x3, x4 and x5) samterlutselmutpapri or se samterlutmutpapri - web site ralsamterlutselmutpapri - www - places as se samterlutmutpapri with r2 at the end; r3 is "best known" and "biggest" uebe - short for ralju samterlutselmutpapri uebe mutpapri - web page - uebe selmutpapri - web site - url - judri fi le uebe pilno le ti/dei samymutpaprylu'a - click a link/click here - pilno le ti pluta (short) ! Sessions logged in/on - ca'o se jaspu le skami vreji (be le du'u le se jaspu cu jarco lo ka djuno le drani se mipri) (vreji in RAM counts!) le samru'e lo nu pilno / galfi le skami login - co'a se jaspu logout - co'u se jaspu session - lo za'i se jaspu ! Hardware memory - sorcu le datni RAM - zasni sorcu le datni - - --------------------------------------------------------------------- ! WIMP/GUI desktop - te jvinu? window - jvinu - --------------------------------------------------------------------- Computer Terms Computer Terms 2 Computer Terms 3 ; list->assoc ; mooix root ; mooix TODO ; mooix ; mooix2 ; mooix 3 - --------------------------------------------------------------------- (define (list->assoc lis) (cond ;((and (proper-list? lis) (> (length lis) 2)) ((and (pair? lis) (> (length lis) 2)) (cons (list (car lis) (cadr lis)) (list->assoc (cddr lis))) ) ;((and (proper-list? lis) (= (length lis) 2)) ((and (pair? lis) (= (length lis) 2)) (list lis) ) (else lis) ) ) - --------------------------------------------------------------------- (define mooix-root (mooix-obj BUILDTIME-VAR ) ) - --------------------------------------------------------------------- - pass $this in to procs being run by (mooix ...) - I think we get that from the environment? - ; TODO: is dir the right internal data bit?? For mooix-obj - dhould we provide access to dispatch-table items directly? (i.e.without going through a mooix obj) (thus far we don't) - explicate perl booleans -Current bindings (including this one) only allow symlinks to objects (i.e. directories); this seems dumb. Look at the other bindings and see if there's a real problem with symlinks to fields or methods - PERL: fieldfile-lang should collect obj/field info on the way up so it only needs to walk once -- enh; no advantage over recursion I don't think in terms of number of file accesses - PERL: last step of fieldfile-lang is filefile; if we pass the obj back that the field was defined on, fieldfile might be faster. Might as well look at the flag system too; no idea how much fieldfile-lang is contributing to run times, though - rewrite some or all so args is an assoc list; fieldfile-langs for example - --------------------------------------------------------------------- ; To make a mooix file, wrap a single procedure of one argument in (mooix ...). ; mooix coerces the values returned into the correct form. It accepts the following return values: ; A number - converted to a string ; A string - left alone ; A mooix object reference - converted to its ID string ; A list of any of the above - each element converted, elements seperated by newlines ; ; The first argument passed in by mooix is the mooix object the code is on, the second is the parameters the method was called with, as a list. ; The input parameter code coerces mooix objects and numbers into their Scheme types ; NB: all code that is passed or returns values used as booleans must respect Perl boolean conventions, to wit: FILL IN ; Need to be able to distinguish built-in methods from actual mooix object methods, so need both dispatch and can-dispatch funcs ; dispatch on strings, not idents, since files can start with . and so on (define (mooix code) ; The core bit: get inbound args, pass them to the given code, process the outbound args (process-return (code ; TODO: $this should be passed here (process-args) ) ) ; mooix objects are largely glorified wrappers to dispatch ; TODO: is dir the right internal data bit?? (define (mooix-obj dir) (letrec ((this ; NB: we use "this" in this def'n; I believe this to be legal due to the lambda, but not sure until actually run (lambda (method . args) ; base data selectors (cond ((string=? method "dir") dir) (else (dispatch this method args)) ) ))) this ) ) (define (dispatch this method args) (display ("In dispatch: " (this "dir") method args) (current-error-port)) (cond ; built-in methods ((assoc method dispatch-table) => (lambda (meth) (meth this args))) ; file methods/fields (else (file-dispatch this method args)) ) ) ; Call on-disk method or retrieve/set field value (define (file-dispatch this method args) (let ((file (this "fieldfile" (list method)))) (if (and file (file-exists? file)) (if (regular-file? file) ; Regular on-disk field or method call (if (file-execute-access? method) (file-field this method args) (file-method this method args) ) ; File is dir or symlink - return associated mooix object (if (and (directory? file) (file-exists? (make-absolute-path file ".mooix"))) ; "file" is mooix dir (mooix-obj file) (if (and (symbolic-link? file) (file-exists? (make-absolute-path (read-symbolic-link file) ".mooix"))) ; "file" is mooix dir (mooix-obj (read-symbolic-link file)) ; Not regular file, not mooix obj - badness (and (display ("Object " (obj "fieldget_lang" "name") " has no regular field or method or mooix object pointer named " file ".") (current-error-port)) #f) ) ) ) ; No such file - might be setting a new field (if (= (length args) 1) (obj "setfield" file (car args)) (and (display ("Object " (obj "fieldget_lang" "name") " has no field or method named " file " at all.") (current-error-port)) #f) ) ) ) ) ; Call a method from a file (define (file-method this method args) (let ((file (this "fieldfile" (list method)))) (let-values ( ((fromport toport pid) ; We pass the empty argument string just to avoid the shell (process file "")) ) (display (scheme->mooix-string this) toport) (display (scheme->mooix-string args) toport) (mooix-string->scheme (read-string from-port)) ) ) ) ; TODO: inline this? (define (process-return list) (scheme->mooix-string list) ) ; TODO: inline this? (define (process-args) (mooix-string->scheme (read-string)) ) - --------------------------------------------------------------------- ; Convert a list of scheme objects into mooix's string representation ; numbers, strings, mooix objects, ?? are OK (define (scheme->mooix-string slist) (display ; map the elements of slist into a list of newline-terminated mooix strings, which we then output (map (lambda (x) (cond ((string? x) (string-join x "\n") ((number? x) (string-join (number->string x) "\n") ; If x is a procedure, then either it's a mooix object or an error ((procedure? x) (let ((dir (x "dir"))) (if (directory? dir) (string-join "mooix:" dir "\n") (and (display "Procedure which is not a mooix object not a legal return value." (current-error-port)) #f) ) ) ) ) ) slist ) ) ) ; Convert a mooix string representation to a list of Scheme objects - numbers, strings, mooix-obj, ?? (define (mooix-string->scheme mstring) ; Read all STDIN lines, and map each into a Scheme object, returning the resulting list (map (lambda (x) (let ( (num (string->number x)) (mobj (string-prefix? "mooix:" x))) (cond ((not (equal? num #f)) num ) (mobj (mooix-obj (string-copy x 7) ) ) ; Return all others as strings (else x) ) ) ) (read-string) ) ; Retrieve or set a file-based field (define (file-field this method args) (let ( (num (length args)) (file (this "fieldfile" (list method))) ) ; Behaviour is based on number of arguments; zero means return the file, one means set it, more is an error (cond ((= num 0) (read-string file) ) ((= num 1) (display (car args) (open-output-file file)) ) (else (and (display "Non-method field " method " on object mooix:" (make-absolute-pathname (this "dir")) " passed more than one argument.\n" (current-error-port)) #f)) ) ) ; ********** ; Regular dispatch table methods follow ; ********** ; Returns #t iff the first argument is in the built-in mooix object method list (that is, in dispatch-table), else returns #f (define (can-dispatch this args) (if (equal? #f (assoc (car args) dispatch-table)) #f #t ) ) (define (get this args) (mooix-obj (car args)) ) (define (hybridgetfield this args) (let* ( (field (car args)) (file (this "fieldfile" args)) (dot (string-prefix? "." field)) ; True if not a symlink or dir (reg (regular-file? file)) (exe (file-execute-access? file)) (hybrid (this "test" (list (string-join "." field "-hybrid")))) ) (and file dot reg (or (not exe) (and exe hybrid)) ; NB: this relies on file fields and methods never being able to return #f as *data* - if that changes (and it seems a piss-poor idea to change it) this will need to be looked at again (this (car args)) ) ) ) ; Get the field named and return a boolean based on treating its value as Perl/ C true/false (TODO: empty string, no such file, and 0 are false, else true) (define (test this args) (let ( (file (this "fieldfile" args)) ) (cond ((equal? file "") #f) ((not (file-exists? file)) #f) (else (let* ( (string (this (car args))) (num (string->number string)) ) (cond ((and num (= 1 num)) #t) ((not (equal? string "")) #t) (else #f) ) )) ) ) ) - --------------------------------------------------------------------- ; Find the on-disk file associated with a field - #f if none such (meths local to this mooix Scheme interface return #f). Handles parent recursion and mixins. (define (fieldfile this args) ; This gets a bit complicated - we walk parents, looking for the file or for an object ref that matches the mixin (if any). If we find the file, great: compose the dir (which we've been appending things to) and the file, and return that. If we find the mixin, we walk that object and parents in the same way. Once we've found the mixin, we do not ever return and try further parents of the original object. (define (parent-walk dir file mixin) (if (file-exists? (make-absolute-pathname dir file)) (make-absolute-pathname dir file) (let* ( (mixin-obj (this (car mixin))) (mixin-dir (and mixin-obj (procedure? mixin-obj) (mixin-obj "dir"))) ) (if mixin-dir (parent-walk mixin-dir file #f) (parent-walk (make-absolute-pathname dir "/parent") file mixin) ) ) ) ) (let* ( (pbits (decompose-path (car args))) (file (make-pathname "" (second pbits) (third pbits))) (mixin (string-match "(.+)_(.+)" file)) (dir (this "dir")) ) (and ; If implemented here, return #f immediately (not (this "can" args)) (or ; Check for the object itself defining the field - if not, walk up the parents looking for file or mixins to search (this "defines" args) (parent-walk dir mixin) ) ) ) ) ; Returns true if the named method is handled by this mooix Scheme interface or by a file-based method on the object (define (implements this args) (or (this "can" args) (let ((file (this "fieldfile" args))) (and file (file-execute-access? file)) ) ) ) ; Returns true if this object directly defines the field / method in question - no mixins, no inheritance (define (defines this args) (let* ((pbits (decompose-path (car args))) (file (make-pathname (this "dir") (second pbits) (third pbits))) ) (file-exists? file) ) (define (getfieldtext this args) (let ((file (this "fieldfile" args))) (and file (file-exists? file) (read-string file)) ) ) (define (fieldfile-lang this args) (define mooix-langs (string-split ((((mooix-root "abstract") "language") "languages") "list") "\n")) ; Walk up the parents using the algorithm at !URL!. Returns an association list keyed on language code with each of the acceptably specific fields. The list has the fiels' complete file names as its data. "" indicates no lang, just the plain field, which always wins (define (walk-parents this field) (let ( (parent (this "parent")) (entry (lambda (lang) (let ((file (this (if (not (equal? lang "")) (string-join field "." lang) field)))) (if file (list lang file) (list #f #f))))) (collect (lambda () (alist-delete #f (map (lambda (lang) (entry lang)) (mooix-langs)))) ) (if parent .... ( ) ) ) (let ( (alist (walk-parents this (car args))) (ulang ((cadr args) "langauge")) ) (and ; Try the user's lang first - otherwise just take the first one (cadr (assoc (ulang "code") alist)) (cadr (car alist)) ) ) ) (define dispatch-table ("can" can-dispatch) ("hybridgetfield" hybridgetfield) ("get" get) ("fieldfile" fieldfile) ("test" test) ("implements" implements) ("getfieldtext" getfieldtext) ("fieldfile-lang" fieldfile-lang) ("fieldfile_lang" fieldfile-lang) .!a!nd so on ) ) - ---------------------------------------------------------------------