Hello Folks!

I was working all afternoon and here is the result:
Almost finished CGI counter in rebol:

---%counter.cgi---
#!/path/to/rebol -cs

REBOL []

counter: func [
        hits [integer!] ;number of hits
        size [integer!] ;number of digits (supported 1-10)
        /local header lsd gct sep ilp id lcts imcs pics bt trailer n i
][
        ; Header
        header: "#{474946383961" 

        ; Logical Screen Descriptor
        lsd: head insert/part {001b00c20000} (skip tail to-string to-hex (21 * size) 
-2) 2  
        
        gct: {ffffffe1e1e1999999686868000000c0c0c0000000000000} 

        ; Image Descriptor
        sep: {2c}
        ilp: func [n][
                return skip tail to-string to-hex (21 * n) -2
        ]
        id: {00000015001b0082}

        ; Local Color Table
        lcts: [
                {FFFFFFC0C0C0E1E1E1000000686868999999000000000000}
                {FFFFFF999999686868C0C0C0E1E1E1000000000000000000}
                {FFFFFFC0C0C0000000686868E1E1E1999999000000000000}
                {FFFFFFC0C0C0686868999999E1E1E1000000000000000000}
                {FFFFFFE1E1E1999999686868000000C0C0C0000000000000}
                {FFFFFFC0C0C0000000686868999999E1E1E1000000000000}
                {FFFFFFC0C0C0686868000000E1E1E1999999000000000000}
                {FFFFFFE1E1E1000000686868999999C0C0C0000000000000}
                {FFFFFF686868000000999999C0C0C0E1E1E1000000000000}
                {FFFFFFE1E1E1999999000000686868C0C0C0000000000000}
        ]

        ; Image Data
        imcs: {03}        
        pics: [
                
{4D08BADCFE30CA49ABBD358020701820A851C24008426156E20252DFD0291F31A90353E612F132BF88CF06E409578C02F168A4351FB1027024096904BE0A2E848471979554818A299BCFE8B43A01}
                
{3E08BADCFE30CA49AB75418C710129601174425608DD22A64A41B040C1B12E5CD36FFAE5DD6EF315C2202003CC28A1E48892C9084028161046AD5AAF584002}
                
{4C08BADCFE30CA49AB7D4188112C195AD8515AA16402958D4A21B050D664E6A580F5050A84B7BF15824BC30986063D8B0B6903940281C2603A98FC42A1DC638815350181E4774C2E9BCFE84602}
                
{4B08BADCFE30CA4967106190A16BF9E057010141045F302E1FB10284F8A205E656713D08353E30A8DB0B20100C15B26172C553BD3EC6158157780D404ECA15249C507B2B54E7482E9BCFC304}
                
{4908BADCFE30CA496B10D50D92DBEECC30808B8091C01028C46AB5AC4B091C5B64C409E415CDC0930061A428F02684E45099BC453649A8D29931523B425DC7A8ED10AE5894784C2E6712}
                
{4908BADCFE30CA49ABBD3388CD47DD44480CC457608B100045B05A5C5C52DB7016844A0DEF92A3A9194623BC1025815363A08BD45E054E2616534AA2546B2540286881E0B0784C862400}
                
{4B08BADCFE30CA496B0BB68981331960061420216E8508049C0AB4EA260869060E335EC9CB275083DA82658A7C1E30C8D19184042FCDC7A608F80C2AA0D9E689BD45278440C7452E9BCF9604}
                
{4208BADCFE30CA4965108364C2C32442288A1451149C1656CD20B0CC55C08B4B2B8540DC807D5F03DE4A18FCE978B9DD0DA4A4B93CB71094169ADD0A459E76CBEDC212}
                
{4F08BADCFE30CA49ABBD35881DAEDEDB501182080C4247690C4BA1C5B2550537A0E6548361850A855F69422230488289EB08942C17456793698CFC628ADD8AF3115427C2CDD752C062CEE8B47AAD4800}
                
{5008BADCFE30CA49AB0A9689C189B004270E0515924071521C76715F14A04C3110D28C33FAC435B3584454026C06AE886D24AA044EC44C2070CCBC6896D9CD7ADA558E0321458B75DE92D6B47ACD6E3312}
    

        ]
        bt: {00}            

        ;Trailer
        trailer: "3b}"        

        result: ""
        n: size
        loop size [
                i: (hits // 10) + 1
                hits: to-integer hits / 10
                result: append result reduce [sep ilp n: (n - 1) id lcts/:i imcs 
pics/:i bt]
        ]
        return load rejoin [header lsd gct result trailer]
]

data: make object! decode-cgi system/options/cgi/query-string    
hits: load data/hits
size: load data/size
either all [
        integer? hits integer? size (1 <= size) (size <= 10)
][      
        print "Content-Type: image/gif^/"
        t: counter hits size   
        write-io system/ports/output t length? t
][
        print "Content-Type: text/plain^/"
        print "Usage:  hits [integer!] ;number of hits"
        print "        size [integer!] ;number of digits (supported 1-10)"
]

--end of %counter.cgi---

calling:
http://www.whereyouplaceit.com/counter.gci?hits=123&size=5

it is working here:
http://cgi.math.muni.cz/~strejcek/counter.cgi?hits=123&size=5

increasing the counter isn't implemented yet (but it's really very easy).
I'm a bit tired so I finish it later, but I wanted to releas it ASAP
for other guys playing with rebol...

Have a nice weekend.

Jan

Reply via email to