/* $VER: GetNewSTRICQ 2.7 (29/01/2000) ©1999-2000 Lorens Johansson <SnorsleX@Home.se>, Robin Cloutman <rycochet@free4all.co.uk> */

/* The prefs *******************************************************************/
overwrite     = 0 /* set to 1 if you don't want backups!                       */
auto          = 0 /* set to 1 if you want to update without asking!            */
quiet         = 0 /* set to 1 if you don't want it to output anything!         */
force         = 0 /* set to 1 if you only want to download, not install!       */
history       = 1 /* set to 0 if you don't want to save the history.txt!       */
setfilecomment= 0 /* set to 1 if you want to add the version as a filecomment! */
checksizeonly = 0 /* set to 1 if you only wanna compare the history.txt size!  */
useproxy      = 0 /* set to 1 if you want to use a proxy                       */
proxy="proxy.xxxxx.xx/8080"
/*******************************************************************************/

OPTIONS RESULTS
SIGNAL ON SYNTAX
SIGNAL ON HALT
SIGNAL ON BREAK_C
M='0d'x
crnl="0d0a"x

IF quiet~=1 THEN SAY "Loading prefs..."
IF OPEN(1,"ENVARC:STRICQ.path","R") THEN DO
	stricqpath=READLN(1)
	CALL CLOSE(1)
END
ELSE DO
	IF quiet~=1 THEN SAY "What directory is STRICQ installed in?"
	ADDRESS COMMAND 'requestfile >ENVARC:STRICQ.path TITLE "Where is STRICQ?" DRAWERSONLY NOICONS'
	IF RC~=0 THEN Err("User Exit...")
	IF OPEN(1,"ENVARC:STRICQ.path","R") THEN DO
		stricqpath=READLN(1)
		call CLOSE(1)
	END
	stricqpath=STRIP(stricqpath,"B",'"')
	IF RIGHT(stricqpath,1)~=":"&RIGHT(stricqpath,1)~="/" THEN stricqpath=stricqpath"/"
	CALL OPEN(1,"ENVARC:STRICQ.path","W")
	CALL WRITELN(1,stricqpath)
	CALL CLOSE(1)
END
IF RIGHT(stricqpath,1)~=":"&RIGHT(stricqpath,1)~="/" THEN stricqpath=stricqpath"/"
oldversion=0
IF EXISTS(stricqpath"STRICQ") THEN DO
	IF quiet~=1 THEN SAY "Checking version..."
	ADDRESS COMMAND "version file full "stricqpath"STRICQ >T:STRICQ.version"
	IF OPEN(1,"T:STRICQ.version","R") THEN DO
		oldversion=READLN(1)
		PARSE VAR oldversion . oldversion .
		CALL CLOSE(1)
		ADDRESS COMMAND "delete T:STRICQ.version QUIET"
	END
END
ELSE DO
	IF quiet~=1 THEN SAY "This is not the path to STRICQ! Please choose the correct path!"
	ADDRESS COMMAND "delete ENVARC:STRICQ.path QUIET"
	EXIT
END

IF quiet~=1 THEN SAY "Installed version of STRICQ: "oldversion

IF useproxy=0 THEN DO
	CALL Connect_Server("www.owlnet.net/80",1)
	CALL Connect_Head("www.owlnet.net","/stricq/History.txt",1)
END
ELSE DO
	CALL Connect_Server(proxy,1)
	CALL Connect_Head(proxy,"http://www.owlnet.net/stricq/History.txt",1)
END
DO UNTIL EOF(1)
	CALL READLN(1)
	IF LEFT(result,16)="Content-Length: " THEN DO
		totalsize=DELSTR(result,1,16)
		totalsize=LEFT(totalsize,LENGTH(totalsize)-1)
		LEAVE
	END
END
CALL CLOSE(1)

IF useproxy=0 THEN DO
	CALL Connect_Server("www.owlnet.net/80",1)
	CALL Connect_Get("www.owlnet.net","/stricq/History.txt",1)
END
ELSE DO
	CALL Connect_Server(proxy,1)
	CALL Connect_Get(proxy,"http://www.owlnet.net/stricq/History.txt",1)
END
IF history=1 THEN CALL OPEN(2,stricqpath"History.txt","W")
numln=0;size=0
DO UNTIL EOF(1)
	numln=numln+1
	line.numln=READLN(1)
	size=size+LENGTH(line.numln)
	IF quiet~=1 THEN ADDRESS COMMAND "echo noline "M"("size"/"totalsize")"
	IF history=1 THEN CALL WRITELN(2,line.numln)
END
IF quiet~=1 THEN ADDRESS COMMAND "echo noline "M"("totalsize"/"totalsize")"
IF quiet~=1 THEN SAY
IF history=1 THEN CALL CLOSE(2)
CALL CLOSE(1)

IF quiet~=1 THEN SAY "Analyzing History.txt for update..."
newver=0
DO loopa=numln TO 1 BY -1
	IF LEFT(line.loopa,9)="STRICQ 0." THEN DO
		PARSE VAR line.loopa . newversion .
		IF newversion>oldversion THEN IF newver=0 THEN newver=newversion
		IF newversion=oldversion THEN DO
			startatline=loopa
			LEAVE
		END
	END
END

DO UNTIL startatline=numln
	SAY line.startatline
	startatline=startatline+1
END

IF oldversion<newver THEN DO
	IF auto=0 THEN DO
		ADDRESS COMMAND 'requestchoice >T:STRICQ.update TITLE GetNewSTRICQ BODY "Get new version?*nCurrent: 'oldversion'*nNew: 'newver'" GADGETS "OK|Cancel"'
		CALL OPEN(1,"T:STRICQ.update","R")
		auto=READLN(1)
		CALL CLOSE(1)
		ADDRESS COMMAND 'delete T:STRICQ.update QUIET'
	END
	IF auto=1 THEN DO
		IF useproxy=0 THEN DO
			CALL Connect_Server("www.owlnet.net/80",1)
			CALL Connect_Head("www.owlnet.net","/stricq/STRICQ.lha",1)
		END
		ELSE DO
			CALL Connect_Server(proxy,1)
			CALL Connect_Head(proxy,"http://www.owlnet.net/stricq/STRICQ.lha",1)
		END
		DO UNTIL EOF(1)
			CALL READLN(1)
			IF LEFT(result,16)="Content-Length: " THEN DO
				totalsize=DELSTR(result,1,16)
				totalsize=LEFT(totalsize,LENGTH(totalsize)-1)
				LEAVE
			END
		END
		CALL CLOSE(1)

		IF useproxy=0 THEN DO
			CALL Connect_Server("www.owlnet.net/80",1)
			CALL Connect_Get("www.owlnet.net","/stricq/STRICQ.lha",1)
		END
		ELSE DO
			CALL Connect_Server(proxy,1)
			CALL Connect_Get(proxy,"http://www.owlnet.net/stricq/STRICQ.lha",1)
		END
		IF ~OPEN(2,"RAM:STRICQ.lha","W") THEN DO
			CALL CLOSE(1)
			CALL Err("Couldn't save to RAM:STRICQ.lha!")
		END
		size=0
		DO UNTIL EOF(1)
			size=size+WRITECH(2,READCH(1,1024))
			IF quiet~=1 then ADDRESS COMMAND "echo noline "M"("size"/"totalsize")"
		END
		CALL CLOSE(2)
		CALL CLOSE(1)
		IF quiet~=1 THEN SAY
		IF force=0 THEN DO
			IF overwrite=0 then ADDRESS COMMAND "rename "stricqpath"STRICQ "stricqpath"STRICQ_"oldversion
			ELSE ADDRESS COMMAND "delete "stricqpath"STRICQ QUIET FORCE"
			ADDRESS COMMAND "lha -x2 e RAM:STRICQ.lha stricq/stricq "stricqpath
			ADDRESS COMMAND "delete RAM:STRICQ.lha QUIET FORCE"
			IF setfilecomment=1 THEN DO
				IF ADDLIB("rexxtricks.library",0,-30,0) THEN DO
					IF RXTR_SETCOMMENT(stricqpath"STRICQ",newver) THEN DO /* Rexxtricks.library */
						IF quiet~=1 THEN SAY "Filecomment set."
					END
					ELSE DO
						IF quiet~=1 THEN SAY "Could not set the comment, file in use?"
					END
				END
				ELSE DO
					IF quiet~=1 THEN SAY "Could not find rexxtricks.library!"
				END
			END
		END
	END
END
ELSE DO
	IF quiet~=1 THEN SAY "There is no new version available!"
END
EXIT

Connect_Server:
	IF quiet~=1 THEN SAY "Connecting to "ARG(1)"..."
	IF ~OPEN(ARG(2),"tcp:"ARG(1),"RW") THEN CALL Err("Couldn't connect to "ARG(1)"!")
RETURN

Connect_Head:
	IF quiet~=1 THEN SAY "Getting info on "ARG(2)"..."
	CALL WRITELN(ARG(3),"HEAD "ARG(2)" HTTP/1.1"||M)
	CALL WRITELN(ARG(3),"User-Agent: GetNewSTRICQ/2.6"||M)
	CALL WRITELN(ARG(3),"Accept: *;q=1"||M)
	CALL WRITELN(ARG(3),"Accept-Language: en"||M)
	CALL WRITELN(ARG(3),"Host: "ARG(1)||M)
	CALL WRITELN(ARG(3),M)
/*
HEAD stricqSTRICQ.lha HTTP/1.1
Host: www.owlnet.net
If-modified-since: <some valid date>
Connection: close
*/
RETURN

Connect_Get:
	IF quiet~=1 THEN SAY "Downloading "ARG(2)"..."
	CALL WRITELN(ARG(3),"GET "ARG(2)" HTTP/1.1"||M)
	CALL WRITELN(ARG(3),"User-Agent: GetNewSTRICQ/2.6"||M)
	CALL WRITELN(ARG(3),"Accept: *;q=1"||M)
	CALL WRITELN(ARG(3),"Accept-Language: en"||M)
	CALL WRITELN(ARG(3),"Host: "ARG(1)||M)
	CALL WRITELN(ARG(3),M)
	tmpline=READLN(ARG(3))
	IF LEFT(tmpline,4)="HTTP" THEN DO
/*		SAY tmpline*/
		errnum=WORD(tmpline,2)
		IF errnum>399 THEN DO
			CALL CLOSE(1)
			CALL Err(tmpline)
		END
	END
	DO FOREVER
		tmpline=READLN(ARG(3))
		IF tmpline=M THEN LEAVE
	END
RETURN

Err:
	SAY ARG(1)
EXIT

syntax:
ADDRESS COMMAND 'requestchoice TITLE GetNewSTRICQ.rexx BODY "Syntax Error 'rc', 'errortext(rc)' in line 'sigl'." Ok'
halt:
break_c:
EXIT
