Annotation of researchv10dc/cmd/icon/tests/collate.icn, revision 1.1

1.1     ! root        1: procedure main()
        !             2:    s1 := collate(&cset,&cset)
        !             3:    s2 := collate(reverse(&cset),reverse(&cset))
        !             4:    write(image(decollate(s1,0)))
        !             5:    write(image(decollate(s1,1)))
        !             6:    write(image(decollate(s2,1)))
        !             7:    write(image(decollate(s2,0)))
        !             8: end
        !             9: 
        !            10: procedure collate(s1,s2)
        !            11:   local length, ltemp, rtemp, t
        !            12:   static llabels, rlabels, clabels, blabels, half
        !            13:   initial {
        !            14:     llabels := "abxy"
        !            15:     rlabels := "cduv"
        !            16:     blabels := llabels || rlabels
        !            17:     clabels := "acbdxuyv"
        !            18:     half := 4
        !            19:     ltemp := left(&cset,*&cset/2)
        !            20:     rtemp := right(&cset,*&cset/2)
        !            21:     clabels := collate(ltemp,rtemp)
        !            22:     llabels := ltemp
        !            23:     rlabels := rtemp
        !            24:     blabels := string(&cset)
        !            25:     half := *llabels
        !            26:     }
        !            27:    if *s1 > *s2 then {
        !            28:       t := s1[*s2+1:0]
        !            29:       s1 := s1[1:*s2+1]
        !            30:       }
        !            31:    else if *s2 > *s1 then {
        !            32:       t := s2[*s1+1:0]
        !            33:       s2 := s2[1:*s1+1]
        !            34:       }
        !            35:    else t := ""
        !            36:   length := *s1
        !            37:   if length <= half then
        !            38:     return map(left(clabels,2*length),left(llabels,length) ||
        !            39:       left(rlabels,length),s1 || s2) || t
        !            40:   else
        !            41:     return map(clabels,blabels,left(s1,half) || left(s2,half)) ||
        !            42:       collate(right(s1,length-half),right(s2,length-half)) || t
        !            43: end
        !            44: 
        !            45: procedure decollate(s,n)
        !            46:    static dsize, image, object
        !            47:    local ssize
        !            48:    initial {
        !            49:       image := collate(&cset[2:0],repl(&cset[1],*&cset-1))
        !            50:       object := string(&cset)
        !            51:       dsize := *image
        !            52:       }
        !            53:    n %:= 2
        !            54:    ssize := *s
        !            55:    if ssize + n <= dsize then
        !            56:       return map(object[1+:(ssize+n)/2],image[(n+1)+:ssize],s)
        !            57:    else
        !            58:       return map(object[1+:(dsize-2)/2],image[(n+1)+:dsize-2],
        !            59:          s[1+:(dsize-2)]) || decollate(s[dsize-1:0],n)
        !            60: end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.