!================================================================================ ! title : wcsm_url_decode.fun ! author : Neil Rieck ! purpose: remove so-called percent encoding ! ver who when what ! --- --- ------ ---------------------------------------------------------------- ! 100 NSR 110419 1. original effort !================================================================================ function string wcsm_url_decode(string inbound$) ! option type=explicit ! declare string constant hex_string$ = "0123456789ABCDEF" ! declare long x%, y%, i%, j%, handler%, & string in$, uc$, out$ ! ! out$ = "" ! init in$ = inbound$ ! ! ! replace plus signs with spaces ! strip_plus_sign: x% = pos(in$, '+', 1) ! locate '+' if x% > 0 then ! if we found one... mid$(in$, x%, 1) = ' ' ! replace with a space goto strip_plus_sign ! look for more end if ! ! ! dehexify (eg. %0d -> chr$(13) ) ! ! in$ = "12345%0d67890%0d12345" ! ^ ^ ! | +--- y% ! +--------- x% ! uc$ = edit$(in$, 32) ! upcase for hex scan x% = 0 ! previous position of '%' ! dexify_loop: ! y% = pos(uc$, '%', x% + 1) ! locate '%' if y% = 0 then ! if no more found... out$ = out$ + seg$(in$, x%+1, len(in$)) ! scoop up thru to end else ! if found... out$ = out$ + seg$(in$, x%+1, y%-1%) ! scoop up data up to '%' when error in ! i% = pos(hex_string$, mid$(uc$, y%+1, 1), 1) ! isolate char 1 and enumerate j% = pos(hex_string$, mid$(uc$, y%+2, 1), 1) ! isolate char 2 and enumerate if (i% = 0) or (j% = 0) then ! out$ = out$ + '%' ! x% = y% ! slide pointer forward (1-1=0) goto dexify_loop ! end if ! i% = (i% - 1) * 16 ! adjust tens digit j% = (j% - 1) ! adjust ones digit out$ = out$ + chr$(i% + j%) ! replace %xy with equiv replacement character x% = y% + 2 ! slide pointer forward (3-1=2) goto dexify_loop ! use ! handler% = err ! oops print "-e-url_decode-error: "+str$(err) ! end when ! end if ! wcsm_url_decode = out$ ! end function !
Back to OpenVMS
Back to OpenVMS Demo Index
Back to Home
Neil Rieck
Kitchener - Waterloo - Cambridge, Ontario, Canada.