78 lines
2.0 KiB
Mathematica
78 lines
2.0 KiB
Mathematica
ONCXURL ;HCIOFO/SG - HTTP AND WEB SERVICES (URL TOOLS) ; 5/14/04 11:00am
|
|
;;2.11;ONCOLOGY;**40**;Mar 07, 1995
|
|
;
|
|
Q
|
|
;
|
|
;***** CREATES URL FROM COMPONENTS
|
|
;
|
|
; HOST Host name
|
|
; [PORT] Port number (80, by default)
|
|
; [PATH] Resource path ("/", by default)
|
|
;
|
|
; [.QUERY] Reference to a local variable containing values of
|
|
; the query parameters: QUERY(Name)=Value.
|
|
;
|
|
; Return values:
|
|
; <0 Error Descriptor
|
|
; ... Resulting URL
|
|
;
|
|
CREATE(HOST,PORT,PATH,QUERY) ;
|
|
N NAME,QSTR,VAL
|
|
S:HOST'["://" HOST="http://"_HOST
|
|
S PORT=$S($G(PORT)>0:":"_(+PORT),1:"")
|
|
;---
|
|
S (NAME,QSTR)=""
|
|
F S NAME=$O(QUERY(NAME)) Q:NAME="" D
|
|
. S VAL=$G(QUERY(NAME))
|
|
. S QSTR=QSTR_"&"_$$ENCODE(NAME)_"="_$$ENCODE(VAL)
|
|
S:QSTR'="" $E(QSTR,1)="?"
|
|
;---
|
|
Q HOST_PORT_$$PATH($G(PATH)_QSTR)
|
|
;
|
|
;***** ENCODES THE STRING
|
|
;
|
|
; STR String to be encoded
|
|
;
|
|
ENCODE(STR) ;
|
|
N CH,I
|
|
F I=1:1 S CH=$E(STR,I) Q:CH="" I CH?1CP D
|
|
. I CH=" " S $E(STR,I)="+" Q
|
|
. S $E(STR,I)="%"_$$RJ^XLFSTR($$CNV^XLFUTL($A(CH),16),2,"0"),I=I+2
|
|
Q STR
|
|
;
|
|
;***** PARSES THE URL INTO COMPONENTS
|
|
;
|
|
; URL Source URL
|
|
;
|
|
; .HOST Reference to a local variable for the host name
|
|
; .PORT Reference to a local variable for the port number
|
|
; .PATH Reference to a local variable for the path
|
|
;
|
|
; Return values:
|
|
; <0 Error Descriptor
|
|
; 0 Ok
|
|
;
|
|
PARSE(URL,HOST,PORT,PATH) ;
|
|
S:$F(URL,"://") URL=$P(URL,"://",2,999)
|
|
S HOST=$TR($P(URL,"/")," ")
|
|
S PATH=$$PATH($P(URL,"/",2,999))
|
|
S PORT=$P(HOST,":",2),HOST=$P(HOST,":")
|
|
Q:HOST?." " $$ERROR^ONCXERR(-1,,URL)
|
|
S:PORT'>0 PORT=80
|
|
Q 0
|
|
;
|
|
;***** DEFAULT PATH PROCESSING (NORMALIZATION)
|
|
;
|
|
; PATH Source path
|
|
;
|
|
PATH(PATH) ;
|
|
N LAST
|
|
;--- Make sure the path has a leading slash if it
|
|
;--- is not empty and has no query string
|
|
I $E(PATH,1)'="/" S:$E(PATH,1)'="?" PATH="/"_PATH
|
|
;--- Append a trailing slash to the path if it has
|
|
;--- neither a file name nor a query string
|
|
S LAST=$L(PATH,"/"),LAST=$P(PATH,"/",LAST)
|
|
I LAST'="",LAST'["?",LAST'["." S PATH=PATH_"/"
|
|
Q PATH
|