REM>gopherlib - send gopher traffic. REM Ported from Perl code that is (c) 2001, 2004 Cameron Kaiser. REM ************************************* : : REM NB: Brandy BASIC extension: LIBRARY LOCAL selector$, server_host$, server_port%, tab_chr$ : : REM Common exit pathway. Try offer-file for a nicer interface. REM extent = optional trailing data (gopher plus? etc.) REM resc = selector REM name = display string REM *** WARNING: THIS IS AN INTERNAL PROC THAT CLIENTS SHOULD NOT CALL *** : DEF PROCoffer(type$, name$, resc$, server$, port%, extent$) PRINT type$; name$; tab_chr$; resc$; tab_chr$; server$; tab_chr$; port%; IF extent$ <> "" THEN PRINT tab_chr$; extent$; ENDIF PRINT ENDPROC : : REM Equivalent of UNIX dirname(3) REM *** WARNING: THIS IS AN INTERNAL PROC THAT CLIENTS SHOULD NOT CALL *** : DEF FNdirname(path$) IF INSTR(path$,"/")=0 =path$ LOCAL prev_slash%, next_slash% REPEAT prev_slash%=next_slash% next_slash%=INSTR(path$,"/",prev_slash%+1) UNTIL next_slash%=0 =LEFT$(path$,prev_slash%) : : REM Print an error message then exit : DEF PROCreturn_error(message$, resource$ item_type$) IF item_type$ = "1" THEN PRINT "0'"; resource$; "' "; message$; tab_chr$; tab_chr$; "error.host"; tab_chr$; "1" PRINT "." ELSE PRINT "There was an error in the application "; resource$; "." PRINT "----------------------------------------------------------------------------" PRINT resource$; " "; message$ PRINT "." ENDIF QUIT ENDPROC : : REM Add a menu option for a resource REM server and port are optional REM resc can be a relative path : DEF PROCoffer_file(type$, name$, resc$, server$, port%, extent$) LOCAL rdir$ rdir$ = selector$ rdir$ = FNdirname(rdir$) IF server$ = "" THEN server$ = server_host$ ENDIF IF port% = 0 THEN port% = server_port% ENDIF IF LEFT$(resc$, 1) <> "/" THEN resc$ = rdir$ + resc$ ENDIF PROCoffer(type$, name$, resc$, server$, port%, extent$) ENDPROC : : REM used for passing arguments to a mole virtual directory REM somewhat exotic : DEF PROCoffer_choice(type$, name$, choice$, server$, port$, extent$) LOCAL resc$ IF INSTR(selector$, "?") = 0 THEN resc$ = selector$ + "?" + choice$ ELSE resc$ = selector$ + " " + choice$ ENDIF PROCoffer_file(type$, name$, resc$, server$, port$, extent$) ENDPROC : : REM Display a string (you must be within a gopher menu) : DEF PROCprint_string(message$) PROCoffer_file("i", message$, "", "error.host", 1, "") ENDPROC : : REM Print a horizontal rule : DEF PROChr PROCprint_string("") PROCprint_string("------------------------------------------------------------") PROCprint_string("") ENDPROC : REM -------------------------------------------------------- : REM Initialise the library : DEF PROCinit_gopherlib(s$, sh$, sp%) tab_chr$ = CHR$(9) : selector$ = s$ server_host$ = sh$ server_port% = sp% ENDPROC