/* $VER: AmIRC2STRICQ 1.0 by Lorens Johansson aka SnorsleX (SnorsleX@Home.se)
              _       .  _   _     _       _  ___  _  .  _  _
             |_| |\/| | |_) /       )     (_   |  |_) | /  / \
             | | |  | | | \ \_     (_      _)  |  | \ | \_ \_\
*/

OPTIONS RESULTS
PARSE ARG args

bold='02'x
underline='1F'x
inverse='16'x
color='03'x

CALL LoadRexx

IF LEFT(args,2)="A " THEN DO
	aother=DELSTR(args,1,2)
	SELECT
		WHEN LEFT(UPPER(aother),5)="!HELP" THEN CALL Help
		WHEN LEFT(UPPER(aother),5)="!MSG " THEN CALL Message_Normal(0)
		WHEN LEFT(UPPER(aother),5)="!URL " THEN CALL Message_URL
		WHEN LEFT(UPPER(aother),5)="!ADD " THEN CALL File_Add
		WHEN LEFT(UPPER(aother),5)="!ADDR" THEN CALL File_AddReq
		WHEN LEFT(UPPER(aother),5)="!CLEA" THEN CALL File_Clear
		WHEN LEFT(UPPER(aother),5)="!SEND" THEN CALL File_Send
		WHEN LEFT(UPPER(aother),5)="!STAT" THEN CALL Status
		WHEN LEFT(UPPER(aother),5)="!UINF" THEN CALL UserInfo
		WHEN LEFT(UPPER(aother),5)="!MAKE" THEN CALL MakeList
		WHEN LEFT(UPPER(aother),5)="!LIST" THEN CALL List
		OTHERWISE CALL Message_Normal(1)
	END
END
ELSE IF LEFT(args,2)="M " THEN DO
	SAY BALA
	PARSE VALUE args WITH "M "aother
	IF playsound=1 THEN ADDRESS COMMAND "run >NIL: "sound_player" "sound_message
END
ELSE IF LEFT(args,2)="O " THEN DO
	SAY BALA
	PARSE VALUE args WITH "O "aother
	ADDRESS STRICQ.1
	GETCONTACT 'UIN='aother
	IF SHOW("P","AMIRC.1") THEN CALL CechoS('[Online Notify] - 'ICQRC.NICK'('aother') is now online!')
	ELSE IF showreqifnoamirc=1 THEN ADDRESS COMMAND 'requestchoice >NIL: TITLE "AmIRC2STRICQ" BODY "'ICQRC.NICK'('aother') is now online!" GADGETS "Ok"'
	IF playsound=1 THEN ADDRESS COMMAND "run >NIL: "sound_player" "sound_online
END
ELSE IF LEFT(args,2)="F " THEN DO
	SAY BALA
	PARSE VALUE args WITH "F "aother
	ADDRESS STRICQ.1
	GETCONTACT 'UIN='aother
	IF SHOW("P","AMIRC.1") THEN CALL CechoS('[Offline Notify] - 'ICQRC.NICK'('aother') is now offline!')
	ELSE IF showreqifnoamirc=1 THEN ADDRESS COMMAND 'requestchoice >NIL: TITLE "AmIRC2STRICQ" BODY "'ICQRC.NICK'('aother') is now offline!" GADGETS "Ok"'
	IF playsound=1 THEN ADDRESS COMMAND "run >NIL: "sound_player" "sound_offline
END
ELSE IF LEFT(args,2)="D " THEN DO
	PARSE VALUE args WITH "D "aother
	ADDRESS STRICQ.1
	GETCONTACT 'UIN='aother
	CALL CechoS('[FileDirect Notify] - 'ICQRC.NICK'('aother') is sending you files!')
	IF playsound=1 THEN ADDRESS COMMAND "run >NIL: "sound_player" "sound_filedirect
END
ELSE DO
	IF SHOW("P","AMIRC.1") THEN DO
		"getversion"
		SAY result
		IF result<3.2 THEN DO
			CALL Cecho('To old AmIRC, 3.2+ is needed')
			EXIT
		END

		uin=WORD(args,1)
		msgtype=WORD(args,2)
		filename=SUBWORD(args,3)

		ADDRESS STRICQ.1
		GETCONTACT 'UIN='uin
		nick=ICQRC.NICK

		IF OPEN(1,filename,"R") THEN DO
			loop=1
			DO UNTIL EOF(1)
				line.loop=READLN(1)
				loop=loop+1
			END
			lines=loop-1
			CALL CLOSE(1)
		END
		ELSE DO
			CALL Cecho('Error : Couldn''t open message file!')
			EXIT
		END

		DO l=1 TO lines
			IF POS('FE'x,line.l)>0 THEN DO
				PARSE VALUE line.l WITH part1"ž"part2
				CechoS('['uin' ('nick')] - 'part1' 'part2)
			END
			ELSE CechoS('['uin' ('nick')] - 'line.l)
		END
	END
END
EXIT

Message_Normal:
	num=1
	IF ARG(1)=0 THEN num=num+1
	nick=WORD(aother,num)
	uin=NickToUIN(nick)
	therest=SUBWORD(aother,num+1)

	ADDRESS STRICQ.1
	SENDMESSAGE 'UIN='uin 'MSG="'therest'"'
	success=rc
	IF success=0 THEN CALL Cecho('[!msg -> 'nick'] - 'therest)
	IF success=5 THEN CALL Cecho('[!msg -> 'nick'] - Either UIN/K or MSG/K is missing.  Both are required.')
	IF success=10 THEN CALL Cecho('[!msg -> 'nick'] - The client is currently offline.')
RETURN

Message_URL:
	nick=WORD(aother,2)
	uin=NickToUIN(nick)
	therest=SUBWORD(aother,3)
	PARSE VALUE therest WITH mess1" "mess2
	ADDRESS STRICQ.1
	SENDMESSAGE 'UIN='uin 'MSG="'mess2'"' 'URL="'mess1'"'
	success=rc
	IF success=0 THEN CALL Cecho('[!url -> 'nick'] - 'therest)
	IF success=5 THEN CALL Cecho('[!url -> 'nick'] - Either UIN/K or MSG/K is missing.  Both are required.')
	IF success=10 THEN CALL Cecho('[!url -> 'nick'] - The client is currently offline.')
RETURN

File_Add:
	therest=SUBWORD(aother,2)
	ADDRESS STRICQ.1
	ADDFILE 'FILE='therest
	success=rc
	IF success=0 THEN CALL Cecho('[!add] - Everything went fine.')
	IF success=5 THEN CALL Cecho('[!add] - The file was not found.')
RETURN

File_AddReq:
	ADDRESS COMMAND 'requestfile >T:file.am2st TITLE "Select one file to add..." NOICONS'
	IF RC~=0 THEN RETURN
	IF OPEN(1,"T:file.am2st","R") THEN DO
		file=READLN(1)
		CALL CLOSE(1)
	END
	file=STRIP(file,"B",'"')
	ADDRESS STRICQ.1
	ADDFILE 'FILE='file
	success=rc
	IF success=0 THEN CALL Cecho('[!addreq] - Everything went fine.')
	IF success=5 THEN CALL Cecho('[!addreq] - The file was not found.')
RETURN

File_Clear:
	ADDRESS STRICQ.1
	ADDFILE CLEAR
	success=rc
	IF success=0 THEN CALL Cecho('[!clear] - Everything went fine.')
	IF success=5 THEN CALL Cecho('[!clear] - List already empty!')
RETURN

File_Send:
	nick=WORD(aother,2)
	uin=NickToUIN(nick)
	therest=SUBWORD(aother,3)
	ADDRESS STRICQ.1
	IF therest="" THEN FILEDIRECT 'UIN='uin
	ELSE FILEDIRECT 'UIN='uin 'DESC="'therest'"'
	success=rc
	IF success=0 THEN CALL Cecho('[!send -> 'nick'] - Everything went fine.')
	IF success=5 THEN CALL Cecho('[!send -> 'nick'] - Either the UIN keyword was not given or there are no files listed in the FileDirect Request window.')
	IF success=10 THEN CALL Cecho('[!send -> 'nick'] - The UIN was not found in the contact list.')
RETURN

Status:
	therest=SUBWORD(aother,2)
	ADDRESS STRICQ.1
	IF therest="" THEN DO
		STATUS GET
		CALL Cecho('[!status] - Your status is: 'ICQRC)
	END
	ELSE DO
		STATUS 'SET="'therest'"'
		success=rc
		IF success=0 THEN CALL Cecho('[!status] - Everything went fine.')
		IF success=5 THEN CALL Cecho('[!status] - SET did not recognize the status passed to it.')
	END
RETURN

UserInfo:
	uin=WORD(aother,2)
	uin=NickToUIN(uin)
	therest=SUBWORD(aother,3)
	ADDRESS STRICQ.1
	GETCONTACT 'UIN='uin
	success=rc
	IF success=0 THEN DO
		IF UPPER(therest)="UID"           | therest="" THEN CALL Cecho('UID          : 'ICQRC.UIN)
		IF UPPER(therest)="NICK"          | therest="" THEN CALL Cecho('Nick         : 'ICQRC.NICK)
		IF UPPER(therest)="FIRST NAME"    | therest="" THEN CALL Cecho('First name   : 'ICQRC.FIRST)
		IF UPPER(therest)="LAST NAME"     | therest="" THEN CALL Cecho('Last name    : 'ICQRC.LAST)
		IF UPPER(therest)="E-MAIL"        | therest="" THEN CALL Cecho('E-Mail       : 'ICQRC.EMAIL)
		IF UPPER(therest)="CITY"          | therest="" THEN CALL Cecho('City         : 'ICQRC.CITY)
		IF UPPER(therest)="STATE"         | therest="" THEN CALL Cecho('State        : 'ICQRC.STATE)
		IF UPPER(therest)="COUNTRY"       | therest="" THEN CALL Cecho('Country      : 'ICQRC.COUNTRY)
		IF UPPER(therest)="TELEPHONE"     | therest="" THEN CALL Cecho('Telephone    : 'ICQRC.PHONE)
		IF UPPER(therest)="HOMEPAGE"      | therest="" THEN CALL Cecho('Homepage     : 'ICQRC.HOMEPAGE)
		IF UPPER(therest)="ABOUT"         | therest="" THEN CALL Cecho('About        : 'ICQRC.ABOUT)
		IF UPPER(therest)="AGE"           | therest="" THEN CALL Cecho('Age          : 'ICQRC.AGE)
		IF UPPER(therest)="SEX"           | therest="" THEN CALL Cecho('Sex          : 'ICQRC.SEX)
		IF UPPER(therest)="LOCAL COMMENT" | therest="" THEN CALL Cecho('Local comment: 'ICQRC.COMMENT)
		IF UPPER(therest)="IP ADDRESS"    | therest="" THEN CALL Cecho('IP Address   : 'ICQRC.IP)
		IF UPPER(therest)="UNREAD MSGS"   | therest="" THEN CALL Cecho('Unread msgs  : 'ICQRC.NEWMSGS)
		IF UPPER(therest)="STATUS"        | therest="" THEN CALL Cecho('Status       : 'ICQRC.STATUS)
   END
	IF success=5 THEN CALL Cecho('[!uinfo] - The UIN was not found in the contact list, the ENTRY was out of range, or there is no SELECTED entry.')
RETURN

Help:
	CALL Cecho('+-----------------------------------------------------+')
	CALL Cecho('| [ H E L P - For AmIRC2STRICQ by Lorens Johansson! ] |')
	CALL Cecho('+-----------------------------------------------------+')
	CALL Cecho('|Help on the templates below:                         |')
	CALL Cecho('| <xxx> means that the argument is REQUIRED!          |')
	CALL Cecho('| [xxx] means that the argument is optional!          |')
	CALL Cecho('+-----------------------------------------------------+')
	CALL Cecho('|Available commands:                                  |')
	CALL Cecho('| /icq <uin|nick> <message>                           |')
	CALL Cecho('| /icq !help                                          |')
	CALL Cecho('| /icq !msg <uin|nick> <message>                      |')
	CALL Cecho('| /icq !url <uin|nick> <url> <message>                |')
	CALL Cecho('| /icq !add <path and file>                           |')
	CALL Cecho('| /icq !addreq                                        |')
	CALL Cecho('| /icq !clear                                         |')
	CALL Cecho('| /icq !send <uin|nick> [text]                        |')
	CALL Cecho('| /icq !status [status]                               |')
	CALL Cecho('|   online, occupied, invisible, away, not available, |')
	CALL Cecho('|   do not disturb, free for chat, offline            |')
	CALL Cecho('|   It will tell you your status if no arg is given!  |')
	CALL Cecho('| /icq !uinfo <uin|nick> [part]                       |')
	CALL Cecho('|   UID, Nick, First Name, Last Name, E-Mail, City,   |')
	CALL Cecho('|   State, Country, Telephone, Homepage, About, Age,  |')
	CALL Cecho('|   Sex, Local Comment, IP Address, Unread Msgs,      |')
	CALL Cecho('|   Status                                            |')
	CALL Cecho('| /icq !makelist                                      |')
	CALL Cecho('| /icq !list [status]                                 |')
	CALL Cecho('+-----------------------------------------------------+')
	CALL Cecho('| Only until AmIRC 3.4, do this for querywin...       |')
	CALL Cecho('| /query STRICQ-Mess                                  |')
	CALL Cecho('+-----------------------------------------------------+')
	CALL Cecho('|       For more info, read AmIRC2STRICQ.ReadMe.      |')
	CALL Cecho('+-----------------------------------------------------+')
RETURN

List:
	therest=SUBWORD(aother,2)
	IF OPEN(1,"ENV:AmIRC2STRICQ.contacts","R") THEN DO
		CALL Cecho('Lists users:')
		CALL Cecho(bold' UIN          Nick                  Status')
		CALL Cecho(bold' ------------ --------------------- -------------')
		uin_space="             "
		nick_space="                      "
		status_space="              "
		DO UNTIL EOF(1)
			line=READLN(1)
			IF line~="" THEN DO
				colcode=""
				PARSE VALUE line WITH nick_"			"uin_
				ADDRESS STRICQ.1
				GETCONTACT 'UIN='uin_
				uin_len=LENGTH(uin_)
				nick_len=LENGTH(nick_)
				status_len=LENGTH(ICQRC.STATUS)
				IF ICQRC.STATUS="Online" THEN colcode=color"3"
				IF ICQRC.STATUS="Free For Chat" THEN colcode=color"9"
				IF ICQRC.STATUS="Invisible" THEN colcode=color"9"
				IF ICQRC.STATUS="Occupied" THEN colcode=color"4"
				IF ICQRC.STATUS="Away" THEN colcode=color"4"
				IF ICQRC.STATUS="DND" THEN colcode=color"4"
				IF ICQRC.STATUS="Offline" THEN colcode=color"4"
				IF therest="" THEN CALL Cecho(colcode' 'uin_''DELSTR(uin_space,1,uin_len)''nick_''DELSTR(nick_space,1,nick_len)''ICQRC.STATUS)
				IF UPPER(therest)="ONLINE"&UPPER(ICQRC.STATUS)="INVISIBLE" THEN CALL Cecho(colcode' 'uin_''DELSTR(uin_space,1,uin_len)''nick_''DELSTR(nick_space,1,nick_len)''ICQRC.STATUS)
				IF UPPER(therest)="ONLINE"&UPPER(ICQRC.STATUS)="FREE FOR CHAT" THEN CALL Cecho(colcode' 'uin_''DELSTR(uin_space,1,uin_len)''nick_''DELSTR(nick_space,1,nick_len)''ICQRC.STATUS)
				IF UPPER(therest)=UPPER(ICQRC.STATUS) THEN DO
					CALL Cecho(colcode' 'uin_''DELSTR(uin_space,1,uin_len)''nick_''DELSTR(nick_space,1,nick_len)''ICQRC.STATUS)
				END
			END
		END
		CALL Cecho(bold' ------------ --------------------- -------------')
		CALL CLOSE(1)
	END
	ELSE DO
		CALL Cecho('Could not open the contacts file, have u used the !makelist command?')
	END
RETURN

MakeList:
	CALL GetPath
	ADDRESS COMMAND 'list 'stricqpath'Users/'your_uin'/Users lformat="%n" >T:A2S_users.temp'
	IF ~OPEN(1,"T:A2S_users.temp","R") THEN DO
		CALL Cecho('Could not open temp file, aborting...').
		EXIT
	END
	IF ~OPEN(2,"ENVARC:AmIRC2STRICQ.contacts","W") THEN DO
		CALL Cecho('Could not open AmIRC2STRICQ.contacts file (is it in use?), aborting...').
		EXIT
	END
	DO UNTIL EOF(1)
		cline=READLN(1)
		IF cline~="" THEN DO
			IF OPEN(3,stricqpath"Users/"your_uin"/Users/"cline,"R") THEN DO
				nick=DELSTR(READLN(3),1,5)
				CALL WRITELN(2,nick"			"cline)
				CALL CLOSE(3)
			END
			ELSE CALL Cecho('Could not open file for user: 'cline' (did you set your UIN correctly?), skipping...')
		END
	END
	CALL CLOSE(1)
	CALL CLOSE(2)
	ADDRESS COMMAND "copy >NIL: ENVARC:AmIRC2STRICQ.contacts ENV:"
	CALL DELETE("T:A2S_users.temp")
	CALL Cecho('[!makefile] - Everything went fine.')
RETURN

GetPath:
	IF OPEN(1,"ENV:STRICQ.path","R") THEN DO
		stricqpath=READLN(1)
		CALL CLOSE(1)
	END
	ELSE DO
		ADDRESS COMMAND 'requestfile >ENVARC:STRICQ.path TITLE "Where is STRICQ installed?" DRAWERSONLY NOICONS'
		IF RC~=0 THEN EXIT
		IF OPEN(1,"ENV: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)
		ADDRESS COMMAND "copy ENVARC:STRICQ.path ENV:"
	END
	IF RIGHT(stricqpath,1)~=":"&RIGHT(stricqpath,1)~="/" THEN stricqpath=stricqpath"/"
	IF ~EXISTS(stricqpath"STRICQ") THEN DO
		CALL Cecho('This is not the path to STRICQ! Please choose the correct path!')
		ADDRESS COMMAND "delete ENVARC:STRICQ.path QUIET"
		ADDRESS COMMAND "delete ENV:STRICQ.path QUIET"
		EXIT
	END
RETURN

NickToUIN:
	ui=arg(1)
	IF DATATYPE(ui,"W")=0 THEN DO
		found=0
		IF OPEN(1,"ENV:AmIRC2STRICQ.contacts","R") THEN DO
			DO UNTIL EOF(1)
				line=READLN(1)
				IF line~="" THEN DO
					PARSE VALUE line WITH nick_"			"uin_
					IF UPPER(ui)=UPPER(nick_) THEN DO
						newuin=uin_
						found=1
					END
				END
			END
			CALL CLOSE(1)
		END
		ELSE DO
			CALL Cecho('Could not open the contacts file, have you used the !makelist command?')
			newuin=ui
		END
		IF found=0 THEN DO
			CALL Cecho('Could not find the specified nick, have you used the !makelist command?')
			newuin=ui
		END
	END
	ELSE newuin=ui
RETURN(newuin)

Cecho:
	text=ARG(1)
	ADDRESS AMIRC.1
	IF LENGTH(text)>200 THEN DO
		DO FOREVER
			text1=LEFT(text,200)
			IF opendccwin=1 THEN 'ECHO P='d2c(27)'«STRICQ» N=STRICQ-Mess 'text1
			ELSE 'ECHO P='d2c(27)'«STRICQ» 'text1
			IF LENGTH(text)<201 THEN LEAVE
			text=SUBSTR(text,201)
		END
	END
	ELSE DO
		IF opendccwin=1 THEN 'ECHO P='d2c(27)'«STRICQ» N=STRICQ-Mess 'text
		ELSE 'ECHO P='d2c(27)'«STRICQ» 'text
	END
RETURN

CechoS:
	text=ARG(1)
	ADDRESS AMIRC.1
	IF LENGTH(text)>200 THEN DO
		DO FOREVER
			text1=LEFT(text,200)
			IF opendccwin=1 THEN 'ECHO P='d2c(27)'«STRICQ» N=STRICQ-Mess 'x2c(02)''text1
			ELSE 'ECHO P='d2c(27)'«STRICQ» 'x2c(02)''text1
			IF LENGTH(text)<201 THEN LEAVE
			text=SUBSTR(text,201)
		END
	END
	ELSE DO
		IF opendccwin=1 THEN 'ECHO P='d2c(27)'«STRICQ» N=STRICQ-Mess 'x2c(02)''text
		ELSE 'ECHO P='d2c(27)'«STRICQ» 'x2c(02)''text
	END
RETURN

LoadRexx:
	IF ~OPEN(1,"ENV:AmIRC2STRICQ.prefs","R") THEN DO
		CALL Cecho('You MUST use the install script to make this work, because the install script is also the prefs program!')
		EXIT
	END
	rexxtext=READCH(1,64000)
	INTERPRET rexxtext
	CALL CLOSE(1)
	DROP rexxtext
RETURN
