mirror of
https://github.com/GeorgeMcMullen/rxIRC.git
synced 2026-01-18 09:12:53 +00:00
Compare commits
No commits in common. "master" and "2.0" have entirely different histories.
7
00readme
Normal file
7
00readme
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
From: Carl von Loesch <Carl.von.Loesch@arbi.informatik.uni-oldenburg.de>
|
||||||
|
To: rxirc-l@vmtecqro.qro.itesm.mx (The rxIRC List),
|
||||||
|
operlist@eff.org (IRC Operchaos List)
|
||||||
|
Subject: rxIRC 2.0 ready to go - FTP admins invited to copy/mirror!
|
||||||
|
Date: Mon, 14 Jun 93 15:57:16 CES
|
||||||
|
|
||||||
|
I am hereby releasing rxIRC 2.0. rxIRC is the IRC client for IBM VM systems.
|
||||||
@ -25,5 +25,10 @@ ACTION commands:
|
|||||||
with the /ME or /Emote commands, like this:
|
with the /ME or /Emote commands, like this:
|
||||||
/me feels a little hungry now.
|
/me feels a little hungry now.
|
||||||
|
|
||||||
And finally create your own commands with help of the /ALIAS command.
|
You can also try to add your own commands into the program. With the way
|
||||||
See the "SPECIAL" help page.
|
it is done, it should be easy to understand also for someone who doesn't
|
||||||
|
really know REXX. Just edit the RXIRC EXEC, move to the bottom of the file,
|
||||||
|
and turn a page back. You'll see where you can add your lines.
|
||||||
|
|
||||||
|
Good suggestions for action commands are always welcome, send them to me
|
||||||
|
by NoteServ or mail. :)
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
.cm last change by lynx -- nov 94
|
.cm last change by lynx -- april 25, 1991
|
||||||
|
|
||||||
_______
|
_______
|
||||||
*|^^^^^^^|* The Internet Relay Chat program
|
*|^^^^^^^|* The Internet Relay Chat program
|
||||||
@ -11,26 +11,19 @@
|
|||||||
|
|
||||||
|
|
||||||
The PROFILE RXIRC startup file:
|
The PROFILE RXIRC startup file:
|
||||||
This file should contain a series of lines that are /source'd by
|
| This file should contain a series of lines that are /source'd by
|
||||||
rxIRC as soon as you get connected to the first server. You could
|
| rxIRC as soon as you get connected to the first server. You could
|
||||||
for instance do "join #fun" or "who bunny", probably you will
|
| for instance do "join #fun" or "who bunny", probably you will
|
||||||
want to set up some aliases. See /source for more.
|
| want to set up some aliases. See /source for more.
|
||||||
The file IRC PROFILE is obsolete. For a conversion you have
|
| The file IRC PROFILE is obsolete. For a conversion you have
|
||||||
to rename it and remove all the command characters (the slashes).
|
| to rename it and remove all the command characters (the slashes).
|
||||||
|
|
||||||
Namesfile settings:
|
Namesfile settings:
|
||||||
rxIRC gets your default nickname and full name from your namesfile
|
rxIRC gets your default nickname and full name from your namesfile
|
||||||
unless otherwise specified in the command line. First it looks for
|
unless otherwise specified in the command line. You can also set
|
||||||
:ircnick and :ircname tags in your 'self-entry' in your namesfile,
|
a 'motto' line by adding a :motto tag to your self-entry in your
|
||||||
if not present it will take the normal :nick and :name entries.
|
namesfile which will be displayed when USERINFO requests are sent
|
||||||
Environment settings supercede these entries. You may also set a
|
to you while you are ircing with rxIRC.
|
||||||
'motto' line by adding a :motto tag, which will be displayed when
|
|
||||||
USERINFO requests are sent to you while you are on IRC. Particularely
|
|
||||||
| interesting is how you can specify a :wwwport entry, which will acti-
|
|
||||||
| vate rxIRC's builtin httpd (world wide web server). :wwwport should
|
|
||||||
| contain a number greater than 1023. Also look up the /export command
|
|
||||||
| to see how to use the httpd. Use a WWW client to learn about writing
|
|
||||||
| HTML files. That is beyond the scope of these help files.
|
|
||||||
|
|
||||||
Environment settings:
|
Environment settings:
|
||||||
You may use 'setenv' or 'globalv' to put some values into environment
|
You may use 'setenv' or 'globalv' to put some values into environment
|
||||||
@ -39,30 +32,29 @@ Environment settings:
|
|||||||
other IRC programs.
|
other IRC programs.
|
||||||
|
|
||||||
The RXIRC PFKEYS file is obsolete. You can use the 'PF' commands
|
The RXIRC PFKEYS file is obsolete. You can use the 'PF' commands
|
||||||
from PROFILE RXIRC now.
|
| from PROFILE RXIRC now.
|
||||||
|
|
||||||
Defaults in the RXIRC NAMES file (the rxIRC configuration file):
|
Defaults in the RXIRC NAMES file (the rxIRC configuration file):
|
||||||
server: The internet address of an IRC server
|
server: The internet address of an IRC server
|
||||||
| pass: A password, if your IRC server needs it (rarely ever)
|
|
||||||
port: The TCP/IP port it runs on, usually 6667
|
port: The TCP/IP port it runs on, usually 6667
|
||||||
browser: Name of a command good for showing files.
|
| browser: Name of a command good for showing files.
|
||||||
Typically BROWSE, but if that's not there try XEDIT.
|
| Typically BROWSE, but if that's not there try XEDIT.
|
||||||
timeout: Not used anymore, you can remove it
|
| timeout: Not used anymore, you can remove it
|
||||||
logging: Set it to ON or OFF for default logging
|
logging: Set it to ON or OFF for default logging
|
||||||
quiet_ignore: Usually OFF
|
quiet_ignore: Usually OFF
|
||||||
loud_beeps: Switch it ON only when a BEEP MODULE is available.
|
loud_beeps: Switch it ON only when a BEEP MODULE is available.
|
||||||
show_numbers: When ON, rxIRC shows the numerics of IRC server replies
|
show_numbers: When ON, rxIRC shows the numerics of IRC server replies
|
||||||
list_all: Show also channels without topic in /list
|
list_all: Show also channels without topic in /list
|
||||||
beep_char: The character that gets translated into a beep and back.
|
| beep_char: The character that gets translated into a beep and back.
|
||||||
bold_char: If you define this one, you can make 'bold' messages
|
| bold_char: If you define this one, you can make 'bold' messages
|
||||||
by inserting this character in your messages. They
|
| by inserting this character in your messages. They
|
||||||
will appear hilighted on rxIRC and bold on ircII
|
| will appear hilighted on rxIRC and bold on ircII
|
||||||
clients (at least)
|
| clients (at least)
|
||||||
highlight_char: Not used anymore
|
| highlight_char: Not used anymore
|
||||||
show_time: When the current time will be displayed on the
|
| show_time: When the current time will be displayed on the
|
||||||
screen. Choices are 0 (never), 10 (every ten
|
| screen. Choices are 0 (never), 10 (every ten
|
||||||
minutes), 20 (every 20 minutes), 30 (every 30
|
| minutes), 20 (every 20 minutes), 30 (every 30
|
||||||
minutes), and 60 (every 60 minutes).
|
| minutes), and 60 (every 60 minutes).
|
||||||
|
|
||||||
You might choose to copy this file onto your disk to be able to
|
You might choose to copy this file onto your disk to be able to
|
||||||
modify the values.
|
modify the values.
|
||||||
|
|||||||
48
faq.helpirc
48
faq.helpirc
@ -2,19 +2,28 @@ Frequently asked questions:
|
|||||||
--------------------------
|
--------------------------
|
||||||
What am I supposed to write into the :server field in RXIRC NAMES?
|
What am I supposed to write into the :server field in RXIRC NAMES?
|
||||||
|
|
||||||
| You don't have a server? Check out the "servers.*" list which
|
You don't have a server? If you're in the US then Trillian
|
||||||
| is available by ftp on cs-ftp.bu.edu in /irc/support/.
|
(hrose@eff.org) will most probably be able to tell you the nearest
|
||||||
|
server to you. You can however connect to IRC through an open server
|
||||||
|
like irc.mit.edu (18.70.0.224), fairhope.andrew.cmu.edu (128.2.11.213)
|
||||||
|
magpie.ee.su.oz.au (129.78.13.28) or ucsu.colorado.edu (128.138.129.83)
|
||||||
|
| and then ask operators for the nearest server to you.
|
||||||
|
You can also examine the /links list, but geographical vicinity
|
||||||
|
usually is not network vicinity!
|
||||||
|
|
||||||
Why can't rxIRC have everything that ircII has?
|
|Why can't rxIRC have /on and /notify and everything else
|
||||||
|
|that ircII has?
|
||||||
|
|
||||||
Because ircII is a giant program that a lot of people have worked on
|
Because ircII is a giant program that a lot of people have worked on
|
||||||
to be able to do all of that. rxIRC is a relatively little program
|
to be able to do all of that. rxIRC is a relatively little program
|
||||||
which I also want to stay that way, or it might get unpleasantly
|
which I also want to stay that way, or it might get unpleasantly
|
||||||
slow in execution!
|
slow in execution!
|
||||||
|
|
|
||||||
Strange says:
|
|Strange says:
|
||||||
There is no /on because no one wants to code it. None of the people
|
| There is no /on because no one wants to code it. None of the people
|
||||||
who have worked on rxIRC NEED or WANT /on. :P
|
| who have worked on rxIRC NEED or WANT /on. :P
|
||||||
|
|
|
||||||
|
| Concerning /notify: Use a /note server! :)
|
||||||
|
|
||||||
Why when I do something outside of rxIRC with /exec, or simply read
|
Why when I do something outside of rxIRC with /exec, or simply read
|
||||||
the /help files, the server signs me off?
|
the /help files, the server signs me off?
|
||||||
@ -31,17 +40,24 @@ You have a bug, "/who -h *.il" doesn't work!
|
|||||||
to ircII. They are NOT standard. It is the normal and natural way
|
to ircII. They are NOT standard. It is the normal and natural way
|
||||||
to do it simply with "/who *.il". Or what about trying /local.
|
to do it simply with "/who *.il". Or what about trying /local.
|
||||||
|
|
||||||
|
When I use one of the new action commands on a channel, like /smile
|
||||||
|
I get error messages.
|
||||||
|
|
||||||
|
| There are controverse notions of the ethics of the CTCP ACTION protocol.
|
||||||
|
| I think it's a valid alternative form of communication and should be
|
||||||
|
| supported, but since I invented it I might be biased. Well some IRC
|
||||||
|
| client programmers insist on not supporting this protocol and return
|
||||||
|
| all sorts of funny messages. Eventually avoid using these commands
|
||||||
|
| on channels where people's clients answer with sarcastic comments.
|
||||||
|
|
||||||
rxIRC crashes and then no communication software (like CHAT) works
|
rxIRC crashes and then no communication software (like CHAT) works
|
||||||
anymore!
|
anymore!
|
||||||
|
|
||||||
rxIRC should not crash, if it does please report that to me.
|
| rxIRC should not crash, if it does please report that to me.
|
||||||
To unlock your machine in such a situation it is not necessary to
|
| To unlock your machine in such a situation it is not necessary to
|
||||||
re-IPL it, instead just do "NUCXDROP REXXWAIT". "NUCXMAP" shows
|
| re-IPL it, instead just do "NUCXDROP REXXWAIT". "NUCXMAP" shows
|
||||||
what so-called nucleus extensions are loaded in your machine.
|
| what so-called nucleus extensions are loaded in your machine.
|
||||||
|
|
||||||
It tells me loader table overflow
|
|
||||||
|
|
||||||
Use 'SET LDRTBLS 10' in your PROFILE or in the RXIRC EXEC.
|
|
||||||
|
|
||||||
You still have a question?
|
You still have a question?
|
||||||
Write mail to <lynx@imp.de> or to '244661 at DOLUNI1'.
|
Write mail to 'loesch@informatik.uni-oldenburg.de' (internet).
|
||||||
|
or to '244661 at DOLUNI1' (bitnet)
|
||||||
|
|||||||
@ -10,8 +10,13 @@ pf6 IMM /lastlog
|
|||||||
alias ctoggle %k %c pf$k IMM /toggle $k |join $c|part $c
|
alias ctoggle %k %c pf$k IMM /toggle $k |join $c|part $c
|
||||||
ctoggle 9 #talk
|
ctoggle 9 #talk
|
||||||
ctoggle 10 #initgame
|
ctoggle 10 #initgame
|
||||||
pf11 DEL /notify
|
|
||||||
|
|
||||||
* here comes the list of friends to notify for
|
* Easy use of services
|
||||||
* these are just examples, fill in your own
|
alias .ni msg nickserv@service.de
|
||||||
notify SymLynX Lambretta
|
alias .no msg noteserv@service.de
|
||||||
|
alias .w .ni whois
|
||||||
|
alias .await .no waitfor
|
||||||
|
alias .del .no delete
|
||||||
|
alias .list .no list
|
||||||
|
alias .m .no msg
|
||||||
|
alias .read .no read
|
||||||
|
|||||||
485
rxirc.exec
485
rxirc.exec
@ -1,6 +1,7 @@
|
|||||||
/* rxIRC
|
/* rxIRC
|
||||||
* Internet Relay Chat client program for VM/CMS systems
|
* Internet Relay Chat client program for VM/CMS systems
|
||||||
* written by Carl 'LynX' v. Loesch (loesch@informatik.uni-oldenburg.de)
|
* written by Carl 'LynX' v. Loesch (loesch@informatik.uni-oldenburg.de)
|
||||||
|
* created by Lynx (244661 at DOLUNI1) on Thursday, 14 Feb 1991
|
||||||
* Credits for suggestions, code contribution, miscellaneous help go to:
|
* Credits for suggestions, code contribution, miscellaneous help go to:
|
||||||
* Jose Maria Blasco, Doug Sewell, Martin Ahlborn, Jim McMaster,
|
* Jose Maria Blasco, Doug Sewell, Martin Ahlborn, Jim McMaster,
|
||||||
* Scott Maxell, Juan Courcoul, Rob Blais, Mike Letourneau, Grant Pair
|
* Scott Maxell, Juan Courcoul, Rob Blais, Mike Letourneau, Grant Pair
|
||||||
@ -8,24 +9,23 @@
|
|||||||
*
|
*
|
||||||
* requires RXSOCKET MODULE version 2 by Arty Ecock (eckcu@cunyvm.bitnet)
|
* requires RXSOCKET MODULE version 2 by Arty Ecock (eckcu@cunyvm.bitnet)
|
||||||
*
|
*
|
||||||
* Copyright (C)1991,2,3,4 by LynX & CvO University Oldenburg, Germany
|
* Copyright (C)1991,2,3 by Lynx & CvO University Oldenburg, Germany
|
||||||
* You may freely use this software at your own risk.
|
* You may freely use this software at your own risk.
|
||||||
|
* No distribution of modified copies permitted, pls send changes to me.
|
||||||
*
|
*
|
||||||
* Warning: Changing the code to display fake user information is
|
* By the way, this is _not_ the source code of rxIRC. There exists a
|
||||||
* considered an offense by many IRC administrators!
|
* special file IRC PREXX which when run through a preprocessor produces
|
||||||
*
|
* the actual RXIRC EXEC. That file is commented. This one is not.
|
||||||
*/ progname='rxIRC'; vers='2.1'; trace 'O'
|
*/ vers='2.0'; trace 'O'
|
||||||
address "COMMAND"; signal on HALT; "VMFCLEAR"
|
address "COMMAND"; signal on HALT; "VMFCLEAR"
|
||||||
cmds='AWAY AWAIT ADMIN CHANNEL CONNECT DEOP DIE HASH INFO ISON JOIN KICK',
|
cmds='AWAY AWAIT ADMIN CHANNEL CONNECT DEOP DIE HASH INFO ISON JOIN KICK',
|
||||||
'KILL LIST LINKS LUSERS MODE MAIL MOTD NAMES NICK NOTICE NOTE OPER PASS',
|
'KILL LIST LINKS LUSERS MODE MAIL MOTD NAMES NICK NOTICE NOTE OPER PASS',
|
||||||
'PART REHASH RESTART QUIT SERVICE SQUIT SUMMON STATS TIME TRACE',
|
'PART REHASH RESTART QUIT SERVICE SQUIT SUMMON STATS TOPIC TIME TRACE',
|
||||||
'USERS USERHOST VOICE WHOWAS WALLOPS WALL XTRA'
|
'USERS USERHOST VOICE WHOWAS WALLOPS WALL XTRA'
|
||||||
log=0; query=; ignore=; omit=; lastjoin=; lastsender=; lastorigin=;
|
log=0; query=; ignore=; lastjoin=; lastsender=; onoff.1="on"; onoff.0="off"
|
||||||
export=; onoff.1="on"; onoff.0="off"
|
|
||||||
invitation=; away=; ll.=; curll=1; logevent=0; target=time('R')
|
invitation=; away=; ll.=; curll=1; logevent=0; target=time('R')
|
||||||
v.=; al.=; varnames=; aliasnames=; cmdchar=; userinfo=; sourcing=0
|
v.=; al.=; varnames=; aliasnames=; cmdchar=; userinfo=; sourcing=0
|
||||||
have_rxwt=0; who_empty=0; catmode=0; catlist=; abortsource=0; skiplines=0
|
have_rxwt=0; who_empty=0; catmode=0; catlist=; abortsource=0; skiplines=0
|
||||||
nflist=; nfhere=; nfcatch=0
|
|
||||||
"EXECIO * CP (STEM PF. STRING QUERY PF"
|
"EXECIO * CP (STEM PF. STRING QUERY PF"
|
||||||
do i=1 to pf.0
|
do i=1 to pf.0
|
||||||
a=word(pf.i,2)
|
a=word(pf.i,2)
|
||||||
@ -53,14 +53,14 @@
|
|||||||
end
|
end
|
||||||
if rc/=0 then call BYE "RXSOCKET version 2 required"
|
if rc/=0 then call BYE "RXSOCKET version 2 required"
|
||||||
do 3
|
do 3
|
||||||
parse value SOCKET('INITIALIZE', "rxIRC", 7) with rc . etc
|
parse value SOCKET('INITIALIZE', 'rxIRC', 1) with rc . etc
|
||||||
if rc=2004 then do
|
if rc=2004 then do
|
||||||
say '<cleaning up a zombie rxsocket nucext>'
|
say '<cleaning up a zombie rxsocket nucext>'
|
||||||
'NUCXDROP RXSOCKET'
|
'NUCXDROP RXSOCKET'
|
||||||
end
|
end
|
||||||
else leave
|
else leave
|
||||||
end
|
end
|
||||||
if rc/=0 then call BYE "socket init error:" etc
|
if rc/=0 then call BYE "initialize error:" etc
|
||||||
parse value SOCKET('GETHOSTNAME') with . hostname
|
parse value SOCKET('GETHOSTNAME') with . hostname
|
||||||
parse value SOCKET('GETDOMAINNAME') with . domain
|
parse value SOCKET('GETDOMAINNAME') with . domain
|
||||||
'REXXWAIT TEST'
|
'REXXWAIT TEST'
|
||||||
@ -76,9 +76,8 @@
|
|||||||
'IMMCMD SET HI'
|
'IMMCMD SET HI'
|
||||||
"NAMEF :NICK RXIRC :SERVER :PORT :LOGGING :QUIET_IGNORE :SHOW_TIME ",
|
"NAMEF :NICK RXIRC :SERVER :PORT :LOGGING :QUIET_IGNORE :SHOW_TIME ",
|
||||||
":BOLD_CHAR :BEEP_CHAR :LOUD_BEEPS :SHOW_NUMBERS :LIST_ALL :BROWSER",
|
":BOLD_CHAR :BEEP_CHAR :LOUD_BEEPS :SHOW_NUMBERS :LIST_ALL :BROWSER",
|
||||||
":PASS (LIFO FILE RXIRC"
|
"(LIFO FILE RXIRC"
|
||||||
if rc/=0 then call BYE "missing or unreadable RXIRC NAMES file"
|
if rc/=0 then call BYE "missing or unreadable RXIRC NAMES file"
|
||||||
parse pull server_pass
|
|
||||||
pull viewcmd; pull def_listall; pull def_numb; pull def_loud
|
pull viewcmd; pull def_listall; pull def_numb; pull def_loud
|
||||||
parse pull beepch; parse pull boldch; parse pull showtime; pull def_quiet
|
parse pull beepch; parse pull boldch; parse pull showtime; pull def_quiet
|
||||||
pull def_log; parse pull def_port; parse pull def_server
|
pull def_log; parse pull def_port; parse pull def_server
|
||||||
@ -87,11 +86,8 @@
|
|||||||
if boldch='' then boldch=d2c(0)
|
if boldch='' then boldch=d2c(0)
|
||||||
"GLOBALV SELECT CENV GET IRCNICK IRCSERVER IRCNAME IRCPORT"
|
"GLOBALV SELECT CENV GET IRCNICK IRCSERVER IRCNAME IRCPORT"
|
||||||
|
|
||||||
"NAMEFIND :USERID" me ":NICK :NAME :MOTTO :CMDCHAR :IRCNICK :IRCNAME ",
|
"NAMEFIND :USERID" me ":NICK :NAME :MOTTO :CMDCHAR :IRCNICK :IRCNAME (LIFO"
|
||||||
":WWWPORT (LIFO"
|
|
||||||
if rc=0 then do
|
if rc=0 then do
|
||||||
parse pull wwwport; if wwwport/='' & ^datatype(wwwport,'W') then do
|
|
||||||
wwwport=; call BYE "WWW port must be numeric"; end
|
|
||||||
parse pull name; parse pull nick
|
parse pull name; parse pull nick
|
||||||
if ircnick="" then ircnick=nick
|
if ircnick="" then ircnick=nick
|
||||||
if ircname="" then ircname=name
|
if ircname="" then ircname=name
|
||||||
@ -135,44 +131,25 @@
|
|||||||
|
|
||||||
parse value RESETVALUE('ALL') with rc .
|
parse value RESETVALUE('ALL') with rc .
|
||||||
if rc/=0 then call BYE "problem w/RESETVALUE"
|
if rc/=0 then call BYE "problem w/RESETVALUE"
|
||||||
parse value SETVALUE('TIME ==:==:00') with rc .
|
parse value SETVALUE('TIME ==:=0:00') with rc .
|
||||||
if rc/=0 then call BYE "problem w/SETVALUE TIME"
|
if rc/=0 then call BYE "problem w/SETVALUE TIME"
|
||||||
parse value SETVALUE('MSG IUCV') with rc .
|
parse value SETVALUE('MSG IUCV') with rc .
|
||||||
if rc/=0 then call BYE "problem w/SETVALUE MSG IUCV"
|
if rc/=0 then call BYE "problem w/SETVALUE MSG IUCV"
|
||||||
|
call S "rxIRC"hi||vers||yo"- You are" ircnick "("ircname")"
|
||||||
if wwwport<1024 then wwwport=''
|
|
||||||
else do
|
|
||||||
parse value SOCKET('SOCKET') with rc www etc
|
|
||||||
if rc/=0 then call BYE "socket:" etc
|
|
||||||
parse value SOCKET('SETSOCKOPT',www,'SOL_SOCKET','SO_ASCII','ON'),
|
|
||||||
with rc . etc
|
|
||||||
if rc/=0 then call BYE "setsockopt:" etc
|
|
||||||
parse value SOCKET('BIND', www, 'AF_INET' wwwport SOCKET('GETHOSTID')),
|
|
||||||
with rc . etc
|
|
||||||
if rc/=0 then call BYE "bind:" etc
|
|
||||||
parse value SOCKET('LISTEN', www, 9) with rc . etc
|
|
||||||
if rc/=0 then call BYE "listen:" etc
|
|
||||||
parse value SOCKET('IOCTL', www, 'FIONBIO', 1) with rc . etc
|
|
||||||
if rc/=0 then call BYE "nonblocking i/o:" etc
|
|
||||||
myurl="http://"hostname"."domain":"wwwport"/"
|
|
||||||
end
|
|
||||||
|
|
||||||
call S progname||hi||vers||yo"- You are" ircnick "("ircname")"
|
|
||||||
call S "Logging is" onoff.log"; Audible bells are",
|
call S "Logging is" onoff.log"; Audible bells are",
|
||||||
onoff.loud"; Quiet ignore is" onoff.quiet
|
onoff.loud"; Quiet ignore is" onoff.quiet
|
||||||
if www/='' then call S "Builtin httpd active as"hi||myurl||yo
|
if showtime=80 then say "Time display is off"
|
||||||
|
else say "Time is displayed every" showtime "minutes"
|
||||||
call CONNECT ircserver
|
call CONNECT ircserver
|
||||||
call SOURCE "PROFILE", 1
|
|
||||||
if nflist/='' then do; nfcatch=1; call SEND "ISON" nflist; end
|
|
||||||
call S copies("-",79)lo
|
call S copies("-",79)lo
|
||||||
do forever
|
do forever
|
||||||
"IMMCMD STATUS HI"
|
"IMMCMD STATUS HI"
|
||||||
if rc/=0 then call S,
|
if rc/=0 then call S,
|
||||||
'Sorry, "hi" is a system reserved word. Try an other operating system.'
|
'Sorry, "hi" is a system reserved word. Try an other operating system.'
|
||||||
parse value WAIT('TIME','CONS','MSG','SOCKET READ *') with rc type data
|
parse value WAIT('TIME','CONS','MSG','SOCKET READ' sock) with rc type data
|
||||||
select
|
select
|
||||||
when rc/=0 then call BYE "REXXWAIT returning" rc
|
when rc/=0 then call BYE "REXXWAIT returning code" rc
|
||||||
when type='SOCKET' & data='READ' sock then do
|
when type='SOCKET' then do
|
||||||
parse value SOCKET('READ', sock) with rc . data
|
parse value SOCKET('READ', sock) with rc . data
|
||||||
if rc=54 then call BYE
|
if rc=54 then call BYE
|
||||||
if rc/=0 then call BYE 'socket read error' rc
|
if rc/=0 then call BYE 'socket read error' rc
|
||||||
@ -198,16 +175,12 @@
|
|||||||
if ^quiet & left(data,1)/='*' then call TELL origin '*' ignore_reply
|
if ^quiet & left(data,1)/='*' then call TELL origin '*' ignore_reply
|
||||||
end; else do
|
end; else do
|
||||||
call OUT hi||ni':'lo||data
|
call OUT hi||ni':'lo||data
|
||||||
if away/='' & left(data,1)/='*' & origin/=lastorigin then do
|
if away/='' & left(data,1)/='*' then call TELL origin '* away:' away
|
||||||
call TELL origin '* away:' away
|
|
||||||
lastorigin = origin
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
when type = 'TIME' then do
|
when type = 'TIME' then do
|
||||||
parse var data . hh':'mm':' .
|
parse var data . hh':'mm':' .
|
||||||
if datatype(mm/showtime,'w') then call S 'It is now' hh':'mm
|
if datatype(mm/showtime,'w') then call S 'It is now' hh':'mm
|
||||||
if nflist/='' then do; nfcatch=1; call SEND "ISON" nflist; end
|
|
||||||
'EXECIO 1 CP(VAR A STR Q' me
|
'EXECIO 1 CP(VAR A STR Q' me
|
||||||
parse var a . '-' a .
|
parse var a . '-' a .
|
||||||
if a='DSC' then do
|
if a='DSC' then do
|
||||||
@ -216,46 +189,16 @@
|
|||||||
call BYE data
|
call BYE data
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
when type='SOCKET' then do
|
otherwise
|
||||||
parse var data . gsock
|
call S 'Unexpected event:' type data
|
||||||
if gsock=www then do
|
|
||||||
parse value SOCKET('ACCEPT', www) with rc gsock . gport gipnum
|
|
||||||
end; else do
|
|
||||||
parse value SOCKET('READ', gsock) with rc . data
|
|
||||||
if rc=54 then iterate
|
|
||||||
if rc/=0 then call S 'Read error on http connection' gsock '('rc')'
|
|
||||||
else do
|
|
||||||
if data='' then do; SOCKET('CLOSE', gsock); iterate; end
|
|
||||||
parse var data cmd url .
|
|
||||||
parse var url URL(lf) .
|
|
||||||
if url='/' then url='/index.html'
|
|
||||||
parse var url '/'fn'.'ft'/' x; upper fn ft
|
|
||||||
if x='' & fn/='' & fn/='*' & ft/='' & ft/='*' &,
|
|
||||||
(cmd='GET'|cmd='HEAD') & FINDM(export,fn'.'ft) then do
|
|
||||||
call S 'httpd: request from' gipnum':' cmd url
|
|
||||||
/* 'MAKEBUF'; 'LISTFILE' fn ft '(STACK'; t=rc; 'DROPBUF' */
|
|
||||||
'STATE' fn ft
|
|
||||||
if rc=0 then do
|
|
||||||
call WRITE gsock "HTTP/1.0 200 Sure"
|
|
||||||
call WRITE gsock "Server:" progname"/"vers
|
|
||||||
if ft='HTML' then ct='html'; else ct='plain'
|
|
||||||
call WRITE gsock "Content-type: text/"ct
|
|
||||||
call WRITE gsock ''
|
|
||||||
if cmd='GET' then call WRITEFILE gsock fn ft pubmode
|
|
||||||
end
|
|
||||||
end; else call S 'httpd: invalid request ('cmd url') from' gipnum
|
|
||||||
SOCKET('SHUTDOWN', gsock)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
otherwise call S 'Unexpected event:' type data
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
call BYE "a rexx oddity"
|
||||||
|
|
||||||
PARSE:
|
PARSE:
|
||||||
parse arg a
|
parse arg a
|
||||||
if loud & pos(beep,a)/=0 then "BEEP"
|
if loud & pos(beep,a)/=0 then "BEEP"
|
||||||
tu=; a=translate(a,"%"||beepch||"_",rev||beep||undl)
|
b=; a=translate(a,"%"||beepch||"_",rev||beep||undl)
|
||||||
i=1; j=0; do forever; i=index(a,bold,i)
|
i=1; j=0; do forever; i=index(a,bold,i)
|
||||||
if i=0 then leave
|
if i=0 then leave
|
||||||
if j=0 then a=insert(hi,a,i)
|
if j=0 then a=insert(hi,a,i)
|
||||||
@ -266,86 +209,76 @@ PARSE:
|
|||||||
if j=1 then a=a||lo
|
if j=1 then a=a||lo
|
||||||
if left(a,1)=':' then do
|
if left(a,1)=':' then do
|
||||||
parse var a ':'s m e f ':'g
|
parse var a ':'s m e f ':'g
|
||||||
parse var s s"!"sad
|
parse var s s'!'sad
|
||||||
end
|
end
|
||||||
else do; s=''; parse var a m e f ':'g; end
|
else do; s=''; parse var a m e f ':'g; end
|
||||||
f=strip(f)
|
f=strip(f)
|
||||||
logevent = 1
|
logevent = 1
|
||||||
select
|
select
|
||||||
when m='CHANNEL' then if e="0"
|
when m='CHANNEL' then if e="0"
|
||||||
then tu='***' s 'leaves this channel'
|
then b='***' s 'leaves this channel'
|
||||||
else tu='***' s 'joins this channel'
|
else b='***' s 'joins this channel'
|
||||||
when m='INVITE' then do
|
when m='INVITE' then do
|
||||||
f=strip(word(f g,1))
|
f=strip(word(f g,1))
|
||||||
invitation = f
|
invitation = f
|
||||||
lastsender = s
|
lastsender = s
|
||||||
tu='***' s '('sad') invites you to channel' f g; end
|
b='***' s '('sad') invites you to channel' f; end
|
||||||
when m='JOIN' then do
|
when m='JOIN' then do
|
||||||
e=strip(word(e g,1))
|
e=strip(word(e g,1))
|
||||||
tu='***' s '('sad') joins channel' e
|
b='***' s '('sad') joins channel' e
|
||||||
if s=ircnick then target=translate(e)
|
if s=ircnick then target=translate(e)
|
||||||
else lastjoin=s
|
else lastjoin=s
|
||||||
end
|
end
|
||||||
when m='KICK' then tu='***' s 'kicks' f 'off channel' e '('g')'
|
when m='KICK' then b='***' s 'kicks' f 'off channel' e
|
||||||
when m='KILL' then tu='You were killed by' s subword(g,2)
|
when m='KILL' then b='You were killed by' s subword(g,2)
|
||||||
when m='MODE' then tu='Mode change:' s 'sets' f 'on' e||g
|
when m='MODE' then b='Mode change:' s 'sets' f 'on' e
|
||||||
when m='MSG' then tu='<'s'>' g
|
when m='MSG' then b='<'s'>' g
|
||||||
when m='NICK' then tu='***' s 'is now known as' e||g
|
when m='NICK' then b='***' s 'is now known as' e||g
|
||||||
when m='NOTICE' then select
|
when m='NOTICE' then select
|
||||||
when s='' | s=servername then do
|
when s='' | s=servername then do
|
||||||
if word(g,1)="***" then tu=subword(g,2)
|
if word(g,1)="***" then b=subword(g,2)
|
||||||
else tu=g
|
else b=g
|
||||||
a=; parse var tu 'Your host is 'g'['a .
|
a=; parse var b 'Your host is 'g'['a .
|
||||||
if a/='' then servername=g
|
if a/='' then servername=g
|
||||||
end
|
end
|
||||||
when translate(e)=capnick then do
|
when translate(e)=capnick then do
|
||||||
if ^FINDM(ignore,s) & ^FINDM(ignore,sad) then do
|
if FINDM(ignore,s) | FINDM(ignore,sad) then do
|
||||||
tu='-'s'-' g; lastsender=s
|
return ''; end
|
||||||
|
else do; b='-'s'-' g
|
||||||
|
lastsender=s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
otherwise if ^FINDM(omit,s) & ^FINDM(omit,sad) then tu='-'s':'e'-' g
|
otherwise b='-'s':'e'-' g; end
|
||||||
end
|
when m='PART' then b='***' s 'parts channel' e
|
||||||
when m='PART' then tu='***' s 'leaves channel' e
|
|
||||||
when m='PING' then call SEND("PONG :"ircnick)
|
when m='PING' then call SEND("PONG :"ircnick)
|
||||||
when m='PRIVMSG' then do
|
when m='PRIVMSG' then select
|
||||||
if translate(e)=capnick then do
|
when translate(e)=capnick then do
|
||||||
if FINDM(ignore,s) | FINDM(ignore,sad) then do
|
if FINDM(ignore,s) | FINDM(ignore,sad) then do
|
||||||
if ^quiet then call SEND('NOTICE' s ':'ignore_reply)
|
if ^quiet then call SEND('NOTICE' s ':'ignore_reply)
|
||||||
return ''; end
|
return ''; end
|
||||||
else do
|
else do
|
||||||
if CTCP(1 g) then tu='*'s'*' g
|
if CTCP(1 g) then b='*'s'*' g
|
||||||
lastsender=s
|
lastsender=s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else if ^FINDM(omit,s) & ^FINDM(omit,sad) then
|
when translate(e)=target then if CTCP(0 g) then b='<'s'>' g
|
||||||
if CTCP(0 g) then do
|
otherwise if CTCP(0 g) then b='<'s':'e'>' g; end
|
||||||
if translate(e)=target then tu='<'s'>' g
|
when m='QUIT' then b='Signoff by' s '('g')'
|
||||||
else tu='<'s':'e'>' g
|
when m='TOPIC' then b='***' s 'sets the topic to:' g
|
||||||
end
|
when m='WALLOPS' then b='Wallops from' s':' g
|
||||||
end
|
when m='WALL' then b='Broadcast from' s':' g
|
||||||
when m='QUIT' then tu='Signoff by' s '('g')'
|
when m='221' then b='Your mode is' g
|
||||||
when m='TOPIC' then tu='***' s 'sets the topic to:' g
|
when m='301' then b=f 'is away:' g
|
||||||
when m='WALLOPS' then tu='Wallops from' s':' g
|
|
||||||
when m='WALL' then tu='Broadcast from' s':' g
|
|
||||||
when m='221' then tu='Your mode is' g
|
|
||||||
when m='301' then tu=f 'is away:' g
|
|
||||||
when m='302' then do
|
|
||||||
parse var g ni'='uh
|
|
||||||
if left(uh,1)='+' then aw='here'
|
|
||||||
else aw='away'
|
|
||||||
tu=ni 'is' aw '('substr(uh,2)')'
|
|
||||||
end
|
|
||||||
when m='303' & nfcatch then call ISON g
|
|
||||||
when m='311' then do
|
when m='311' then do
|
||||||
parse var f ni ui no .
|
parse var f ni ui no .
|
||||||
tu=ni 'is' ui'@'no '('g')'
|
b=ni 'is' ui'@'no '('g')'
|
||||||
end
|
end
|
||||||
when m='314' then do; parse var f ni ui no .
|
when m='314' then do; parse var f ni ui no .
|
||||||
tu=ni 'was' ui'@'no '('g')'; end
|
b=ni 'was' ui'@'no '('g')'; end
|
||||||
when m='312' then tu='via' word(f,2) '('g')'
|
when m='312' then b='via' word(f,2) '('g')'
|
||||||
when m='315' then if who_empty then call S 'No matches for /who'
|
when m='315' then if who_empty then call S 'No matches for /who'
|
||||||
when m='319' then tu='on channels:' g
|
when m='319' then b='on channels:' g
|
||||||
when m='317' then tu='apparently idle' word(f,2)/60 'minutes'
|
when m='317' then b='and has been idle' word(f,2) 'seconds'
|
||||||
when m='322' then do
|
when m='322' then do
|
||||||
parse var f ch n .
|
parse var f ch n .
|
||||||
if ch/='*' & substr(ch,2,1)/='27'x then do
|
if ch/='*' & substr(ch,2,1)/='27'x then do
|
||||||
@ -354,10 +287,10 @@ PARSE:
|
|||||||
end; end
|
end; end
|
||||||
when m='323' then do
|
when m='323' then do
|
||||||
if catmode then do
|
if catmode then do
|
||||||
call OUT 'Channels:' catlist; catlist=; catmode=0; end; end
|
call OUT 'Channels:' catlist; catlist=; catmode=0; end; end
|
||||||
when m='324' then tu='The mode on channel' word(f,1) 'is' word(f,2)
|
when m='324' then b='The mode on channel' word(f,1) 'is' word(f,2)
|
||||||
when m='332' then tu='The topic is:' g
|
when m='332' then b='The topic is:' g
|
||||||
when m='341' then tu='Inviting' word(f,1) 'to channel' word(f,2)
|
when m='341' then b='Inviting' word(f,1) 'to channel' word(f,2)
|
||||||
when m='352' then do
|
when m='352' then do
|
||||||
parse var f ch us no . ni st .
|
parse var f ch us no . ni st .
|
||||||
if st="S" then return ''
|
if st="S" then return ''
|
||||||
@ -374,25 +307,23 @@ PARSE:
|
|||||||
when m='353' then do; ch=word(f,2); a=words(g)
|
when m='353' then do; ch=word(f,2); a=words(g)
|
||||||
if ch/='*' & (a>6 | translate(ch)=target) then call OUT hi||left(ch,15)yo||g
|
if ch/='*' & (a>6 | translate(ch)=target) then call OUT hi||left(ch,15)yo||g
|
||||||
end
|
end
|
||||||
when m='313'|m='364' then tu=f g
|
when m='313'|m='364' then b=f g
|
||||||
when m='004'|m='318'|m='321'|m='365'|m='366'|m='406' then nop
|
when m='004'|m='318'|m='321'|m='365'|m='366'|m='406' then nop
|
||||||
when m='001' then do; servername=s; tu=subword(g,1,words(g)-1); end
|
when m='001' then do; servername=s; b=subword(g,1,words(g)-1); end
|
||||||
when m='376' then call SOURCE "CONNECT", 1
|
when m='252'|m='254' then b=f g
|
||||||
when m='252'|m='254' then tu=f g
|
|
||||||
otherwise select
|
otherwise select
|
||||||
when g="" then tu=f
|
when g="" then b=f
|
||||||
when f=""|f=s then tu=g
|
when f=""|f=s then b=g
|
||||||
otherwise tu=f":" g
|
otherwise b=f":" g
|
||||||
end
|
end
|
||||||
if s/="" & s/=servername then tu='('s')' tu
|
if s/="" & s/=servername then b='('s')' b
|
||||||
if numb then tu='{'m'}' tu
|
if numb then b='{'m'}' b
|
||||||
end
|
end
|
||||||
return translate(tu,"@",msa)
|
return translate(b,"@",msa)
|
||||||
|
|
||||||
VAR:
|
VAR:
|
||||||
parse arg x
|
parse arg x
|
||||||
select
|
select
|
||||||
when datatype(x,'w') then return '$'||x
|
|
||||||
when x=',' then return lastsender
|
when x=',' then return lastsender
|
||||||
when x=':' then return lastjoin
|
when x=':' then return lastjoin
|
||||||
when x='A' then return away
|
when x='A' then return away
|
||||||
@ -407,7 +338,6 @@ VAR:
|
|||||||
if query='' then return target
|
if query='' then return target
|
||||||
else return query
|
else return query
|
||||||
end
|
end
|
||||||
when x='U' then return myurl
|
|
||||||
when x='V' then return vers
|
when x='V' then return vers
|
||||||
when x='Z' then return left(time(),5)
|
when x='Z' then return left(time(),5)
|
||||||
when x='$' then return '$'
|
when x='$' then return '$'
|
||||||
@ -416,12 +346,12 @@ VAR:
|
|||||||
return '<error>'
|
return '<error>'
|
||||||
|
|
||||||
SET:
|
SET:
|
||||||
parse arg z
|
parse arg r
|
||||||
if z='' then do i=1 to words(varnames)
|
if r='' then do i=1 to words(varnames)
|
||||||
z=word(varnames,i); call S '$('z') is "'v.z'"'
|
r=word(varnames,i); call S '$('r') is "'v.r'"'
|
||||||
end
|
end
|
||||||
else do
|
else do
|
||||||
parse var z a b
|
parse var r a b
|
||||||
if b='' then call S 'Variable' a 'has the value "'v.a'"'
|
if b='' then call S 'Variable' a 'has the value "'v.a'"'
|
||||||
else do; v.a=b; if find(varnames,a)=0 then varnames=a varnames; end
|
else do; v.a=b; if find(varnames,a)=0 then varnames=a varnames; end
|
||||||
end
|
end
|
||||||
@ -454,27 +384,27 @@ SHELL:
|
|||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
do while lin/=''
|
do while lin^=''
|
||||||
if left(lin,1)='*' then return
|
if left(lin,1)='*' then return
|
||||||
parse var lin one '15'x lin
|
parse var lin one '15'x lin
|
||||||
par=; lc=; com='$'; al.com = one
|
par=; lc=; com='$'; al.com = one
|
||||||
do while al.com/=''; sa=al.com
|
do while al.com^=''; a=al.com
|
||||||
do while left(sa,1)='%'
|
do while left(a,1)='%'
|
||||||
parse var sa '%'var sa
|
parse var a '%'var a
|
||||||
parse var par sb par
|
parse var par b par
|
||||||
v.var=sb
|
v.var=b
|
||||||
end
|
end
|
||||||
if par/='' then do; sa=sa par; par=''; end
|
if par^='' then do; a=a par; par=''; end
|
||||||
sb=; do while sa/=''
|
b=; do while a^=''
|
||||||
parse var sa k'$'y sa
|
parse var a k'$'y a
|
||||||
if y='' then do; sb=sb||k; leave; end
|
if y='' then do; b=b||k; leave; end
|
||||||
if left(y,1)='(' then do; parse var y 2 x')'y; sa=y sa; end
|
if left(y,1)='(' then do; parse var y 2 x')'y; a=y a; end
|
||||||
else do; x=left(y,1); sa=substr(y,2) sa; end
|
else do; x=left(y,1); a=substr(y,2) a; end
|
||||||
sb=sb||k||VAR(x)
|
b=b||k||VAR(x)
|
||||||
end
|
end
|
||||||
parse var sb com par '::' next
|
parse var b com par '::' next
|
||||||
upper com
|
upper com
|
||||||
if next/='' then lin=next||'15'x||lin
|
if next^='' then lin=next||'15'x||lin
|
||||||
if find(lc, com)=0 then lc=com lc
|
if find(lc, com)=0 then lc=com lc
|
||||||
else do; call S 'Alias loop of "'com'" encountered'; return; end
|
else do; call S 'Alias loop of "'com'" encountered'; return; end
|
||||||
end
|
end
|
||||||
@ -484,10 +414,9 @@ SHELL:
|
|||||||
|
|
||||||
COMMAND:
|
COMMAND:
|
||||||
parse arg q r; out=; upper q
|
parse arg q r; out=; upper q
|
||||||
if abbrev('LEAVE',q,2) then q='PART'
|
|
||||||
select
|
select
|
||||||
when abbrev('ABORT',q,2) then call BYE "your abort request"
|
when abbrev('ABORT',q,2) then call BYE "your abort request"
|
||||||
when abbrev('AWAY',q,2) then do; lastorigin=; away=r; out="AWAY :"r; end
|
when abbrev('AWAY',q,2) then do; away=r; out="AWAY" r; end
|
||||||
when abbrev('BYE',q,1)|abbrev('SIGNOFF',q,6)|abbrev('QUIT',q,3) then do
|
when abbrev('BYE',q,1)|abbrev('SIGNOFF',q,6)|abbrev('QUIT',q,3) then do
|
||||||
call SEND('QUIT' r); call BYE; end
|
call SEND('QUIT' r); call BYE; end
|
||||||
when abbrev('CATALOG',q,2) then do; catmode=1; out='LIST' r; end
|
when abbrev('CATALOG',q,2) then do; catmode=1; out='LIST' r; end
|
||||||
@ -500,14 +429,13 @@ COMMAND:
|
|||||||
when abbrev('CMDCHARACTER',q,2) then cmdchar=left(r,1)
|
when abbrev('CMDCHARACTER',q,2) then cmdchar=left(r,1)
|
||||||
when q='ECHO' then call OUT r
|
when q='ECHO' then call OUT r
|
||||||
when abbrev('EXECUTE',q,1) then call EXECUTE r
|
when abbrev('EXECUTE',q,1) then call EXECUTE r
|
||||||
when abbrev('EXPORT',q,4) then call EXPORT r
|
|
||||||
when abbrev('EXPRESSION',q,4) then call SET word(r,1) EXPR(subword(r,2))
|
when abbrev('EXPRESSION',q,4) then call SET word(r,1) EXPR(subword(r,2))
|
||||||
when abbrev('FOLLOW',q,1) then out='JOIN' invitation
|
when abbrev('FOLLOW',q,1) then out='JOIN' invitation
|
||||||
when abbrev('HELP',q,1) then do
|
when abbrev('HELP',q,1) then do
|
||||||
address 'CMS' "HELP RXIRC"; say; end
|
address 'CMS' "HELP RXIRC"; say; end
|
||||||
when q='IF' then do
|
when q='IF' then do
|
||||||
parse var r cond a r
|
parse var r cond a r
|
||||||
if translate(a)/='THEN' then call S "IF" cond": THEN is missing"
|
if translate(a)^='THEN' then call S "IF" cond": THEN is missing"
|
||||||
else do
|
else do
|
||||||
rc = INTERP("if ("cond") then rc=0; else rc=1")
|
rc = INTERP("if ("cond") then rc=0; else rc=1")
|
||||||
if rc=0 then call COMMAND r
|
if rc=0 then call COMMAND r
|
||||||
@ -522,7 +450,6 @@ COMMAND:
|
|||||||
when abbrev('LOGGING',q,2) then call LOGGING r
|
when abbrev('LOGGING',q,2) then call LOGGING r
|
||||||
when abbrev('NICKNAME',q,1) then if r='' then out='WHOIS' ircnick
|
when abbrev('NICKNAME',q,1) then if r='' then out='WHOIS' ircnick
|
||||||
else do; out='NICK' r; ircnick=r; capnick=translate(r); end
|
else do; out='NICK' r; ircnick=r; capnick=translate(r); end
|
||||||
when q='NF'|abbrev('NOTIFY',q,4) then call NOTIFY r
|
|
||||||
when left(q,2)='PF' then 'CP SET' q r
|
when left(q,2)='PF' then 'CP SET' q r
|
||||||
when abbrev('REPLY',q,1) then call QUERY lastsender
|
when abbrev('REPLY',q,1) then call QUERY lastsender
|
||||||
when abbrev('SERVER',q,1) then call CONNECT r
|
when abbrev('SERVER',q,1) then call CONNECT r
|
||||||
@ -540,7 +467,7 @@ COMMAND:
|
|||||||
when abbrev('TELL',q,2) then call TELL r
|
when abbrev('TELL',q,2) then call TELL r
|
||||||
when abbrev('TOGGLE',q,3) then call TOGGLE r
|
when abbrev('TOGGLE',q,3) then call TOGGLE r
|
||||||
when abbrev('VERSION',q,3) then do; out='VERSION' r
|
when abbrev('VERSION',q,3) then do; out='VERSION' r
|
||||||
if r='' then call S progname vers
|
if r='' then call S 'rxIRC' vers
|
||||||
end
|
end
|
||||||
when abbrev('VIEWLOG',q,2) & viewcmd/='' then do
|
when abbrev('VIEWLOG',q,2) & viewcmd/='' then do
|
||||||
address 'CMS' viewcmd logfile; say; end
|
address 'CMS' viewcmd logfile; say; end
|
||||||
@ -556,7 +483,6 @@ COMMAND:
|
|||||||
who_empty=1; out="WHO *"right(domain,trunc(length(domain)/2)); end
|
who_empty=1; out="WHO *"right(domain,trunc(length(domain)/2)); end
|
||||||
when q='M'|q='MSG'|abbrev('MESSAGE',q,3) then do
|
when q='M'|q='MSG'|abbrev('MESSAGE',q,3) then do
|
||||||
parse var r ni r; out='PRIVMSG' ni ':'r; end
|
parse var r ni r; out='PRIVMSG' ni ':'r; end
|
||||||
when abbrev('OMIT',q,2) then call OMIT r
|
|
||||||
when abbrev('QUERY',q,1) then call QUERY r
|
when abbrev('QUERY',q,1) then call QUERY r
|
||||||
when abbrev('REQUEST',q,3)|q='CTCP' then do
|
when abbrev('REQUEST',q,3)|q='CTCP' then do
|
||||||
parse var r ni rq .; upper rq
|
parse var r ni rq .; upper rq
|
||||||
@ -567,7 +493,6 @@ COMMAND:
|
|||||||
when q='SAY' then out='PRIVMSG' target ':'r
|
when q='SAY' then out='PRIVMSG' target ':'r
|
||||||
when q='SWHO' then out='NAMES'
|
when q='SWHO' then out='NAMES'
|
||||||
when q='T' then out='TOPIC' target ':'r
|
when q='T' then out='TOPIC' target ':'r
|
||||||
when abbrev('TOPIC',q,2) then out='TOPIC' word(r,1) ':'subword(r,2)
|
|
||||||
when q='WHO' then do
|
when q='WHO' then do
|
||||||
who_empty=1
|
who_empty=1
|
||||||
if r="" then out='WHO' target
|
if r="" then out='WHO' target
|
||||||
@ -597,37 +522,15 @@ COMMAND:
|
|||||||
IGNORE:
|
IGNORE:
|
||||||
arg a
|
arg a
|
||||||
do words(a)
|
do words(a)
|
||||||
parse var a x a
|
parse var a ig a
|
||||||
z=find(ignore,x); if z/=0 then
|
z=find(ignore,ig); if z/=0 then
|
||||||
ignore=strip(delword(ignore,z,1))
|
ignore=strip(delword(ignore,z,1))
|
||||||
else ignore=x ignore
|
else ignore=ig ignore
|
||||||
end
|
end
|
||||||
call OUT 'You are ignoring:' ignore
|
call OUT 'You are ignoring:' ignore
|
||||||
if quiet then call S "And you don't send notices about it (quiet ignore)."
|
if quiet then call S "And you don't send notices about it (quiet ignore)."
|
||||||
return
|
return
|
||||||
|
|
||||||
EXPORT:
|
|
||||||
arg a
|
|
||||||
do words(a)
|
|
||||||
parse var a x a
|
|
||||||
z=find(export,x); if z/=0 then
|
|
||||||
export=strip(delword(export,z,1))
|
|
||||||
else export=x export
|
|
||||||
end
|
|
||||||
call OUT 'You are exporting:' export
|
|
||||||
return
|
|
||||||
|
|
||||||
OMIT:
|
|
||||||
arg a
|
|
||||||
do words(a)
|
|
||||||
parse var a x a
|
|
||||||
z=find(omit,x); if z/=0 then
|
|
||||||
omit=strip(delword(omit,z,1))
|
|
||||||
else omit=x omit
|
|
||||||
end
|
|
||||||
call OUT 'You are omitting:' omit
|
|
||||||
return
|
|
||||||
|
|
||||||
QUERY:
|
QUERY:
|
||||||
parse arg qq
|
parse arg qq
|
||||||
if query/='' then call S 'Terminating query with' query
|
if query/='' then call S 'Terminating query with' query
|
||||||
@ -656,25 +559,28 @@ LOGGING:
|
|||||||
return
|
return
|
||||||
|
|
||||||
S:
|
S:
|
||||||
parse arg k; say k; if log then writelog k
|
parse arg k
|
||||||
|
say k
|
||||||
if logevent/=0 then do
|
if logevent/=0 then do
|
||||||
curll=curll+1; ll.curll=k; logevent=0; k=curll-50; ll.k=; end
|
curll=curll+1; ll.curll=x; logevent=0; k=curll-50; ll.k=; end
|
||||||
|
if log then writelog k
|
||||||
return
|
return
|
||||||
|
|
||||||
OUT:
|
OUT:
|
||||||
parse arg x; if x="" then return
|
parse arg x
|
||||||
if length(x) < 81 then y=0
|
if x="" then return
|
||||||
|
if length(x) < 81 then q=0
|
||||||
else do 1
|
else do 1
|
||||||
y=pos(word(x,2),x)-1; if y>30 | y<0 then y=3
|
q=pos(word(x,2),x)-1; if q>30 | q<0 then q=3
|
||||||
z=lastpos(" ",x,80)
|
p=lastpos(" ",x,80)
|
||||||
if z<30 then do; y=3; z=77; end
|
if p<30 then do; q=3; p=77; end
|
||||||
call S left(x,z); x=substr(x,z+1)
|
call S left(x,p); x=substr(x,p+1)
|
||||||
do while length(x)+y > 80
|
do while length(x)+q > 80
|
||||||
z=lastpos(" ",x,80-y); if z<30 then do; y=3; z=77; end
|
p=lastpos(" ",x,80-q); if p<30 then do; q=3; p=77; end
|
||||||
call S copies(" ",y)left(x,z); x=substr(x,z+1)
|
call S copies(" ",q)left(x,p); x=substr(x,p+1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
call S copies(" ",y)x
|
call S copies(" ",q)x
|
||||||
return
|
return
|
||||||
|
|
||||||
CONNECT:
|
CONNECT:
|
||||||
@ -688,16 +594,16 @@ CONNECT:
|
|||||||
in.2=me x2c('4b404b') ':'ircname
|
in.2=me x2c('4b404b') ':'ircname
|
||||||
parse value SOCKET('SOCKET', 'AF_INET', 'SOCK_STREAM') with rc sock etc
|
parse value SOCKET('SOCKET', 'AF_INET', 'SOCK_STREAM') with rc sock etc
|
||||||
if rc/=0 then do; sock=; call BYE "socket error:" etc; end
|
if rc/=0 then do; sock=; call BYE "socket error:" etc; end
|
||||||
parse value SOCKET('SETSOCKOPT',sock,'SOL_SOCKET','SO_ASCII','ON') with rc . etc
|
parse value SOCKET('SETSOCKOPT', sock,'SOL_SOCKET','SO_ASCII','ON') with rc . etc
|
||||||
if rc/=0 then call BYE "setsockopt:" etc
|
if rc/=0 then call BYE "SetSockOpt error:" etc
|
||||||
call S "Connecting to" ircserver "on port" ircport"." etc
|
call S "Connecting to" ircserver "on port" ircport"." etc
|
||||||
parse value SOCKET('CONNECT', sock, 'AF_INET' ircport ircserver) with rc . etc
|
parse value SOCKET('CONNECT', sock, 'AF_INET' ircport ircserver) with rc . etc
|
||||||
if rc/=0 then call BYE "connect:" etc
|
if rc/=0 then call BYE "connect error:" etc
|
||||||
parse value SOCKET('IOCTL', sock, 'FIONBIO', 1) with rc . etc
|
parse value SOCKET('IOCTL', sock, 'FIONBIO', 1) with rc . etc
|
||||||
if rc/=0 then call BYE "nonblocking i/o:" etc
|
if rc/=0 then call BYE "nonblocking I/O:" etc
|
||||||
if server_pass/='' then do; call SEND("PASS" server_pass); server_pass=; end
|
|
||||||
call SEND(x2c('D5C9C3D2') ircnick)
|
call SEND(x2c('D5C9C3D2') ircnick)
|
||||||
call SEND(x2c('E4E2C5D9') in.2)
|
call SEND(x2c('E4E2C5D9') in.2)
|
||||||
|
call SOURCE "PROFILE", 1
|
||||||
return
|
return
|
||||||
|
|
||||||
CTCP:
|
CTCP:
|
||||||
@ -707,18 +613,14 @@ CTCP:
|
|||||||
select
|
select
|
||||||
when ctcp="ACTION" then call OUT '*' s bla
|
when ctcp="ACTION" then call OUT '*' s bla
|
||||||
when ctcp="CLIENTINFO" then
|
when ctcp="CLIENTINFO" then
|
||||||
call MSAREPLY "CLIENTINFO ACTION CLIENTINFO FINGER TIME URL USERINFO VERSION"
|
call MSAREPLY "CLIENTINFO ACTION CLIENTINFO FINGER TIME USERINFO VERSION"
|
||||||
when ctcp="FINGER" then
|
when ctcp="FINGER" then
|
||||||
call MSAREPLY "FINGER" realname '('me'@'hostname'.'domain',',
|
call MSAREPLY "FINGER" realname '('me'@'hostname'.'domain',',
|
||||||
me'@'mynode') - Idle' trunc(time('E'),2) 'seconds'
|
me'@'mynode') - Idle' trunc(time('E'),2) 'seconds'
|
||||||
when ctcp="TIME" then call MSAREPLY "TIME" left(time(),5)
|
when ctcp="TIME" then call MSAREPLY "TIME" left(time(),5)
|
||||||
when ctcp="URL" then do
|
|
||||||
if wwwport='' then call MSAREPLY "ERRMSG No http port set up by user"
|
|
||||||
else call MSAREPLY "URL" myurl
|
|
||||||
end
|
|
||||||
when ctcp="USERINFO" then call MSAREPLY "USERINFO" userinfo
|
when ctcp="USERINFO" then call MSAREPLY "USERINFO" userinfo
|
||||||
when ctcp="VERSION" then
|
when ctcp="VERSION" then
|
||||||
call MSAREPLY "VERSION" progname vers "VM/CMS",
|
call MSAREPLY "VERSION rxIRC" vers "VM/CMS",
|
||||||
":Survival package for VM-struck humans"
|
":Survival package for VM-struck humans"
|
||||||
otherwise if fla=1 then call MSAREPLY "ERRMSG Huh? Can't do" ctcp
|
otherwise if fla=1 then call MSAREPLY "ERRMSG Huh? Can't do" ctcp
|
||||||
end
|
end
|
||||||
@ -731,7 +633,7 @@ MSAREPLY:
|
|||||||
|
|
||||||
SYNTAX:
|
SYNTAX:
|
||||||
say errortext(rc)
|
say errortext(rc)
|
||||||
return 0
|
return
|
||||||
|
|
||||||
HALT:
|
HALT:
|
||||||
call BYE "halt request"
|
call BYE "halt request"
|
||||||
@ -753,8 +655,6 @@ BYE:
|
|||||||
'CP TERM LINEND' a 'CHARDEL' k
|
'CP TERM LINEND' a 'CHARDEL' k
|
||||||
i=2; parse var qt.i 'LINESIZE' a',' .
|
i=2; parse var qt.i 'LINESIZE' a',' .
|
||||||
'CP TERM LINESIZE' a
|
'CP TERM LINESIZE' a
|
||||||
if www/='' then do
|
|
||||||
SOCKET('SHUTDOWN',www); SOCKET('CLOSE',www); www=; end
|
|
||||||
if sock/='' then do
|
if sock/='' then do
|
||||||
call SHUT
|
call SHUT
|
||||||
parse value SOCKET('TERMINATE') with .
|
parse value SOCKET('TERMINATE') with .
|
||||||
@ -881,42 +781,38 @@ SHUT:
|
|||||||
return
|
return
|
||||||
|
|
||||||
NICE:
|
NICE:
|
||||||
arg u'@'v;if v='' then v=mynode
|
parse arg a'@'b;if b="" then b=mynode
|
||||||
if nice.u.v/='' then return nice.u.v
|
if nice.a.b^='*' then do
|
||||||
'NAMEF :userid' u ':node' v ':nick (LIFO'
|
if nice.a.b^='' then return nice.a.b
|
||||||
if rc=0 then parse pull nice.u.v .
|
'NAMEF :userid' a ':node' b ':nick (LIFO'
|
||||||
else if v=mynode then do
|
if rc=0 then do;parse pull nice.a.b .
|
||||||
'NAMEF :userid' u ':node :nick (LIFO'
|
return nice.a.b;end
|
||||||
if rc=0 then do
|
if b=mynode then do; 'NAMEF :userid' a ':node :nick (LIFO'
|
||||||
parse pull nice.u.v .
|
if rc=0 then do;parse pull nice.a.b .
|
||||||
pull ln .
|
pull ln .;if ln='' then return nice.a.b;end
|
||||||
if ln='' then return nice.u.v
|
|
||||||
end
|
end
|
||||||
nice.u.v=u
|
nice.a.b='*';end
|
||||||
end
|
if a='RSCS' then return b
|
||||||
else if u='RSCS' then nice.u.v=v
|
return a
|
||||||
else nice.u.v=u'@'v
|
|
||||||
return nice.u.v
|
|
||||||
|
|
||||||
U@N:
|
U@N:
|
||||||
parse arg x z; if q='' then return 0 'missing args'
|
parse arg q p; if q='' then return 0 'missing args'
|
||||||
upper x; parse var x x'@'y
|
upper q; parse var q q'@'r
|
||||||
if y/='' then return x y z
|
if r^='' then return q r p
|
||||||
if word(z,1)='AT' then do
|
if word(p,1)='AT' then do
|
||||||
parse var z . y z; upper y
|
parse var p . r p; upper r
|
||||||
if y='' then return 0 'missing node'
|
if r='' then return 0 'missing node'
|
||||||
return x y z;end
|
return q r p;end
|
||||||
if u@n.x/='' then return u@n.x z
|
if u@n.q^='' then return u@n.q p
|
||||||
'NAMEF :nick' x ':userid :node :via (LIFO'
|
'NAMEF :nick' q ':userid :node :via (LIFO'
|
||||||
if rc=0 then do 1
|
if rc=0 then do 1
|
||||||
pull k; pull y; pull a
|
pull la; pull ln; pull li
|
||||||
if a='' then leave
|
if li='' then leave
|
||||||
if y='' then y=mynode
|
parse value li ln mynode with a r .
|
||||||
u@n.q=a y; if via.a.y='' then via.a.y=k
|
u@n.q=a r; if via.a.r='' then via.a.r=la
|
||||||
return a y z
|
return a r p
|
||||||
end
|
end
|
||||||
u@n.x = x mynode
|
u@n.q = q mynode;return q mynode p
|
||||||
return x mynode z
|
|
||||||
|
|
||||||
TELL:
|
TELL:
|
||||||
parse arg tea
|
parse arg tea
|
||||||
@ -934,7 +830,7 @@ TELL:
|
|||||||
else via=via.xid.xnod
|
else via=via.xid.xnod
|
||||||
select
|
select
|
||||||
when via='SMSG'|via='SEND' then do
|
when via='SMSG'|via='SEND' then do
|
||||||
if xnod/=mynode then err='SEND & SMSG only local'
|
if xnod^=mynode then err='SEND & SMSG only local'
|
||||||
else do
|
else do
|
||||||
if via='SMSG' then parse value diagrc(8,'SMSG' xid tea) with rc . err
|
if via='SMSG' then parse value diagrc(8,'SMSG' xid tea) with rc . err
|
||||||
else do
|
else do
|
||||||
@ -943,9 +839,9 @@ TELL:
|
|||||||
parse value diagrc(8,'SEND CP' xid translate(tea?)) with rc . err
|
parse value diagrc(8,'SEND CP' xid translate(tea?)) with rc . err
|
||||||
else parse value diagrc(8,'SEND' xid tea) with rc . err
|
else parse value diagrc(8,'SEND' xid tea) with rc . err
|
||||||
end; end; end
|
end; end; end
|
||||||
when via=''|left(via,1)/="'" then do
|
when via=''|left(via,1)^="'" then do
|
||||||
if via='RSCS' then do;viar=1;via='';end;else viar=0
|
if via='RSCS' then do;viar=1;via='';end;else viar=0
|
||||||
if via/='' then via='CMD' via
|
if via^='' then via='CMD' via
|
||||||
if xid='RSCS'|(xid=rscs&xnod=mynode) then do
|
if xid='RSCS'|(xid=rscs&xnod=mynode) then do
|
||||||
if xnod=mynode&^viar then parse value diagrc(8,'SM' rscs tea) with rc . err
|
if xnod=mynode&^viar then parse value diagrc(8,'SM' rscs tea) with rc . err
|
||||||
else parse value diagrc(8,'SM' rscs via 'CMD' xnod tea) with rc . err
|
else parse value diagrc(8,'SM' rscs via 'CMD' xnod tea) with rc . err
|
||||||
@ -971,18 +867,18 @@ TELL:
|
|||||||
return
|
return
|
||||||
|
|
||||||
SOURCE:
|
SOURCE:
|
||||||
arg sfn, sfl
|
arg a, b
|
||||||
if sfn='' then do
|
if a='' then do
|
||||||
call S "You must specify a file to /source"
|
call S "You must specify a file to /source"
|
||||||
return -1
|
return -1
|
||||||
end
|
end
|
||||||
sfn = sfn 'RXIRC *'
|
a=a 'RXIRC *'
|
||||||
"STATE" sfn
|
"STATE" a
|
||||||
if rc/=0 then do
|
if rc/=0 then do
|
||||||
if sfl/=1 then call S 'Could not access' sfn
|
if b/=1 then call S 'Could not access' a
|
||||||
end
|
end
|
||||||
else do
|
else do
|
||||||
'MAKEBUF'; 'EXECIO * DISKR' sfn '(FIFO FINIS'; skiplines=0;
|
'MAKEBUF'; 'EXECIO * DISKR' a '(FIFO FINIS'; skiplines=0;
|
||||||
do queued(); sourcing=1
|
do queued(); sourcing=1
|
||||||
parse pull l; if abortsource then iterate
|
parse pull l; if abortsource then iterate
|
||||||
if skiplines=0 then call SHELL strip(l)
|
if skiplines=0 then call SHELL strip(l)
|
||||||
@ -1017,70 +913,13 @@ INTERP:
|
|||||||
signal on SYNTAX; INTERPRET(statement); signal off SYNTAX
|
signal on SYNTAX; INTERPRET(statement); signal off SYNTAX
|
||||||
return rc
|
return rc
|
||||||
|
|
||||||
NOTIFY:
|
|
||||||
arg a
|
|
||||||
do i=1 to words(a)
|
|
||||||
x=word(a,i); y=find(nflist,x); z=find(translate(nfhere),a)
|
|
||||||
if z/=0 then nfhere=strip(delword(nfhere,z,1))
|
|
||||||
if y/=0 then nflist=strip(delword(nflist,y,1))
|
|
||||||
else nflist=nflist x
|
|
||||||
end
|
|
||||||
call OUT 'Observing:' nflist
|
|
||||||
if a='' then call OUT 'Present:' nfhere
|
|
||||||
return
|
|
||||||
|
|
||||||
ISON:
|
|
||||||
parse arg g
|
|
||||||
i=1; do words(nfhere)
|
|
||||||
a=word(nfhere,i)
|
|
||||||
if find(g,a)=0 then do
|
|
||||||
nfhere = strip(delword(nfhere,i,1))
|
|
||||||
call OUT a "has gone"
|
|
||||||
end
|
|
||||||
else i=i+1
|
|
||||||
end
|
|
||||||
do i=1 to words(g)
|
|
||||||
a=word(g,i)
|
|
||||||
if find(nfhere,a)=0 then do
|
|
||||||
nfhere = a nfhere
|
|
||||||
call SEND "USERHOST" a
|
|
||||||
end
|
|
||||||
end
|
|
||||||
nfcatch=0
|
|
||||||
return
|
|
||||||
|
|
||||||
EXECUTE:
|
EXECUTE:
|
||||||
parse arg a
|
parse arg r
|
||||||
if a='' then do
|
if r='' then do
|
||||||
say 'Suspending rxIRC; Enter "return" to return'
|
say 'Suspending rxIRC; Enter "return" to return'
|
||||||
a='SUBSET'
|
r='SUBSET'
|
||||||
end
|
end
|
||||||
address 'CMS' a
|
address 'CMS' r
|
||||||
if rc=0 then say "rxIRC ready"
|
if rc=0 then say "rxIRC ready"
|
||||||
else say "rxIRC ready("rc")"
|
else say "rxIRC ready("rc")"
|
||||||
return
|
return
|
||||||
|
|
||||||
WRITE:
|
|
||||||
parse arg qp tx
|
|
||||||
parse value SOCKET('WRITE', qp, tx||cr||lf) with rc . etc
|
|
||||||
if rc/=0 then call S "Socket write error:" etc
|
|
||||||
return
|
|
||||||
|
|
||||||
WRITEFILE:
|
|
||||||
parse arg qp fn ft .
|
|
||||||
'MAKEBUF'
|
|
||||||
'EXECIO * DISKR' fn ft '(FINIS FIFO'
|
|
||||||
if rc=0 then do
|
|
||||||
do queued()
|
|
||||||
parse pull l
|
|
||||||
call WRITE qp l
|
|
||||||
if rc/=0 then do
|
|
||||||
call S 'httpd: File transmission interrupted (by caller probably)'
|
|
||||||
signal DROPIT
|
|
||||||
end
|
|
||||||
end
|
|
||||||
call S 'httpd: Sent' fn ft
|
|
||||||
end
|
|
||||||
DROPIT:
|
|
||||||
'DROPBUF'
|
|
||||||
return
|
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
|
.cm last change by lynx.
|
||||||
.mt IRC
|
.mt IRC
|
||||||
|
|
||||||
rxIRC
|
rxIRC
|
||||||
^^^
|
^^^
|
||||||
Internet Relay Chat client program for VM/CMS systems
|
Internet Relay Chat client program for VM/CMS systems
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
by Carl v. Loesch
|
written by Carl 'LynX' v. Loesch
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Move the cursor onto a topic and press ENTER
|
Move the cursor onto a topic and press ENTER
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,45 +1,38 @@
|
|||||||
rxIRC Installation Guide
|
rxIRC Installation Guide
|
||||||
========================
|
========================
|
||||||
|
|
||||||
To run rxIRC you need RXSOCKET 2 and REXXWAIT.
|
| To run rxIRC you need RXSOCKET 2 and REXXWAIT.
|
||||||
You don't need REXTCPIP anymore (Sorry Ken).
|
| You don't need REXTCPIP anymore (Sorry Ken).
|
||||||
|
|
||||||
Before you start rxIRC you should edit the RXIRC NAMES file which
|
Before you start rxIRC you should edit the RXIRC NAMES file which
|
||||||
contains all the default values for rxIRC. Most important: the address
|
contains all the default values for rxIRC. Most important: the address
|
||||||
of your default IRC server host!
|
of your default IRC server host!
|
||||||
|
|
||||||
On VM/ESA systems you can try to obtain the ESA-Version of RXSOCKET,
|
| On VM/ESA systems you might have to enter the 'NXA' command before
|
||||||
or switch into the 370 mode (with SET MACHINE 370 and IPL CMS).
|
| starting up rxIRC. I'm not familiar with those systems so I don't know
|
||||||
If you're lucky it will work from scratch even on those systems,
|
| what needs to be changed to make that work right, same goes for other
|
||||||
it's a question of how your mainframe is being configured.
|
| exotic VM derivates on which rxIRC makes problems. If you manage to
|
||||||
|
| fix rxIRC up on such systems please send me your changes!
|
||||||
|
|
||||||
When it tells you the TCPIP DATA file is missing, you probably
|
| The VM Gopher client is written to work with the old RXSOCKET version
|
||||||
need to ACCESS (or even CP LINK) the appropriate system disk,
|
| so you get the problem that either you have Gopher or you have rxIRC
|
||||||
which is tipically labeled ('TCPIP'). Try 'QUERY DASD'.
|
| working by default. Sorry but I guess Gopher needs an update!
|
||||||
|
|
||||||
When you see the whole internet address in people's messages
|
| If you have any problems/improvements/suggestions/etc. contact the rxIRC
|
||||||
instead of just the nickname, or other similar weird things
|
| mailing list rxIRC-l@vmtecqro.qro.itesm.mx.
|
||||||
you might have some improper ASCII/EBCDIC translation set up!
|
|
||||||
In that case check that STANDARD TCPXLATE and STANDARD TCPXLBIN
|
|
||||||
from your TCPIP system disk come before other * TCPXLATE files.
|
|
||||||
|
|
||||||
If you have any problems/improvements/suggestions/etc. contact the rxIRC
|
| You can subscribe to the mailing list with 'SUB RXIRC-L <fullname>'
|
||||||
mailing list rxIRC-l@vmtecqro.qro.itesm.mx.
|
| sent to listserv@vmtecqro.qro.itesm.mx or LISTSERV AT VMTECQRO.
|
||||||
|
|
||||||
You can subscribe to the mailing list with 'SUB RXIRC-L <fullname>'
|
| With the AFD and FUI commands you can get automatic information
|
||||||
sent to listserv@vmtecqro.qro.itesm.mx or LISTSERV AT VMTECQRO.
|
| about new releases of rxIRC from the LISTSERV. You can also decide
|
||||||
|
| to look out for announcements of mine in the VMUTIL-L, alt.irc
|
||||||
|
| or de.comm.internet newsgroups.
|
||||||
|
|
||||||
With the AFD and FUI commands you can get automatic information
|
| However don't expect frequent announcements. Changes to rxIRC
|
||||||
about new releases of rxIRC from the LISTSERV. You can also decide
|
| happen seldomly. I usually don't have the time for it. :(
|
||||||
to look out for announcements of mine in the VMUTIL-L, alt.irc
|
|
||||||
or de.comm.internet newsgroups.
|
|
||||||
|
|
||||||
However don't expect frequent announcements. Changes to rxIRC
|
Ciao -lynx
|
||||||
happen seldomly. I usually don't have the time for it. :(
|
o-------------------------------------------------------------------o
|
||||||
|
| Carl "LynX" v. Loesch is loesch@informatik.uni-oldenburg.de |
|
||||||
--
|
| ---------------------- or 244661 at DOLUNI1.bitnet / .earn |
|
||||||
____ http://www.noris.de/~lynx/
|
|
||||||
LynX Carl von Loesch lynx@imp.de
|
|
||||||
|
|
||||||
~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~
|
|
||||||
LynX@You.might.aswell.use.This.as.my.Email.Address.Biol.Chemie.TU-Muenchen.DE
|
|
||||||
|
|||||||
10
rxirc.names
10
rxirc.names
@ -1,26 +1,18 @@
|
|||||||
* RXIRC NAMES
|
* RXIRC NAMES
|
||||||
* contains installationwide defaults for rxIRC
|
* contains installationwide defaults for rxIRC
|
||||||
* do NOT change the next line
|
|
||||||
:nick.rxIRC
|
:nick.rxIRC
|
||||||
*
|
*
|
||||||
* Insert the network address of an IRC server near to you into here..
|
* Insert the network address of an IRC server near to you into here..
|
||||||
* Or activate a temporary choice to be able to contact an IRC
|
* Or activate a temporary choice to be able to contact an IRC
|
||||||
* operator for help on proper choice of IRC server
|
* operator for help on proper choice of IRC server
|
||||||
* (join #Twilight_Zone to meet irc operators)
|
* (join #Twilight_Zone to meet irc operators)
|
||||||
* A list of servers exists in ftp://cs-ftp.bu.edu/irc/support/
|
|
||||||
*
|
*
|
||||||
:server.irc.informatik.uni-oldenburg.de
|
:server.irc.uni-erlangen.de
|
||||||
* :server.irc.fu-berlin.de
|
|
||||||
* :server.irc.mit.edu
|
* :server.irc.mit.edu
|
||||||
* :server.irc.eunet.fi
|
* :server.irc.eunet.fi
|
||||||
* :server.irc.technion.ac.il
|
* :server.irc.technion.ac.il
|
||||||
* :server.irc.virginia.edu
|
* :server.irc.virginia.edu
|
||||||
|
|
||||||
* In case your default server requires a client password, you can enter it
|
|
||||||
* here. However this is a pretty unusual case.
|
|
||||||
*
|
|
||||||
* :pass.PassWord
|
|
||||||
|
|
||||||
* Some preferences.. You can look into this later on.
|
* Some preferences.. You can look into this later on.
|
||||||
* See also the helpfile about customization.
|
* See also the helpfile about customization.
|
||||||
*
|
*
|
||||||
|
|||||||
50
rxirc.readme
50
rxirc.readme
@ -1,18 +1,18 @@
|
|||||||
Subject: rxIRC 4.1 - IRC client for VM/CMS 370 systems
|
Subject: rxIRC 2.0 for VM/CMS available
|
||||||
Newsgroups: bit.listserv.vm-util,alt.irc.announce,de.comm.internet,de.talk.chat
|
Newsgroups: bit.listserv.vm-util,alt.irc,de.comm.internet,de.talk.chat
|
||||||
Keywords: IRC rxIRC rexx vm cms internet bitnet rexx/socket
|
Keywords: IRC rxIRC rexx vm cms internet bitnet rexx/socket lynx
|
||||||
|
|
||||||
Introducing rxIRC:
|
Introducing rxIRC:
|
||||||
|
|
||||||
rxIRC is a client software for VM to connect to the IRC network, the
|
rxIRC is a client software for VM to connect to the IRC network, the
|
||||||
Internet Relay Chat, which nowadays counts an average of 3000 users online
|
Internet Relay Chat, which nowadays counts an average of 1200 users online
|
||||||
day and night, from all over the world, therefore being the biggest
|
day and night, from all over the world, therefore being the biggest
|
||||||
international interactive conferencing system on the planet.
|
international interactive conferencing system on the planet.
|
||||||
|
|
||||||
You can make use of this program only if you have access to a machine
|
You can make use of this program only if you have access to a machine
|
||||||
with VM/CMS-type operating system with TCPIP extension installed. To find
|
with VM/CMS-type operating system with TCPIP extension installed. To find
|
||||||
out you logon and type 'CP QUERY TCPIP', if it replies 'TCPIP - DSC' then
|
out you logon and type 'CP QUERY TCPIP', if it replies 'TCPIP - DSC' then
|
||||||
chances are good, otherwise check up with your administration.
|
you can make use of this program, otherwise check with your administration.
|
||||||
|
|
||||||
rxIRC is a program written in interpreted RexX, a rather easy to learn
|
rxIRC is a program written in interpreted RexX, a rather easy to learn
|
||||||
language that gives you a chance to add own features if you miss something
|
language that gives you a chance to add own features if you miss something
|
||||||
@ -20,15 +20,22 @@ or modify things you dislike. rxIRC supports the complete set of standard
|
|||||||
IRC client commands plus a bunch of extras and is more or less up to date
|
IRC client commands plus a bunch of extras and is more or less up to date
|
||||||
with the current state of development of the IRC protocol.
|
with the current state of development of the IRC protocol.
|
||||||
|
|
||||||
New features in rxIRC 2.1:
|
New features in rxIRC 2.0:
|
||||||
|
|
||||||
* /notify - Finally it's in, thanks to Michael Letourneau
|
- now uses RXSOCKET and REXXWAIT
|
||||||
* builtin WWW server, secure and stable!
|
- has extensive BITNet messaging support
|
||||||
* /export to specify what files are available for WWW, typically /export *.html
|
(for instance /query +nick queries a bitnet user)
|
||||||
* /omit - Filter channel talk that you don't want to listen to
|
- /alias with parameter handling
|
||||||
* Support for server passwords
|
- variables: /set, /expr (rexx expressions), /echo
|
||||||
* The CONNECT RXIRC script is sourced right after you connect to a server
|
- /if <condition> then <command>
|
||||||
* Small fixes and protocol parsing updates
|
- /source <scripts>, skip <lines>, stop (sourcing)
|
||||||
|
- /pf<n>, /toggle (setup a pf key with alternating commands)
|
||||||
|
- /localwho, /catalog
|
||||||
|
- /chop, /unchop, /k(ick), /t(opic)
|
||||||
|
- /viewlog, /interpret, /applaud
|
||||||
|
- documentation has doubled its size.. ;)
|
||||||
|
- :show_time, display time every now and then
|
||||||
|
- ircII-bold-code displayed with hilighting, :bold_char
|
||||||
|
|
||||||
Requirements:
|
Requirements:
|
||||||
|
|
||||||
@ -52,22 +59,27 @@ modules:
|
|||||||
TELL LISTSERV AT CUNYVM GET REXXWAIT MODULE
|
TELL LISTSERV AT CUNYVM GET REXXWAIT MODULE
|
||||||
|
|
||||||
|
|
||||||
rxIRC itself can be obtained from:
|
rxIRC 2.0 itself can be obtained from:
|
||||||
|
|
||||||
<Internet>
|
<Internet>
|
||||||
Europe:
|
Europe: ftp nic.funet.fi
|
||||||
[Home Site] ftp ftp.m.biologie.tu-muenchen.de (129.187.220.2 or .9)
|
|
||||||
mget /pub/comp/rxirc/*.*
|
|
||||||
|
|
||||||
[Finland] ftp nic.funet.fi
|
|
||||||
mget /pub/unix/irc/rxirc/*.*
|
mget /pub/unix/irc/rxirc/*.*
|
||||||
|
|
||||||
|
[Home Site] ftp ftp.informatik.uni-oldenburg.de (134.106.1.9)
|
||||||
|
mget /pub/irc/rxirc/*.*
|
||||||
|
|
||||||
America: ftp ftp.iastate.edu
|
America: ftp ftp.iastate.edu
|
||||||
mget /pub/irc/clients/rxirc/2.0/*.*
|
mget /pub/irc/clients/rxirc/2.0/*.*
|
||||||
|
|
||||||
|
ftp slopoke.mlb.semi.harris.com
|
||||||
|
mget /pub/irc/clients/rxirc/*.*
|
||||||
|
|
||||||
Australia: ftp coombs.anu.edu.au
|
Australia: ftp coombs.anu.edu.au
|
||||||
mget /pub/irc/rxirc/*.*
|
mget /pub/irc/rxirc/*.*
|
||||||
|
|
||||||
|
<BITnet>
|
||||||
|
[Mexico] TELL LISTSERV AT VMTECQRO GET RXIRC PACKAGE
|
||||||
|
|
||||||
|
|
||||||
rxIRC installers are invited to join the rxIRC mailing list by sending a
|
rxIRC installers are invited to join the rxIRC mailing list by sending a
|
||||||
'SUB RXIRC-L <your-full-name>' command to LISTSERV AT VMTECQRO.
|
'SUB RXIRC-L <your-full-name>' command to LISTSERV AT VMTECQRO.
|
||||||
|
|||||||
13
setenv.exec
13
setenv.exec
@ -1,13 +0,0 @@
|
|||||||
/* SETENV EXEC
|
|
||||||
* Set an environment variable for C programs to access
|
|
||||||
* last change by Lynx_VM (244661 at DOLUNI1) on Sunday, 12 May 1991
|
|
||||||
*/
|
|
||||||
address 'COMMAND'
|
|
||||||
parse arg n c; upper n
|
|
||||||
if n="" then
|
|
||||||
'GLOBALV SELECT CENV LIST'
|
|
||||||
else if c="" then
|
|
||||||
'GLOBALV SELECT CENV LIST' n
|
|
||||||
else
|
|
||||||
'GLOBALV SELECT CENV SETL' n c
|
|
||||||
exit rc
|
|
||||||
492
special.helpirc
492
special.helpirc
@ -1,4 +1,4 @@
|
|||||||
.cm last change by lynx -- nov 94
|
.cm last change by lynx -- may 93
|
||||||
|
|
||||||
_______
|
_______
|
||||||
*|^^^^^^^|* The Internet Relay Chat client
|
*|^^^^^^^|* The Internet Relay Chat client
|
||||||
@ -9,87 +9,86 @@
|
|||||||
Special features of rxIRC:
|
Special features of rxIRC:
|
||||||
|
|
||||||
Variables:
|
Variables:
|
||||||
rxIRC has it's own particular implementation of variables. You can
|
| rxIRC has it's own particular implementation of variables. You can
|
||||||
set variables with /set or /expr, then use them anywhere within a
|
| set variables with /set or /expr, then use them anywhere within a
|
||||||
command line like this:
|
| command line like this:
|
||||||
|
|
|
||||||
set c #rxIRC
|
| set c #rxIRC
|
||||||
join $c
|
| join $c
|
||||||
expr date date()
|
| expr date date()
|
||||||
echo $(date)
|
| echo $(date)
|
||||||
set helpkey 1
|
| set helpkey 1
|
||||||
pf$(helpkey) immed /help
|
| pf$(helpkey) immed /help
|
||||||
|
|
|
||||||
Note how you can use variables even within command names. Variables
|
| Note how you can use variables even within command names. Variables
|
||||||
can be used with or without the braces. However, without braces only
|
| can be used with or without the braces. However, without braces only
|
||||||
the first character is considered part of the name. So 'echo $date'
|
| the first character is considered part of the name. So 'echo $date'
|
||||||
will probably only output 'ate' since '$d' is not defined yet.
|
| will probably only output 'ate' since '$d' is not defined yet.
|
||||||
This is compatible to the way the make program handles variables.
|
| This is compatible to the way the make program handles variables.
|
||||||
|
|
|
||||||
With rxIRC variable names are case sensitive!
|
| With rxIRC variable names are case sensitive!
|
||||||
|
|
|
||||||
rxIRC provides a set of predefined variables which is compatible
|
| rxIRC provides a set of predefined variables which is compatible
|
||||||
to ircII. Here goes a list:
|
| to ircII. Here goes a list:
|
||||||
$, the nickname that last sent you a message, notice or invitation
|
| $, the nickname that last sent you a message, notice or invitation
|
||||||
$: the nickname that last joined your channel
|
| $: the nickname that last joined your channel
|
||||||
$A your current away message
|
| $A your current away message
|
||||||
$C your current channel (or rather 'target' in rxIRC-speak)
|
| $C your current channel (or rather 'target' in rxIRC-speak)
|
||||||
$H last protocol command or numeric received
|
| $H last protocol command or numeric received
|
||||||
$I channel you were invited to last
|
| $I channel you were invited to last
|
||||||
$K the command character (usually '/')
|
| $K the command character (usually '/')
|
||||||
$N your IRC nickname
|
| $N your IRC nickname
|
||||||
$Q current query nickname
|
| $Q current query nickname
|
||||||
$S current IRC server's name
|
| $S current IRC server's name
|
||||||
$T your query partner, if you are in a query, or otherwise
|
| $T your query partner, if you are in a query, or otherwise
|
||||||
your target (channel usually)
|
| your target (channel usually)
|
||||||
| $U URL of your builtin httpd, if active
|
| $V rxIRC version
|
||||||
$V rxIRC version
|
| $Z current time
|
||||||
$Z current time
|
| $$ the $ symbol itself
|
||||||
$$ the $ symbol itself
|
|
||||||
|
|
||||||
Multiple commands:
|
Multiple commands:
|
||||||
You can execute multiple commands in a row by putting '::' between them.
|
| You can execute multiple commands in a row by putting '::' between them.
|
||||||
Like this:
|
| Like this:
|
||||||
/smile::grin::giggle
|
| /smile::grin::giggle
|
||||||
|
|
|
||||||
Notice how the slash is valid for all three of the commands!
|
| Notice how the slash is valid for all three of the commands!
|
||||||
You need not and may not call something like "/smile::/grin".
|
| You need not and may not call something like "/smile::/grin".
|
||||||
|
|
||||||
Bitnet support:
|
Bitnet support:
|
||||||
rxIRC now fully supports BITNET messaging, first you have the /tell
|
| rxIRC now fully supports BITNET messaging, first you have the /tell
|
||||||
and /yell commands for traditional way of sending bitnet messages,
|
| and /yell commands for traditional way of sending bitnet messages,
|
||||||
but you also have /msg +nickname (or /query +nick, /target +nick).
|
| but you also have /msg +nickname (or /query +nick, /target +nick).
|
||||||
When a message target begins with a leading plus sign, rxIRC will
|
| When a message target begins with a leading plus sign, rxIRC will
|
||||||
not send the message to IRC, but instead send it to the BITNET
|
| not send the message to IRC, but instead send it to the BITNET
|
||||||
user specified. So you can easily query a bitnet user with /query +.
|
| user specified. So you can easily query a bitnet user with /query +.
|
||||||
|
|
|
||||||
BITnet message receivers can be specified by nickname from NAMES
|
| BITnet message receivers can be specified by nickname from NAMES
|
||||||
file or with <userid>@<node> or '<userid> at <node>' or <local_userid>.
|
| file or with <userid>@<node> or '<userid> at <node>' or <local_userid>.
|
||||||
|
|
|
||||||
rxIRC handles incoming BITnet messages properly and will
|
| rxIRC handles incoming BITnet messages properly and will
|
||||||
display them as neat as possible. It also checks for /ignore
|
| display them as neat as possible. It also checks for /ignore
|
||||||
by both nickname and userid@node. If you are /away, also bitnet
|
| by both nickname and userid@node. If you are /away, also bitnet
|
||||||
| users are informed of this when they talk to you, but only once.
|
| users are informed of this when they talk to you.
|
||||||
|
|
|
||||||
rxIRC is capable of sending messages over alternative routes
|
| rxIRC is capable of sending messages over alternative routes
|
||||||
than BITnet allows by default. To achieve this you need to
|
| than BITnet allows by default. To achieve this you need to
|
||||||
specify "via <node>" at the beginning of a message and all following
|
| specify "via <node>" at the beginning of a message and all following
|
||||||
messages will be forwarded through that node. For instance:
|
| messages will be forwarded through that node. For instance:
|
||||||
|
|
|
||||||
/m +strange via psuvm hello!
|
| /m +strange via psuvm hello!
|
||||||
|
|
|
||||||
This will send 'hello!' first to PSUVM which then forwards it to MAINE.
|
| This will send 'hello!' first to PSUVM which then forwards it to MAINE.
|
||||||
|
|
|
||||||
You can also generate local CP SMSG or CP SEND by specifying "smsg" or
|
| You can also generate local CP SMSG or CP SEND by specifying "smsg" or
|
||||||
"send" as arguments to "via".
|
| "send" as arguments to "via".
|
||||||
You can remove a 'via' redirection with "via none".
|
| You can remove a 'via' redirection with "via none".
|
||||||
You can set up different via's for each userid@node.
|
| You can set up different via's for each userid@node.
|
||||||
|
|
|
||||||
To speed up operation, rxIRC keeps internal mappings from nickname to
|
| To speed up operation, rxIRC keeps internal mappings from nickname to
|
||||||
userid@node and from userid@node to nickname. That is, your NAMES file
|
| userid@node and from userid@node to nickname. That is, your NAMES file
|
||||||
is only queried once. So should you change the userid@node information
|
| is only queried once. So should you change the userid@node information
|
||||||
in your NAMES file from within rxIRC for a nickname that has already
|
| in your NAMES file from within rxIRC for a nickname that has already
|
||||||
been read in, you'll have to restart rxIRC.
|
| been read in, you'll have to restart rxIRC.
|
||||||
|
|
||||||
Escape characters:
|
Escape characters:
|
||||||
There are two escape characters in rxIRC. One is the rxIRC command
|
There are two escape characters in rxIRC. One is the rxIRC command
|
||||||
@ -110,52 +109,52 @@ Special commands of rxIRC:
|
|||||||
connection. Use this only when you can't get out with /bye.
|
connection. Use this only when you can't get out with /bye.
|
||||||
|
|
||||||
/ALias [<alias name> [[<argument catchers>] <command string>]]
|
/ALias [<alias name> [[<argument catchers>] <command string>]]
|
||||||
You may create your own abbreviations for simple or complex commands.
|
| You may create your own abbreviations for simple or complex commands.
|
||||||
Commands may not contain the command char. Multiple commands can be
|
| Commands may not contain the command char. Multiple commands can be
|
||||||
specified by separating them with '::'. User-provided arguments can be put
|
| specified by separating them with '::'. User-provided arguments can be put
|
||||||
into variables by writing as many '%<var>' as you need in front of the
|
| into variables by writing as many '%<var>' as you need in front of the
|
||||||
command string. Alias names are case insensitive.
|
| command string. Alias names are case insensitive.
|
||||||
|
|
|
||||||
Some examples:
|
| Some examples:
|
||||||
alias ni msg nickserv@service.de
|
| alias ni msg nickserv@service.de
|
||||||
This will convince rxIRC to send a message to NickServ with /ni <msg>.
|
| This will convince rxIRC to send a message to NickServ with /ni <msg>.
|
||||||
|
|
|
||||||
alias date expr date date()::echo $(date)
|
| alias date expr date date()::echo $(date)
|
||||||
This makes rxIRC output today's date. Notice how I first used the
|
| This makes rxIRC output today's date. Notice how I first used the
|
||||||
/expr command, then the /echo command.
|
| /expr command, then the /echo command.
|
||||||
|
|
|
||||||
alias ctoggle %k %c pf$k imm /toggle $k |join $c|part $c
|
| alias ctoggle %k %c pf$k imm /toggle $k |join $c|part $c
|
||||||
This allows you to setup a PF key to join or leave a channel
|
| This allows you to setup a PF key to join or leave a channel
|
||||||
alternatingly simply by typing "/ctoggle 9 #PartyZone".
|
| alternatingly simply by typing "/ctoggle 9 #PartyZone".
|
||||||
Notice how it catches the two arguments and puts it into $k and $c.
|
| Notice how it catches the two arguments and puts it into $k and $c.
|
||||||
Then it calls pf$k which in our case is 'PF9', the rxIRC command
|
| Then it calls pf$k which in our case is 'PF9', the rxIRC command
|
||||||
to setup the PF9 key. The key then will immediately perform
|
| to setup the PF9 key. The key then will immediately perform
|
||||||
"/toggle 9 |join #PartyZone|part #PartyZone" which takes
|
| "/toggle 9 |join #PartyZone|part #PartyZone" which takes
|
||||||
care of the alternating impact of the pf9 key. See /toggle for details.
|
| care of the alternating impact of the pf9 key. See /toggle for details.
|
||||||
|
|
|
||||||
alias sgg smile::grin::giggle
|
| alias sgg smile::grin::giggle
|
||||||
/alias is treated differently from all other commands, in the sense
|
| /alias is treated differently from all other commands, in the sense
|
||||||
that the line following /alias is not preprocessed as usual.
|
| that the line following /alias is not preprocessed as usual.
|
||||||
This means $(variable) is only replaced _when_ the alias is actually
|
| This means $(variable) is only replaced _when_ the alias is actually
|
||||||
used, not when you define it. Also you can specify multiple commands
|
| used, not when you define it. Also you can specify multiple commands
|
||||||
within an alias by putting '::' between them. The commands will be
|
| within an alias by putting '::' between them. The commands will be
|
||||||
executed in a row as soon as the alias is used.
|
| executed in a row as soon as the alias is used.
|
||||||
|
|
|
||||||
alias sgg
|
| alias sgg
|
||||||
Using /alias with just one argument will display the definition of
|
| Using /alias with just one argument will display the definition of
|
||||||
that particular alias.
|
| that particular alias.
|
||||||
|
|
|
||||||
alias
|
| alias
|
||||||
Using /alias without arguments will list the aliases.
|
| Using /alias without arguments will list the aliases.
|
||||||
|
|
|
||||||
Note: I have not provided a command to un-alias an alias as it's
|
| Note: I have not provided a command to un-alias an alias as it's
|
||||||
not really needed.
|
| not really needed.
|
||||||
|
|
||||||
/CAtalog
|
/CAtalog
|
||||||
This command will show you a compact list of all channel names that have at
|
| This command will show you a compact list of all channel names that have at
|
||||||
least 5 persons on them. Unfortunately it takes quite some time to perform
|
| least 5 persons on them. Unfortunately it takes quite some time to perform
|
||||||
as it has to process a lot of data from the IRC server before being able
|
| as it has to process a lot of data from the IRC server before being able
|
||||||
to display the collected information.
|
| to display the collected information.
|
||||||
|
|
||||||
/Channel <new channel>
|
/Channel <new channel>
|
||||||
This command will automatically /part you from your previous channel
|
This command will automatically /part you from your previous channel
|
||||||
@ -164,8 +163,8 @@ Special commands of rxIRC:
|
|||||||
Without argument it will tell you what channel you are on.
|
Without argument it will tell you what channel you are on.
|
||||||
|
|
||||||
/CHOP <nickname> [<nickname> [<nickname>]]
|
/CHOP <nickname> [<nickname> [<nickname>]]
|
||||||
Make people channel operators of the current channel.
|
| Make people channel operators of the current channel.
|
||||||
A shorthand for "/mode $C +o <nickname>"
|
| A shorthand for "/mode $C +o <nickname>"
|
||||||
|
|
||||||
/CLear
|
/CLear
|
||||||
Clear the screen. Just in case you're not used to hitting PA2.
|
Clear the screen. Just in case you're not used to hitting PA2.
|
||||||
@ -174,72 +173,65 @@ Special commands of rxIRC:
|
|||||||
Use another character than '/' to introduce commands.
|
Use another character than '/' to introduce commands.
|
||||||
|
|
||||||
/DEscribe <target> <description>
|
/DEscribe <target> <description>
|
||||||
This command generates a CTCP ACTION description like /ME and the
|
| This command generates a CTCP ACTION description like /ME and the
|
||||||
other action commands, but you can specify where to send it to.
|
| other action commands, but you can specify where to send it to.
|
||||||
Target can be a nickname or a channel, not a bitnet user of course.
|
| Target can be a nickname or a channel, not a bitnet user of course.
|
||||||
|
|
||||||
/ECHO <text>
|
/ECHO <text>
|
||||||
Display a line of text to the screen. Typically used combined with
|
| Display a line of text to the screen. Typically used combined with
|
||||||
variables like this:
|
| variables like this:
|
||||||
expr t left(time(),5)
|
| expr t left(time(),5)
|
||||||
echo The time is $t
|
| echo The time is $t
|
||||||
|
|
||||||
/Execute <command> or more easily just: !<command>
|
/Execute <command> or more easily just: !<command>
|
||||||
You can execute CMS commands with this, but remember not to stay too
|
You can execute CMS commands with this, but remember not to stay too
|
||||||
long outside IRC or the IRC-server will most likely close your connection.
|
long outside IRC or the IRC-server will most likely close your connection.
|
||||||
|
|
||||||
/EXPOrt <filemasks>
|
|
||||||
| With this command you define which files can be accessed via WWW if you
|
|
||||||
| activate the builtin httpd, using a <filename>.<filetype> notation as is
|
|
||||||
| visible from WWW (hello.html being the file HELLO HTML *). Typical usage
|
|
||||||
| is "/export *.html", remember that index.html is the file that is loaded
|
|
||||||
| first when a user inspects your WWW server.
|
|
||||||
|
|
||||||
/EXPRession <varname> <rexx expression>
|
/EXPRession <varname> <rexx expression>
|
||||||
This allows you to store the value of a rexx expression into a variable.
|
| This allows you to store the value of a rexx expression into a variable.
|
||||||
You can use RexX builtin functions such as substr(), words() giving you
|
| You can use RexX builtin functions such as substr(), words() giving you
|
||||||
a quite powerful medium to operate on variables.
|
| a quite powerful medium to operate on variables.
|
||||||
Some examples:
|
| Some examples:
|
||||||
expr time time()
|
| expr time time()
|
||||||
expr t left('$(time)',5)
|
| expr t left('$(time)',5)
|
||||||
echo $t
|
| echo $t
|
||||||
Notice the trick that makes the contents of $(time) a valid rexx
|
| Notice the trick that makes the contents of $(time) a valid rexx
|
||||||
string by putting '' around it.
|
| string by putting '' around it.
|
||||||
|
|
||||||
/Follow
|
/Follow
|
||||||
If you have just been invited to a channel this is an easier way to
|
If you have just been invited to a channel this is an easier way to
|
||||||
join it. rxIRC will remember the name of the channel for you.
|
join it. rxIRC will remember the name of the channel for you.
|
||||||
|
|
||||||
/IF <rexx condition expression> THEN <command>
|
/IF <rexx condition expression> THEN <command>
|
||||||
This will make rxIRC perform <command> only when <condition> is met.
|
| This will make rxIRC perform <command> only when <condition> is met.
|
||||||
The <condition> must not contain spaces, in exchange it may contain
|
| The <condition> must not contain spaces, in exchange it may contain
|
||||||
RexX builtin function.. you can even make floating point calculus!
|
| RexX builtin function.. you can even make floating point calculus!
|
||||||
Here goes an example:
|
| Here goes an example:
|
||||||
expr a 5/2
|
| expr a 5/2
|
||||||
if 2*$a=5 then echo People really win on IRC!
|
| if 2*$a=5 then echo People really win on IRC!
|
||||||
|
|
||||||
/IGnore [ <nickname>|<address-mask> ] [ <more...> ]
|
/IGnore <nickname>|<address-mask> [<more arguments>]
|
||||||
If you don't want to receive a person's messages, you can use /ignore
|
If you don't want to receive a person's messages, you can use /ignore
|
||||||
on him. Use it again to remove the /ignore. Without arguments you
|
on him. Use it again to remove the /ignore. Without arguments you
|
||||||
get the list of people being ignored by you. The ignore function
|
| get the list of people being ignored by you. The ignore function
|
||||||
catches /msg's, /notice's and bitnet messages from the specified
|
| catches /msg's, /notice's and bitnet messages from the specified
|
||||||
nickname. It also sends a notice back to the sender telling him that
|
nickname. It also sends a notice back to the sender telling him that
|
||||||
you are not receiving his messages unless you specify it to be silent with
|
you are not receiving his messages unless you specify it to be silent with
|
||||||
the rxIRC option "(Quiet". An <address-mask> is a string that will
|
| the rxIRC option "(Quiet". An <address-mask> is a string that will
|
||||||
match a set of hosts from whom you don't want to hear anything.
|
| match a set of hosts from whom you don't want to hear anything.
|
||||||
For example "*.ais.org" will keep any message from a user of that
|
| For example "*.ais.org" will keep any message from a user of that
|
||||||
organization away from you. You can apply this to BITnet nodes aswell.
|
| organization away from you. You can apply this to BITnet nodes aswell.
|
||||||
|
|
||||||
/INTerpret <rexx statement>
|
/INTerpret <rexx statement>
|
||||||
This will simply execute a RexX statement. A command for hackers.
|
| This will simply execute a RexX statement. A command for hackers.
|
||||||
|
|
||||||
/Invite <nickname> [<channel>]
|
/Invite <nickname> [<channel>]
|
||||||
I made the channel argument optional. "/i lynx" will invite me to
|
| I made the channel argument optional. "/i lynx" will invite me to
|
||||||
your current channel without hassle.
|
| your current channel without hassle.
|
||||||
|
|
||||||
/K <nickname>
|
/K <nickname>
|
||||||
The quick way to kick somebody off a channel. This is a shorthand
|
| The quick way to kick somebody off a channel. This is a shorthand
|
||||||
for /kick $C <nickname>
|
| for /kick $C <nickname>
|
||||||
|
|
||||||
/LAstlog [<number of lines>]
|
/LAstlog [<number of lines>]
|
||||||
This shows you the last messages you received, usually 12 lines, but
|
This shows you the last messages you received, usually 12 lines, but
|
||||||
@ -247,34 +239,21 @@ Special commands of rxIRC:
|
|||||||
|
|
||||||
/LIst
|
/LIst
|
||||||
Shows a list of channel names, number of users and topic.
|
Shows a list of channel names, number of users and topic.
|
||||||
There must be at least 8 people on the channel for it to be listed,
|
| There must be at least 8 people on the channel for it to be listed,
|
||||||
unless you are running in LIST_ALL mode (See options in SYNTAX).
|
unless you are running in LIST_ALL mode (See options in SYNTAX).
|
||||||
|
|
||||||
/Localwho (you may as well type /LCL)
|
/Localwho (you may as well type /LCL)
|
||||||
Shows you a list of IRC users that are from the same site as you or
|
| Shows you a list of IRC users that are from the same site as you or
|
||||||
are using an IRC server which runs at your institution.
|
| are using an IRC server which runs at your institution.
|
||||||
|
|
||||||
/LOgging [ON | OFF]
|
/LOgging [ON | OFF]
|
||||||
You can switch the logging on and off. That means you get a transcription
|
You can switch the logging on and off. That means you get a transcription
|
||||||
of your IRC session into the file IRC LOG A0 on disk.
|
of your IRC session into the file IRC LOG A0 on disk.
|
||||||
|
|
||||||
/NAmes
|
/NAmes
|
||||||
Shows a list of channels and people on them, but only those channels
|
| Shows a list of channels and people on them, but only those channels
|
||||||
that have at least 7 visible persons aboard. This should be modified into
|
| that have at least 7 visible persons aboard. This should be modified into
|
||||||
something more flexible but for now it's like this. See also: /cat
|
| something more flexible but for now it's like this. See also: /cat
|
||||||
|
|
||||||
/NF [ <nicknames> ]
|
|
||||||
| Short form of /notify
|
|
||||||
|
|
||||||
/NOTIFy [ <nicknames> ]
|
|
||||||
| With this command you can tell rxIRC to watch out for certain people to
|
|
||||||
| show up on IRC. You will be informed within one minute when they sign on.
|
|
||||||
| Using /notify on the nickname again will remove it from the list.
|
|
||||||
|
|
||||||
/OMit [ <nickname>|<address-mask> ] [ <more...> ]
|
|
||||||
| This one lets you filter the communication on a channel by leaving the
|
|
||||||
| lines out that were typed by people you aren't listening to anyway.
|
|
||||||
| So it's much like an /ignore for channel talk.
|
|
||||||
|
|
||||||
/Query [ <nickname> | <channel> ]
|
/Query [ <nickname> | <channel> ]
|
||||||
You can get into a dialogue mode with a person, all lines you type are
|
You can get into a dialogue mode with a person, all lines you type are
|
||||||
@ -284,10 +263,10 @@ Special commands of rxIRC:
|
|||||||
If you want to use #-type channels you need to /query those, too.
|
If you want to use #-type channels you need to /query those, too.
|
||||||
|
|
||||||
/PF<n> <mode> <string>
|
/PF<n> <mode> <string>
|
||||||
You can use /pf1 through /pf24 to setup your PF keys. This command is
|
| You can use /pf1 through /pf24 to setup your PF keys. This command is
|
||||||
actually nothing but a short form of !cp set pf<n> <mode> <string>
|
| actually nothing but a short form of !cp set pf<n> <mode> <string>
|
||||||
so better refer to the CP SET manual for details on usage.
|
| so better refer to the CP SET manual for details on usage.
|
||||||
Ok, I will resume: <mode> can either be IMMediate or DELayed.
|
| Ok, I will resume: <mode> can either be IMMediate or DELayed.
|
||||||
|
|
||||||
/Reply
|
/Reply
|
||||||
This is a shortcut to get into a /query with the person that last sent
|
This is a shortcut to get into a /query with the person that last sent
|
||||||
@ -299,42 +278,41 @@ Special commands of rxIRC:
|
|||||||
automatically respond as does rxIRC when it gets such a request.
|
automatically respond as does rxIRC when it gets such a request.
|
||||||
|
|
||||||
/SAY <words>
|
/SAY <words>
|
||||||
Speaks to the channel. Useful for aliases and source-scripts.
|
| Speaks to the channel. Useful for aliases and source-scripts.
|
||||||
|
|
||||||
/SErver <address> [ <port> [ <timeout> ] ]
|
/SErver <address> [ <port> [ <timeout> ] ]
|
||||||
Switch to another IRC server. rxIRC will exit if the server does not
|
Switch to another IRC server. rxIRC will exit if the server does not
|
||||||
respond.
|
respond.
|
||||||
|
|
||||||
/SET [<variable> [<value>]]
|
/SET [<variable> [<value>]]
|
||||||
Set or query the contents of a variable, or if used without arguments,
|
| Set or query the contents of a variable, or if used without arguments,
|
||||||
give a listing of all user-defined variables.
|
| give a listing of all user-defined variables.
|
||||||
|
|
||||||
/SKIP <number_of_lines>
|
/SKIP <number_of_lines>
|
||||||
Tell rxIRC to skip the next <number> of lines of the file being
|
| Tell rxIRC to skip the next <number> of lines of the file being
|
||||||
sourced. Meaningless to be entered interactively. Lookup up /source
|
| sourced. Meaningless to be entered interactively. Lookup up /source
|
||||||
for a practical example of skip's use.
|
| for a practical example of skip's use.
|
||||||
|
|
||||||
/SOurce <filename>
|
/SOurce <filename>
|
||||||
Looks for a file called '<filename> RXIRC *' on all linked disks,
|
| Looks for a file called '<filename> RXIRC *' on all linked disks,
|
||||||
then attempts to read it and execute it line by line.
|
| then attempts to read it and execute it line by line.
|
||||||
/source PROFILE is automatically executed when you start up rxIRC,
|
| /source profile is automatically executed when you start up rxIRC.
|
||||||
| /source CONNECT right after you have connected to the server.
|
| Lines are always treated as commands. The commands may not have the
|
||||||
Lines are always treated as commands. The commands may not have the
|
| leading command character (the slash). Multiple commands can be specified
|
||||||
leading command character (the slash). Multiple commands can be specified
|
| in one line separated by '::' and lines can be indented.
|
||||||
in one line separated by '::' and lines can be indented.
|
| Especially interesting for scripts are the commands /if, /skip, /stop.
|
||||||
Especially interesting for scripts are the commands /if, /skip, /stop.
|
| For instance like this:
|
||||||
For instance like this:
|
|
|
||||||
|
| expr month word(date(),2)
|
||||||
expr month word(date(),2)
|
| if word(date(),1)/=1 then skip 2
|
||||||
if word(date(),1)/=1 then skip 2
|
| echo Hey! Today is the 1st of $(month)!
|
||||||
echo Hey! Today is the 1st of $(month)!
|
| skip 1
|
||||||
skip 1
|
| echo Today is just another day of $(month)...
|
||||||
echo Today is just another day of $(month)...
|
| echo Anyway.. what I really wanted to say...
|
||||||
echo Anyway.. what I really wanted to say...
|
|
|
||||||
|
| This shows how to make an if-then-else construct in an rxIRC script
|
||||||
This shows how to make an if-then-else construct in an rxIRC script
|
| in a pretty assembler-like manner.. ;)
|
||||||
in a pretty assembler-like manner.. ;)
|
| Indenting improves readability slightly.
|
||||||
Indenting improves readability slightly.
|
|
||||||
|
|
||||||
/STatus
|
/STatus
|
||||||
This outputs some of rxIRC's variables, tells you what channel you are
|
This outputs some of rxIRC's variables, tells you what channel you are
|
||||||
@ -343,11 +321,11 @@ Special commands of rxIRC:
|
|||||||
It also shows a /whois of yourself.
|
It also shows a /whois of yourself.
|
||||||
|
|
||||||
/STOP
|
/STOP
|
||||||
This command only makes sense within scripts. It stops rxIRC from
|
| This command only makes sense within scripts. It stops rxIRC from
|
||||||
executing scripts any longer. Might be useful combined with /if.
|
| executing scripts any longer. Might be useful combined with /if.
|
||||||
|
|
||||||
/T <topic>
|
/T <topic>
|
||||||
Set a topic on the current channel. Shorthand for "/topic $C <topic>".
|
| Set a topic on the current channel. Shorthand for "/topic $C <topic>".
|
||||||
|
|
||||||
/TAlkto <new target>
|
/TAlkto <new target>
|
||||||
This is the ONLY command to allow you to switch to another channel when
|
This is the ONLY command to allow you to switch to another channel when
|
||||||
@ -359,64 +337,64 @@ Special commands of rxIRC:
|
|||||||
command.
|
command.
|
||||||
|
|
||||||
/TCPipstatus
|
/TCPipstatus
|
||||||
Gives some information about your connection to IRC. The number of bytes
|
| Gives some information about your connection to IRC. The number of bytes
|
||||||
in the input buffer might be interesting. If there are any, then your
|
| in the input buffer might be interesting. If there are any, then your
|
||||||
connection to the server is probably suffering from netlag.
|
| connection to the server is probably suffering from netlag.
|
||||||
|
|
||||||
/TEll <nickname>|<user@node>|<user at node> [via <gateway>] message
|
/TEll <nickname>|<user@node>|<user at node> [via <gateway>] message
|
||||||
Use this command to send a message to a user in BITNet.
|
| Use this command to send a message to a user in BITNet.
|
||||||
See note about the bitnet support of rxIRC at the top of this file.
|
| See note about the bitnet support of rxIRC at the top of this file.
|
||||||
|
|
||||||
/TOGgle <key> <c><first command><c><second command>
|
/TOGgle <key> <c><first command><c><second command>
|
||||||
This is a tricky feature to allow you to program pf keys with alternating
|
| This is a tricky feature to allow you to program pf keys with alternating
|
||||||
function each time you use them. <key> is the number of the pf key.
|
| function each time you use them. <key> is the number of the pf key.
|
||||||
<c> is the character used to separate the commands. I use '|' usually.
|
| <c> is the character used to separate the commands. I use '|' usually.
|
||||||
Toggle performs <first command>, then sets up PF<key> to call the
|
| Toggle performs <first command>, then sets up PF<key> to call the
|
||||||
inverted command '/TOGGLE <key> <c><second command><c><first command>'
|
| inverted command '/TOGGLE <key> <c><second command><c><first command>'
|
||||||
Here's one practical example you can include in your PROFILE RXIRC:
|
| Here's one practical example you can include in your PROFILE RXIRC:
|
||||||
|
|
|
||||||
pf5 imm toggle 5 |query Nickserv@service.de|query
|
| pf5 imm toggle 5 |query Nickserv@service.de|query
|
||||||
|
|
|
||||||
This will set up the PF05 key to /query or un-/query NickServ.
|
| This will set up the PF05 key to /query or un-/query NickServ.
|
||||||
Look also for the 'ctoggle' alias described in /alias.
|
| Look also for the 'ctoggle' alias described in /alias.
|
||||||
|
|
||||||
/Umode <mode switches>
|
/Umode <mode switches>
|
||||||
Change your "mode", that is change some flags in the IRC server
|
| Change your "mode", that is change some flags in the IRC server
|
||||||
concerning your connection. See IRC documentation about this.
|
| concerning your connection. See IRC documentation about this.
|
||||||
This is just a shorthand for "/mode <yournick> <switches>".
|
| This is just a shorthand for "/mode <yournick> <switches>".
|
||||||
|
|
||||||
/UNCHOP <nickname> [<nickname> [<nickname>]]
|
/UNCHOP <nickname> [<nickname> [<nickname>]]
|
||||||
Remove channel operatorship of the current channel from some people.
|
| Remove channel operatorship of the current channel from some people.
|
||||||
A shorthand for "/mode $C -o <nickname>"
|
| A shorthand for "/mode $C -o <nickname>"
|
||||||
|
|
||||||
/VIewlog
|
/VIewlog
|
||||||
A handy command to check out today's IRC log.
|
| A handy command to check out today's IRC log.
|
||||||
Uses the CMS command 'BROWSE'. Hope that one exists on every CMS.
|
| Uses the CMS command 'BROWSE'. Hope that one exists on every CMS.
|
||||||
|
|
||||||
/WHO [<channel> | <nickname> | <matchstring>]
|
/WHO [<channel> | <nickname> | <matchstring>]
|
||||||
The /who command can now be used without arguments, if you are talking
|
| The /who command can now be used without arguments, if you are talking
|
||||||
to a channel, it will show you the WHO list of that channel.
|
| to a channel, it will show you the WHO list of that channel.
|
||||||
You can match hosts as well as real names with <matchstring>, so
|
You can match hosts as well as real names with <matchstring>, so
|
||||||
the normal way to get a list of e.g. all italians is to type '/who *.it'.
|
the normal way to get a list of e.g. all italians is to type '/who *.it'.
|
||||||
The logic that displays WHO output has become very complex (and
|
| The logic that displays WHO output has become very complex (and
|
||||||
colourful if you have colours by the way). It will display the channel
|
| colourful if you have colours by the way). It will display the channel
|
||||||
information only if it still fits into the line. Also, if there is still
|
| information only if it still fits into the line. Also, if there is still
|
||||||
not enough space, it will truncate the hostname and put an '*' after the
|
| not enough space, it will truncate the hostname and put an '*' after the
|
||||||
'@' to indicate that. But it will only truncate the hostname to a certain
|
| '@' to indicate that. But it will only truncate the hostname to a certain
|
||||||
minimum, from then on it will shorten the real name information and
|
| minimum, from then on it will shorten the real name information and
|
||||||
indicate that with a pair of periods, but that only happens in extreme
|
| indicate that with a pair of periods, but that only happens in extreme
|
||||||
cases. /who should always give you as much info as possible without
|
| cases. /who should always give you as much info as possible without
|
||||||
wrapping lines. If you however do need more info don't forget about /whois.
|
| wrapping lines. If you however do need more info don't forget about /whois.
|
||||||
|
|
||||||
/Xamine
|
/Xamine
|
||||||
Quicky to get a /whois of the person that lest sent you a message.
|
Quicky to get a /whois of the person that lest sent you a message.
|
||||||
|
|
||||||
/Yell <arguments>
|
/Yell <arguments>
|
||||||
This is just like /tell with one little difference. Yell prepends
|
| This is just like /tell with one little difference. Yell prepends
|
||||||
your own nickname in front of the message. Use it when it's likely
|
| your own nickname in front of the message. Use it when it's likely
|
||||||
that your dialogue partner is not running a message handling program
|
| that your dialogue partner is not running a message handling program
|
||||||
and doesn't know your userid by heart.
|
| and doesn't know your userid by heart.
|
||||||
|
|
||||||
* <remark>
|
* <remark>
|
||||||
With this you can add CMS-style comments in your RXIRC source files.
|
| With this you can add CMS-style comments in your RXIRC source files.
|
||||||
Lines beginning with * are skipped.
|
| Lines beginning with * are skipped.
|
||||||
|
|||||||
Binary file not shown.
@ -1,101 +0,0 @@
|
|||||||
Filename Filetype FM Format LRecL Date Time Compressed Size
|
|
||||||
EXTINT52 ASSEMBLE W1 F 80 1993-02-17 11:55:28 6561
|
|
||||||
RXSOCKET $PACKAGE W1 V 72 1994-01-10 17:10:36 2668
|
|
||||||
EXTINT52 MODULE W1 F 1360 1993-02-17 11:55:18 1228
|
|
||||||
RXWSAMPL TIMEFILE W1 V 57 1993-02-17 11:55:04 431
|
|
||||||
RXWSAMPL EXEC W1 V 73 1994-06-06 21:11:30 2866
|
|
||||||
REXXWAIT MODULE W1 V -11456 1994-04-15 07:01:03 33148
|
|
||||||
WNG HELPEVNT W1 V 79 1994-01-10 17:04:48 911
|
|
||||||
WAIT HELPEVNT W1 V 79 1994-01-10 17:04:47 831
|
|
||||||
TIME HELPEVNT W1 V 79 1994-01-10 17:04:46 1231
|
|
||||||
SMSG HELPEVNT W1 V 79 1994-01-10 17:04:45 991
|
|
||||||
OMSG HELPEVNT W1 V 79 1994-01-10 17:04:44 1551
|
|
||||||
MSG HELPEVNT W1 V 79 1994-01-10 17:04:43 911
|
|
||||||
MAIL HELPEVNT W1 V 79 1994-01-10 17:04:42 1071
|
|
||||||
FILE HELPEVNT W1 V 79 1994-01-10 17:04:40 1391
|
|
||||||
CONS HELPEVNT W1 V 79 1994-01-10 17:04:37 911
|
|
||||||
ALL HELPEVNT W1 V 79 1994-01-10 17:04:36 751
|
|
||||||
EVNTHND HELPMENU W1 V 75 1994-01-10 17:04:48 991
|
|
||||||
WAIT HELPREXX W1 V 79 1994-01-10 17:05:06 1151
|
|
||||||
SETVALUE HELPREXX W1 V 79 1994-01-10 17:05:03 911
|
|
||||||
RESETVAL HELPREXX W1 V 79 1994-01-10 17:05:03 671
|
|
||||||
QUERYVAL HELPREXX W1 V 79 1994-01-10 17:05:02 991
|
|
||||||
CTABLE HELPREXX W1 V 79 1994-01-10 17:04:59 1151
|
|
||||||
CTYPE HELPREXX W1 V 79 1994-01-10 17:05:00 591
|
|
||||||
EC2AC HELPREXX W1 V 79 1994-01-10 17:05:01 511
|
|
||||||
AC2EC HELPREXX W1 V 79 1994-01-10 17:04:58 511
|
|
||||||
REXXWAIT HELPMENU W1 V 75 1994-01-10 17:04:51 1071
|
|
||||||
REXXWAIT MANUAL W1 V 110 1994-04-15 07:00:52 45429
|
|
||||||
REXXWAIT MEMO W1 V 76 1993-09-15 09:30:55 4419
|
|
||||||
RXSOCKET TCPXLATE W1 V 59 1993-02-17 11:53:48 1551
|
|
||||||
RXSOCKET TCPXLBIN W1 F 256 1993-02-17 11:53:59 757
|
|
||||||
RSCLIENT EXEC W1 V 72 1993-02-17 11:53:29 2881
|
|
||||||
RSSERVER EXEC W1 V 72 1993-02-17 11:53:18 4321
|
|
||||||
RXSSAMPL EXEC W1 V 73 1993-02-17 11:52:50 3210
|
|
||||||
RESOLVE EXEC W1 V 60 1993-02-17 11:52:33 1038
|
|
||||||
FINGER EXEC W1 V 82 1995-03-27 08:58:48 2582
|
|
||||||
DAYTIME EXEC W1 V 82 1993-02-17 12:19:28 2262
|
|
||||||
ARCHIE EXEC W1 V 94 1995-06-09 17:38:17 7702
|
|
||||||
RXSOCKET MODULE W1 V -28648 1994-07-01 09:55:53 25201
|
|
||||||
RXSOCKET MEMO W1 V 74 1993-02-17 21:23:48 8600
|
|
||||||
RXSOCKET MANUAL W1 V 96 1993-06-04 10:23:03 36004
|
|
||||||
RXSOCKET SCRIPT W1 V 133 1994-04-20 10:44:15 34194
|
|
||||||
IMMCMD HELPEVNT W1 V 79 1994-01-12 08:50:31 991
|
|
||||||
HOLIDAY HELPEVNT W1 V 79 1994-01-12 08:50:11 1151
|
|
||||||
SOCKET HELPEVNT W1 V 79 1994-01-10 17:04:45 1151
|
|
||||||
SOCKET HELPREXX W1 V 79 1994-01-10 17:05:04 991
|
|
||||||
REXXSOCK HELPMENU W1 V 73 1994-01-10 17:04:50 671
|
|
||||||
RXS028W HELPMSG W1 V 76 1994-01-10 17:04:57 674
|
|
||||||
RXS012E HELPMSG W1 V 77 1994-01-10 17:04:56 514
|
|
||||||
RXS008E HELPMSG W1 V 78 1994-01-10 17:04:55 674
|
|
||||||
RXS004E HELPMSG W1 V 79 1994-01-10 17:04:52 674
|
|
||||||
WRITE HELPRXSO W1 V 78 1994-01-10 17:06:12 1231
|
|
||||||
VERSION HELPRXSO W1 V 78 1994-01-10 17:06:11 1071
|
|
||||||
TERMINAT HELPRXSO W1 V 79 1994-01-10 17:06:10 1311
|
|
||||||
TAKESOCK HELPRXSO W1 V 78 1994-01-10 17:06:09 1631
|
|
||||||
SOCKETSE HELPRXSO W1 V 79 1994-01-10 17:06:00 2591
|
|
||||||
SOCKET HELPRXSO W1 V 77 1994-01-10 17:05:59 1631
|
|
||||||
SHUTDOWN HELPRXSO W1 V 78 1994-01-10 17:05:59 1151
|
|
||||||
SETSOCKO HELPRXSO W1 V 78 1994-01-10 17:05:58 1871
|
|
||||||
SENDTO HELPRXSO W1 V 79 1994-01-10 17:05:57 1471
|
|
||||||
SEND HELPRXSO W1 V 77 1994-01-10 17:05:56 1391
|
|
||||||
SELECT HELPRXSO W1 V 78 1994-01-10 17:05:55 1791
|
|
||||||
RESOLVE HELPRXSO W1 V 77 1994-01-10 17:05:53 1551
|
|
||||||
RECVFROM HELPRXSO W1 V 78 1994-01-10 17:05:52 1711
|
|
||||||
RECV HELPRXSO W1 V 78 1994-01-10 17:05:51 1551
|
|
||||||
READ HELPRXSO W1 V 77 1994-01-10 17:05:49 1471
|
|
||||||
LISTEN HELPRXSO W1 V 79 1994-01-10 17:05:48 1151
|
|
||||||
IOCTL HELPRXSO W1 V 78 1994-01-10 17:05:46 1631
|
|
||||||
INITIALI HELPRXSO W1 V 79 1994-01-10 17:05:45 1711
|
|
||||||
GIVESOCK HELPRXSO W1 V 78 1994-01-10 17:05:45 1551
|
|
||||||
GETSOCKO HELPRXSO W1 V 78 1994-01-10 17:05:44 1951
|
|
||||||
GETSOCKN HELPRXSO W1 V 79 1994-01-10 17:05:32 1151
|
|
||||||
GETSERVB HELPRXSO W1 V 74 1994-01-10 17:05:32 1231
|
|
||||||
GETPROTO HELPRXSO W1 V 73 1994-01-10 17:05:31 1071
|
|
||||||
GETPEERN HELPRXSO W1 V 79 1994-01-10 17:05:29 1071
|
|
||||||
GETHOSTN HELPRXSO W1 V 76 1994-01-10 17:05:28 991
|
|
||||||
GETHOSTI HELPRXSO W1 V 79 1994-01-10 17:05:26 991
|
|
||||||
GETHOSTB HELPRXSO W1 V 77 1994-01-10 17:05:25 1711
|
|
||||||
GETDOMAI HELPRXSO W1 V 76 1994-01-10 17:05:24 1071
|
|
||||||
GETCLIEN HELPRXSO W1 V 78 1994-01-10 17:05:23 1311
|
|
||||||
FCNTL HELPRXSO W1 V 78 1994-01-10 17:05:22 1391
|
|
||||||
CONNECT HELPRXSO W1 V 79 1994-01-10 17:05:21 1631
|
|
||||||
CLOSE HELPRXSO W1 V 78 1994-01-10 17:05:19 911
|
|
||||||
BIND HELPRXSO W1 V 78 1994-01-10 17:05:18 1471
|
|
||||||
ACCEPT HELPRXSO W1 V 79 1994-01-10 17:05:17 1471
|
|
||||||
RXSOCKET HELPTASK W1 V 80 1994-01-10 17:06:13 2191
|
|
||||||
RXSOCKET HOWMVS W1 F 80 1994-06-06 21:17:51 751
|
|
||||||
RXSOCKET TXTMVS W1 F 80 1994-03-14 14:10:24 57720
|
|
||||||
WRITESRV EXEC W1 V 115 1993-11-29 12:44:49 3311
|
|
||||||
TACACSD EXEC W1 V 77 1995-06-09 17:35:30 5358
|
|
||||||
RACROUTE ASSEMBLE W1 F 1024 1994-09-27 14:08:04 8185
|
|
||||||
RACROUTE MODULE W1 V 2120 1993-11-08 14:30:55 1684
|
|
||||||
TALK EXEC W1 V 93 1994-12-07 14:22:05 10087
|
|
||||||
EC2AC EXEC W1 F 80 1994-08-17 12:39:07 958
|
|
||||||
AC2EC EXEC W1 F 80 1994-08-17 12:22:55 958
|
|
||||||
WRITE EXEC W1 V 115 1994-02-16 13:53:35 4111
|
|
||||||
NFTP EXEC W1 V 95 1993-10-20 16:20:40 4594
|
|
||||||
TALKD EXEC W1 V 130 1993-07-17 11:11:04 4620
|
|
||||||
SYSLOGD EXEC W1 V 78 1995-06-09 17:41:32 3708
|
|
||||||
TCPLOGD NAMES W1 V 75 1995-06-09 17:47:27 985
|
|
||||||
NFSUTIL EXEC W1 F 80 1995-06-09 17:48:24 20226
|
|
||||||
@ -1,609 +0,0 @@
|
|||||||
TCP/IP Socket support function for REXX (Rxsocket & Rexxwait)
|
|
||||||
Arty Ecock <eckcu@cunyvm.cuny.edu>
|
|
||||||
CUNY
|
|
||||||
|
|
||||||
|
|
||||||
Last revised: 17 February 1993
|
|
||||||
|
|
||||||
This file contains tips for converting applications from
|
|
||||||
RXSOCKET Version 1 to RXSOCKET Version 2.
|
|
||||||
|
|
||||||
A word about defaults:
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
RXSOCKET Version 2 reads the TCPIP DATA file in order to establish
|
|
||||||
non-default values for such things as the TCP/IP server userid,
|
|
||||||
the Name Server IP addresses to use for name resolution, the local
|
|
||||||
Domain Origin, Resolver Timeout value, etc.
|
|
||||||
|
|
||||||
If the TCPIP DATA file is *NOT* available, the following defaults are
|
|
||||||
used:
|
|
||||||
|
|
||||||
TCPIPuserid TCPIP
|
|
||||||
HostName (the value returned from the TCPIP server)
|
|
||||||
DomainOrigin (null string)
|
|
||||||
NSinterAddr 14.0.0.0
|
|
||||||
NSportAddr 53
|
|
||||||
ResolveVia UDP
|
|
||||||
ResolverTimeout 30
|
|
||||||
ResolverUdpRetries 1 (not fully supported; soon, though)
|
|
||||||
|
|
||||||
The value of "TCPIPuserid" can be overridden by specifying a value for
|
|
||||||
the fourth argument of an "Initialize" subfunction:
|
|
||||||
|
|
||||||
Parse Value Socket('Initialize', 'Test', 40, 'TCPIPTST') With rc ...
|
|
||||||
-or-
|
|
||||||
Parse Value Socket('Initialize', 'Test', ,'TCPIPTST') With rc ...
|
|
||||||
|
|
||||||
RXSOCKET Version 2 uses a specific hierarchy when searching for an
|
|
||||||
appropriate set of ASCII/EBCDIC translate tables. Using the example
|
|
||||||
"Initialize" subfunction above, the following translate tables are
|
|
||||||
sought: (the first table found is used)
|
|
||||||
|
|
||||||
1) "TEST TCPXLBIN *". Note that the socket-set name "Test" has
|
|
||||||
been upper-cased.
|
|
||||||
|
|
||||||
2) If not found, RXSOCKET searches for "userid TCPXLBIN *", where
|
|
||||||
"userid" is the VM userid using RXSOCKET.
|
|
||||||
|
|
||||||
3) If not found, RXSOCKET searches for "STANDARD TCPXLBIN *".
|
|
||||||
(STANDARD TCPXLBIN is usually supplied with VM TCP/IP on the
|
|
||||||
TCPMAINT 592 minidisk.)
|
|
||||||
|
|
||||||
4) Then "RXSOCKET TCPXLBIN *". These tables are *IDENTICAL* to
|
|
||||||
the tables that are hard-coded into RXSOCKET.
|
|
||||||
|
|
||||||
RXSOCKET TCPXLATE contains the source version of these translate
|
|
||||||
tables. This file is converted to RXSOCKET TCPXLBIN by using the
|
|
||||||
CONVXLAT MODULE supplied with TCP/IP (on the TCPMAINT 592 disk).
|
|
||||||
|
|
||||||
RXSOCKET TCPXLATE and STANDARD TCPXLATE can be used as templates
|
|
||||||
for cistomizing your own translate tables.
|
|
||||||
|
|
||||||
5) If none of these tables are found, an internal set of ASCII/EBCDIC
|
|
||||||
translate tables are used.
|
|
||||||
|
|
||||||
STANDARD TCPXLBIN is usually suitable for most applications. Problems
|
|
||||||
with square brackets, for example, can usually be overcome by creating
|
|
||||||
a customized TCPXLBIN file.
|
|
||||||
|
|
||||||
|
|
||||||
A word about the format of the new result string:
|
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
In RXSOCKET, the result of a SOCKET function call is always a character
|
|
||||||
string. This string usually contains several items. The first item
|
|
||||||
will always be a return code value. A return code of "0" indicates that
|
|
||||||
the function call completed without error. The remaining items in the
|
|
||||||
result string contain function-specific values.
|
|
||||||
|
|
||||||
Example 1:
|
|
||||||
Parse Value Socket('Initialize', 'Test') With rc sockset count server
|
|
||||||
|
|
||||||
might yield:
|
|
||||||
|
|
||||||
rc = "0" Return code "0" (Success)
|
|
||||||
sockset = "Test" The name of this socket-set
|
|
||||||
count = "40" Default number of sockets available
|
|
||||||
server = "TCPIP" Default TCP/IP server userid
|
|
||||||
|
|
||||||
Example 2:
|
|
||||||
Call Socket 'Initialize', 'Test'
|
|
||||||
Parse Var result rc sockset count server
|
|
||||||
|
|
||||||
should yield the same values. (Remember that the "result" variable
|
|
||||||
is set by REXX when you "Call" a REXX function.)
|
|
||||||
|
|
||||||
If the return code value is other than "0", an error is indicated. In
|
|
||||||
such a case, the second item in the result string corresponds to an
|
|
||||||
"Errno Value" as described in Chapter 3 of the IBM TCP/IP Programmer's
|
|
||||||
Reference manual. "EBADF", "EWOULDBLOCK", "EFAULT", "ENOPROTOOPT" and
|
|
||||||
"EINVALIDRXSOCKETCALL" are a few of the possible values. The remaining
|
|
||||||
items (words) of the result string describe the error in more
|
|
||||||
understandable terms (I hope).
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
"9 EBADF Bad file number"
|
|
||||||
"35 EWOULDBLOCK Operation would block"
|
|
||||||
"36 EINPROGRESS Operation now in progress"
|
|
||||||
"60 ETIMEDOUT Connection timed out"
|
|
||||||
"61 ECONNREFUSED Connection refused"
|
|
||||||
|
|
||||||
Note that rc=36 is not necessarily an error condition.
|
|
||||||
"EINPROGRESS" may be returned for certain operations on non-blocking
|
|
||||||
sockets.
|
|
||||||
|
|
||||||
See Chapter 3 of the IBM TCP/IP Programmer's Reference manual for
|
|
||||||
information on which "Errno Values" correspond to which socket calls.
|
|
||||||
|
|
||||||
Thus, you must take care when parsing the result of a RXSOCKET
|
|
||||||
subfunction. Using a trailing "." on a "Parse" statement may cause
|
|
||||||
you to lose the descriptive text in the case of an error.
|
|
||||||
|
|
||||||
Example 1:
|
|
||||||
Parse Value Socket('Close', socket) With rc .
|
|
||||||
|
|
||||||
If "rc" was not "0" then the "Errno Value" and descriptive text of
|
|
||||||
the error will be lost.
|
|
||||||
|
|
||||||
Example 2:
|
|
||||||
Parse Value Socket('Close', socket) With rc rest
|
|
||||||
|
|
||||||
In this case, the "rest" variable will contain both
|
|
||||||
"Errno Value" and descriptive text when rc is not "0".
|
|
||||||
|
|
||||||
Example 3:
|
|
||||||
Parse Value Socket('Close', socket) With result
|
|
||||||
Parse Var result rc .
|
|
||||||
If rc^=0 Then Do
|
|
||||||
Parse Var result errno errno_value errno_text
|
|
||||||
...
|
|
||||||
End
|
|
||||||
|
|
||||||
-or-
|
|
||||||
|
|
||||||
Call Socket 'Close', socket
|
|
||||||
Parse Var result rc .
|
|
||||||
If rc^=0 Then Do
|
|
||||||
Parse Var result errno errno_value errno_text
|
|
||||||
...
|
|
||||||
End
|
|
||||||
|
|
||||||
This is fine if you like to use many "Parse" statements.
|
|
||||||
|
|
||||||
Example 4:
|
|
||||||
Parse Value Socket('Close', socket) With result
|
|
||||||
If Word(result,1)^=0 Then Do
|
|
||||||
Say TcpError("Error during Close")
|
|
||||||
Call Exit
|
|
||||||
End
|
|
||||||
|
|
||||||
-or-
|
|
||||||
|
|
||||||
Parse Value Socket('Close', socket) With rc .
|
|
||||||
If rc^=0 Then Do
|
|
||||||
Say TcpError("Error during Close")
|
|
||||||
Call Exit
|
|
||||||
End
|
|
||||||
|
|
||||||
The former is nice, but the latter is my personal favorite.
|
|
||||||
The "TcpError" call in this example would yield:
|
|
||||||
|
|
||||||
"Error during Close:" errno_text
|
|
||||||
|
|
||||||
where "errno_text" is the descriptive text associated with the
|
|
||||||
errno value.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
"Error during Close: Bad file number"
|
|
||||||
|
|
||||||
There's also less parsing, fuss, and mess with this example.
|
|
||||||
|
|
||||||
|
|
||||||
Comparison of RXSOCKET Version 2 functions to Version 1
|
|
||||||
-------------------------------------------------------
|
|
||||||
|
|
||||||
The Version 2 function and result string will be listed first,
|
|
||||||
followed by the Version 1 function call.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Initialize', subtaskid, <maxdesc>, <serverid>)
|
|
||||||
result: rc subtaskid maxdesc serverid
|
|
||||||
|
|
||||||
Version1: rc = Socket('Initialize', subtaskid, serverid, maxdesc)
|
|
||||||
|
|
||||||
Note: "maxdesc" and "serverid" have swapped places in
|
|
||||||
RXSOCKET Version 2.
|
|
||||||
"rc" is no longer set to the "maxdesc" value.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Accept', socket)
|
|
||||||
result: rc newsocket name
|
|
||||||
|
|
||||||
Version1: rc = Socket('Accept', socket, name)
|
|
||||||
|
|
||||||
Note: "name" has been moved into the result string.
|
|
||||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
|
||||||
"rc" is no longer set to the "newsocket" number.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Bind', socket, name)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('Bind', socket, name)
|
|
||||||
|
|
||||||
Note: "name" is now specified as "AF_INET port ipaddr|hostname"
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
"AF_INET INPORT_ANY CUNYVM"
|
|
||||||
"AF_INET 123 CUNYVM.CUNY.EDU"
|
|
||||||
"AF_INET 0 CUNYVM.CUNY.EDU"
|
|
||||||
"AF_INET 42 128.228.1.2"
|
|
||||||
"AF_INET 12 INADDR_ANY"
|
|
||||||
"AF_INET"
|
|
||||||
"AF_INET 77"
|
|
||||||
"AF_INET INPORT_ANY INADDR_ANY"
|
|
||||||
"AF_INET INPORT_ANY ANY"
|
|
||||||
"AF_INET ANY ANY"
|
|
||||||
"AF_INET 23 LOOPBACK"
|
|
||||||
"AF_INET INPORT_ANY INADDR_BROADCAST"
|
|
||||||
"AF_INET INPORT_ANY BROADCAST"
|
|
||||||
|
|
||||||
You get the idea :-)
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Close', socket)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('Close', socket)
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Connect', socket, name)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('Connect', socket, name)
|
|
||||||
|
|
||||||
Note: "name" is now specified as "AF_INET port ipaddr|hostname".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Fcntl', socket, cmd, <data>)
|
|
||||||
result: rc <data>
|
|
||||||
|
|
||||||
Version1: rc = Socket('Fcntl', socket, cmd, data)
|
|
||||||
|
|
||||||
Note: "Blocking" and "Non-Blocking" have been added as
|
|
||||||
permissible values for "data".
|
|
||||||
"rc" is no longer set to the value of "data" (in the
|
|
||||||
case of "F_GETFL").
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetClientId', <domain>)
|
|
||||||
result: rc clientid
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetClientId', domain, clientid)
|
|
||||||
|
|
||||||
Note: "clientid" has been moved into the result string.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetDomainName')
|
|
||||||
result: rc domain
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
The Version 1 GetHostName used to append the domain
|
|
||||||
origin to the host name. The "GetDomainName" subfunction
|
|
||||||
has been added to return the domain origin string.
|
|
||||||
"GetHostName" has been changed to return just the host
|
|
||||||
name.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetDTableSize') not implemented in RXSOCKET Version 2
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetDTableSize')
|
|
||||||
|
|
||||||
The number of sockets for a specified socket set may be
|
|
||||||
obtained using the "SocketSetStatus" subfunction. The
|
|
||||||
number of sockets is also returned in the result string
|
|
||||||
of the "Initialize" subfunction.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetHostByAddr', ipaddr)
|
|
||||||
result: rc hostname
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetHostByAddr', hostaddr, hostname)
|
|
||||||
|
|
||||||
Note: "hostname" has been moved into the result string.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetHostByName', hostname)
|
|
||||||
result: rc ipaddr1 ipaddr2 ... ipaddrN
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetHostByName', hostname)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the "ipaddr" value. The
|
|
||||||
result string may contain a list of "ipaddr" values.
|
|
||||||
If the specified hostname is not multi-homed, then
|
|
||||||
a single "ipaddr" value is returned (in the form:
|
|
||||||
"nnn.nnn.nnn.nnn").
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetHostId')
|
|
||||||
result: rc ipaddr
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetHostId')
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the "ipaddr" value.
|
|
||||||
"ipaddr" is returned in the form "nnn.nnn.nnn.nnn".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetHostName')
|
|
||||||
result: rc hostname
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetHostName', hostname)
|
|
||||||
|
|
||||||
Note: "hostname" has been moved into the result string.
|
|
||||||
"hostname" is returned as the "HostName" value from
|
|
||||||
TCPIP DATA (or the value obtained from the TCPIP
|
|
||||||
server) *WITHOUT* the Domain Origin string appended.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetPeerName', socket)
|
|
||||||
result: rc name
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetPeerName', socket, name)
|
|
||||||
|
|
||||||
Note: "name" has been moved into the result string.
|
|
||||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetProtoByName', protocol_name)
|
|
||||||
result: rc protocol_number
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetProtoByNumber', protocol_number)
|
|
||||||
result: rc protocol_name
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetServByName', service_name, <service_protocol>)
|
|
||||||
result: rc service_name service_port service_protocol
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
*All* values listed in RFC1340 for "service_name" are
|
|
||||||
supported. See "well known ports" in RFC1340.
|
|
||||||
|
|
||||||
function: Socket('GetServByPort', service_port, <service_protocol>)
|
|
||||||
result: rc service_name service_port service_protocol
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
*All* values listed in RFC1340 for "service_port" are
|
|
||||||
supported. See "well known ports" in RFC1340.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetSockName', socket)
|
|
||||||
result: rc name
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetSockName', socket, name)
|
|
||||||
|
|
||||||
Note: "name" has been moved into the result string.
|
|
||||||
"name" is now returned as "AF_INET port nnn.nnn.nnn.nnn".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GetSockOpt', socket, level, optname)
|
|
||||||
result: rc optval
|
|
||||||
|
|
||||||
Version1: rc = Socket('GetSockOpt', socket, level, optname, optval)
|
|
||||||
|
|
||||||
Note: "optval" has been moved into the result string.
|
|
||||||
Values for "optval" are now returned in a more
|
|
||||||
human-usable format.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('GiveSocket', socket, clientid)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('GiveSocket', socket, clientid)
|
|
||||||
|
|
||||||
Note: This subfunction now works.
|
|
||||||
"clientid" is now specified as "AF_INET subtaskid userid".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Ioctl', socket, cmd, <data>)
|
|
||||||
result: rc <data>
|
|
||||||
|
|
||||||
Version1: rc = Socket('Ioctl', socket, cmd, data)
|
|
||||||
|
|
||||||
Note: This subfunction now works.
|
|
||||||
Values for "data" are now accepted and returned in a
|
|
||||||
more human-usable format.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Listen', socket, <backlog>)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('Listen', socket, backlog)
|
|
||||||
|
|
||||||
Note: "backlog" now defaults to "10".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Path') removed from RXSOCKET Version 2
|
|
||||||
|
|
||||||
Version1: rc = Socket('Path', subtaskid)
|
|
||||||
|
|
||||||
Note: This function has been renamed to "SocketSet".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Read', socket, <length>)
|
|
||||||
result: rc length data
|
|
||||||
|
|
||||||
Version1: rc = Socket('Read', socket, data, length)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes read.
|
|
||||||
"length" defaults to "10000", with a maximum value
|
|
||||||
of "100000".
|
|
||||||
"data" has been moved into the result string.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Recv', socket, <length>, <flags>)
|
|
||||||
result: rc length data
|
|
||||||
|
|
||||||
Version1: rc = Socket('Recv', socket, data, length, flags)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes read.
|
|
||||||
"length" defaults to "10000", with a maximum value
|
|
||||||
of "100000".
|
|
||||||
"data" has been moved into the result string.
|
|
||||||
"flags" may now contain more than a single value.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('RecvFrom', socket, <length>, <flags>)
|
|
||||||
result: rc name length data
|
|
||||||
|
|
||||||
Version1: rc = Socket('RecvFrom', socket, data, length, flags, name)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes read.
|
|
||||||
"length" defaults to "10000", with a maximum value
|
|
||||||
of "100000".
|
|
||||||
"data" has been moved into the result string.
|
|
||||||
"name" has been moved into the result string.
|
|
||||||
"flags" may now contain more than a single value.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Resolve', ipaddr|hostname, <timeout>)
|
|
||||||
result: rc ipaddr hostname
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
|
|
||||||
Note: I use "Resolve" instead of "GetHostByAddr" and
|
|
||||||
"GetHostByName" since "Resolve" does not care
|
|
||||||
whether its input is an IP address or a hostname.
|
|
||||||
"timeout" allows you to override the "ResolverTimeout"
|
|
||||||
value in TCPIP DATA.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Select', 'Read n Write n Exception n', <timeout>)
|
|
||||||
result: rc numready READ n n WRITE n n n EXCEPTION n
|
|
||||||
|
|
||||||
Version1: rc = Socket('Select', nfds, rmask, wmask, xmask, timeout)
|
|
||||||
|
|
||||||
Note: All the bitmask manipulation functions (FD_SET, FD_CLR,
|
|
||||||
etc.) have been removed.
|
|
||||||
Specifying "0" as a value for "n" still refers to the
|
|
||||||
console ("Read 0" means, "wait for a Console Attention").
|
|
||||||
REXXWAIT is far superior in function to "Select"
|
|
||||||
("Wait('Cons Time 5 Seconds Socket' socket 'SMSG')" is
|
|
||||||
certainly lots more versatile.)
|
|
||||||
"Select" is handy for applications that don't require
|
|
||||||
enhanced "wait" facilities.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Send', socket, data, <flags>)
|
|
||||||
result: rc length
|
|
||||||
|
|
||||||
Version1: rc = Socket('Send', socket, data, flags)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('SendTo', socket, data, <flags>, name)
|
|
||||||
result: rc length
|
|
||||||
|
|
||||||
Version1: rc = Socket('SendTo', socket, data, flags, name)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
|
||||||
"name" is now specified as "AF_INET port ipaddr|hostname".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('SetSockOpt', socket, level, optname, optval)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('SetSockOpt', socket, level, optname, optval)
|
|
||||||
|
|
||||||
Note: "optval" can now be expressed in a more human-usable
|
|
||||||
format.
|
|
||||||
An "optname" of "SO_ASCII" indicates that the data
|
|
||||||
flowing across the socket should be "ASCII". Please
|
|
||||||
note that RXSOCKET Version 1 used "SO_EBCDIC" for
|
|
||||||
this purpose. "SO_EBCDIC" now indicates that the
|
|
||||||
data flowing across the socket is EBCDIC and is to
|
|
||||||
be treated as such. "So_ASCII" set to "On" forces
|
|
||||||
data translation to and from EBCDIC (thus allowing
|
|
||||||
ASCII data to flow across the socket).
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('ShutDown', socket, <how>)
|
|
||||||
result: rc
|
|
||||||
|
|
||||||
Version1: rc = Socket('ShutDown', socket, how)
|
|
||||||
|
|
||||||
Note: "how" now defaults to "BOTH" (instead of "FROM").
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Socket', <domain>, <type>, <protocol>)
|
|
||||||
result: rc newsocket
|
|
||||||
|
|
||||||
Version1: rc = Socket('Socket', domain, type, protocol)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the value of "newsocket".
|
|
||||||
"domain" defaults to "AF_INET".
|
|
||||||
"type" defaults to "Sock_Stream".
|
|
||||||
"protocol" defaults to "IPPROTO_TCP".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('SocketSet', <subtaskid>)
|
|
||||||
result: rc subtaskid
|
|
||||||
|
|
||||||
Version1: rc = Socket('Path', subtaskid)
|
|
||||||
|
|
||||||
Note: When switching to a new socket set, the name of the
|
|
||||||
previously active socket set is returned. This makes
|
|
||||||
it easier to switch back if switching between many
|
|
||||||
socket sets. If switching between 2 socket sets,
|
|
||||||
you needn't bother remembering the previously active
|
|
||||||
socket set name, since RXSOCKET maintains socket sets
|
|
||||||
on a push-down stack in Least Recently Used order.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('SocketSetList')
|
|
||||||
result: rc subtaskid1 subtaskid2 ... subtaskidN
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('SocketSetStatus', <subtaskid>)
|
|
||||||
result: rc subtaskid status <connectinfo>|<reason>
|
|
||||||
|
|
||||||
No corresponding RXSOCKET Version 1 subfunction.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('TakeSocket', clientid, hissocket)
|
|
||||||
result: rc newsocket
|
|
||||||
|
|
||||||
Version1: rc = Socket('TakeSocket', clientid, hissocket)
|
|
||||||
|
|
||||||
Note: This subfunction now works.
|
|
||||||
"rc" is no longer set to the value of "newsocket".
|
|
||||||
"clientid" is now specified as "AF_INET subtaskid userid".
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Terminate', <subtaskid>)
|
|
||||||
result: rc subtaskid
|
|
||||||
|
|
||||||
Version1: rc = Socket('Terminate', subtaskid)
|
|
||||||
|
|
||||||
Note: if "subtaskid" is omitted, the "active" socket set
|
|
||||||
is terminated. In any case, the name of the terminated
|
|
||||||
socket set is returned in the result string.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Version')
|
|
||||||
result: rc REXX/SOCKETS version date
|
|
||||||
|
|
||||||
rs = Socket('Version')
|
|
||||||
|
|
||||||
Note: "rs" is similar in format to the result string.
|
|
||||||
The associated "version" values. of course, differ.
|
|
||||||
|
|
||||||
|
|
||||||
function: Socket('Write', socket, data)
|
|
||||||
result: rc length
|
|
||||||
|
|
||||||
Version1: rc = Socket('Write', socket, data)
|
|
||||||
|
|
||||||
Note: "rc" is no longer set to the number of bytes transmitted.
|
|
||||||
|
|
||||||
|
|
||||||
A word from your sponsors:
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
Rainer and I worked long and hard on this collaboration. We hope it
|
|
||||||
was a successful one. We love feedback, comments and suggestions.
|
|
||||||
I personally prefer chocolate.
|
|
||||||
|
|
||||||
Please let us know if you run into any problems with REXX/SOCKETS.
|
|
||||||
|
|
||||||
Cheers,
|
|
||||||
Arty Ecock - CUNY/UCC
|
|
||||||
Rainer Hauser - IBM, Zurich
|
|
||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user