home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
com
/
utils
/
lw21
/
host.cmd
< prev
next >
Wrap
OS/2 REXX Batch file
|
1993-12-16
|
17KB
|
613 lines
/**
**
** LiveWire 2.1 Host Mode
** REXX procedures language version
**
** You may modify this script file to meed your needs
**
**/
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
/* Return to this point if carrier lost */
LostCarrier:
SetLW(TimeOut,60);
/*Trace I; */ /* Uncomment for debug tracing */
/** Current User Information **/
Name=""
Password=""
Address1=""
Address2=""
PhoneNumber=""
/** Host Mode Configuration Information **/
MessageDir=".\HSTMSGS"
FileDir=".\HSTFILES"
SysopPassword="PASSWORD"
MaxTime=60
LockPort=GetLW(LockedPort);
OldSpeed=GetLW(Speed);
/** Global Variables **/
LogonName=""
LogonPassword=""
/* Check for LOCAL flag */
if (Translate(Arg(1))=='LOCAL') then
SetLW(LocalOnly, On);
else
SetLW(LocalOnly,Off);
/* Main Host Loop */
do forever
LogLW("Host Mode Initiated");
SetLW(FGColor,15);
SetLW(BGColor,1);
ClrScrLW();
SetLW(Speed,OldSpeed);
HangUpLW();
SendLW("AT^M");
DispLW("LiveWire Host / CTRL-BREAK to halt");
if (stream("HOST.CFG",C,"query exists")="") then
MakeConfig();
if (stream("HOST.USR",C,"query exists")="") then
MakeUserList();
ReadConfigFile();
SysMkDir(MessageDir);
SysMkDir(FileDir);
if (GetLW(LocalOnly)) then
Logon();
else do
LogLW("Awaiting a caller");
WaitForRing();
if (DoConnect()) then
Logon();
end
end
exit
WaitForRing:
OldTimeOut=GetLW(TimeOut);
SetLW(TimeOut,0);
x=FindLW("RING");
SetLW(TimeOut,OldTimeOut);
return "";
DoConnect:
/* Send ATA to answer modem */
SendLW("ATA^M");
/* First, see if we have a locked port */
if LockPort then
do
/* LOCKED PORT, DO NOT CHANGE BPS RATE ON CONNECT */
q=FindLW("CONNECT", "NO CARRIER");
if (q=="CONNECT") then
return 1;
else
return 0;
end
else
do
/* Non-Locked port, attempt to parse bps rate */
q=FindLW("CONNECT^M", "CONNECT 1200", "CONNECT 2400",
,"CONNECT 4800", "CONNECT 9600", "CONNECT 19200",
,"CONNECT 38400", "CONNECT 14400", "NO CARRIER");
if (q="CONNECT"||D2C(13)) then
SetLW(Speed, 300);
else
if (q="CONNECT 1200") then
SetLW(Speed, 1200);
else
if (q="CONNECT 2400") then
SetLW(Speed, 2400);
else
if (q="CONNECT 4800") then
SetLW(Speed, 4800);
else
if (q="CONNECT 9600") then
SetLW(Speed, 19200);
else
if (q="CONNECT 38400") then
SetLW(Speed, 38400);
else
if (q="CONNECT 14400") then
SetLW(Speed, 14400);
else
return 0;
return 1;
end
Logon:
/* First, make sure modem is clear before logon */
DelayLW(500);
FlushBufferLW();
SetLW(EchoBack,On);
DiseFile("WELCOME");
LogonName="";
/* Get users' name */
Done=0;
do until (Done)
DiseLW("^M^JEnter your full name > ");
LogonName=Translate(HostReadString("",40));
if (LogonName = "") then Done=0;
else Done=1;
end /* do */
/* Get user record from host user file */
q=stream("HOST.USR",C,"open");
Done=0;
Name="";
do until (Name=LogonName | Lines("HOST.USR")=0)
Name=LineIn("HOST.USR");
Password=LineIn("HOST.USR");
Address1=LineIn("HOST.USR");
Address2=LineIn("HOST.USR");
PhoneNumber=LineIn("HOST.USR");
end /* do */
if (Name=LogonName) then do
LogLW("User Called " Name);
LogonPassword="";
/* Verify caller's password */
do until (LogonPassword=Password)
DiseLW("^M^JEnter your password >");
SetLW(EchoBack, 0);
LogonPassword=Translate(HostReadString("", 40));
SetLW(EchoBack, 1);
end /* do */
end /* Do */
else
do
/* If we could not find username, this must be a new user! */
LogLW("New User Validated");
Name=LogonName;
DiseFile("NEWUSER");
PhoneNumber="";
Address1="";
Address2="";
DiseLW("^M^JPlease fill out the following information for our records^M^J");
DiseLW("Phone Number : ");
PhoneNumber=HostReadString("",40);
DiseLW("^M^JStreet Address : ");
Address1=HostReadString("",70);
DiseLW("^M^JCity, State & ZIP : ");
Address2=HostReadString("",70);
DiseLW("^M^J^M^JYou must now enter a password for your account on this system.^M^J");
DiseLW("If you do not wish to have a password, just press ENTER.^M^J");
Retry="1";
Password="2";
do until (Retry=Password)
DiseLW("^M^JPassword : ");
Password=Translate(HostReadString("",30));
DiseLW("^M^JRe-enter your password for verification : ");
Retry=Translate(HostReadString("",30));
end /* do */
DiseLW("^M^J^M^JThank you...");
/* Write new user information to disk */
q=LineOut("HOST.USR",Name);
q=LineOut("HOST.USR",Password);
q=LineOut("HOST.USR",Address1);
q=LineOut("HOST.USR",Address2);
q=LineOut("HOST.USR",PhoneNumber);
end /* Do */
/* Close user file */
q=stream("HOST.USR","c","close");
MainMenu:
DoHangup=0;
do until (DoHangup)
Option=""
DiseFile("MAINMENU");
DiseLW("Select a function: ");
Option=Translate(HostReadChar());
DiseLW("^M^J");
if Option="H" then DoHangup=1;
if Option="F" then ShowFiles();
if Option="U" then UploadFile();
if Option="D" then DownloadFile();
if Option="P" then PageSysop();
if Option="R" then ReadMessages();
if Option="S" then SendMessage();
if Option="O" then OperatorFuncs();
end;
EndLogon:
LogLW("User Hung Up Normally");
DiseLW("^M^J^M^JThank you for calling... (click)^M^J^M^J");
SetLW(EchoBack,Off);
DelayLW(250);
HangUpLW();
SleepLW(1);
FlushBufferLW();
return "";
OperatorFuncs:
OpPswd=""
OpOption=""
DiseLW("^M^J^M^JEnter system operator password: ");
SetLW(EchoBack,Off);
OpPswd=Translate(HostReadString("",40));
SetLW(EchoBack,On);
if OpPswd=SysopPassword then do
LogLW("User Entered Sysop Operations");
QuitSysop=0;
do until (QuitSysop)
DiseLW("^M^J^M^JSystem Operator Functions^M^J^M^J");
DiseLW("^M^J1. Change Message Directory : " MessageDir);
DiseLW("^M^J2. Change File Directory : " FileDir);
DiseLW("^M^J3. Locked Baud Rate (0=No) : " LockPort);
DiseLW("^M^J4. Change Sysop Password : " SysopPassword);
DiseLW("^M^JS Save these options");
DiseLW("^M^JQ Quit without saving^M^J^M^J");
DiseLW("Select option: ");
OpOption=Translate(HostReadChar());
DiseLW("^M^J");
if OpOption="1" then OpGetMsgDir();
if OpOption="2" then OpGetFileDir();
if OpOption="3" then OpGetLockPort();
if OpOption="4" then OpGetPassword();
if OpOption="S" then OpSaveConfig();
if OpOption="Q" then OPQuitConfig();
end
end
return "";
OpGetMsgDir:
DiseLW("Edit message directory (DO NOT END WITH A BACKSLASH)^M^J");
DiseLW("> ");
MessageDir=HostReadString(MessageDir,70);
return "";
OpGetFileDir:
DiseLW("Edit files directory (DO NOT END WITH A BACKSLASH)^M^J");
DiseLW("> ");
FileDir=HostReadString(FileDir,70);
return "";
OpGetLockPort:
DiseLW("Edit locked baud rate (1=on 0=off)^M^J");
DiseLW("> ");
LockPort=GetLW(LockedPort);
LockPort=HostReadString(LockPort,3);
SetLW(LockedPort, LockPort);
return "";
OpGetPassword:
DiseLW("Edit sysop password^M^J");
DiseLW("> ");
SysopPassword=Translate(HostReadString(SysopPassword,70));
return "";
OpSaveConfig:
DiseLW("Saving...");
MakeConfig();
DiseLW("^M^J^M^J");
QuitSysop=1;
return "";
OpQuitConfig:
ReadConfigFile();
DiseLW("^M^J^M^J");
QuitSysop=1;
return "";
SendMessage:
MaxMessage=0
ThisMessage=0
MsgFileName=""
MsgLine=""
MsgOption=""
LogLW("User began a message");
if (stream(MessageDir||"\HOST.MSG",C,"query exists")\="") then do
q=stream(MessageDir||"\HOST.MSG",C,"open");
MaxMessage=LineIn(MessageDir||"\HOST.MSG");
q=stream(MessageDir||"\HOST.MSG",C,"close");
end /* Do */
MaxMessage=MaxMessage + 1;
ThisMessage=MaxMessage;
MsgFileName=MessageDir||"\MESSAGE."||ThisMessage;
q=stream(MsgFileName, C, "open");
DiseLW("^M^J^M^JEnter your message");
DiseLW("^M^JEnd your message by placing a period (.) alone on the last line^M^J");
DiseLW("----------------------------------------------------------------------------^M^J");
q=LineOut(MsgFileName, "------------------------------");
q=LineOut(MsgFileName, " Message #"||ThisMessage);
q=LineOut(MsgFileName, " From :"||Name);
q=LineOut(MsgFileName, "------------------------------");
q=LineOut(MsgFileName, "^M^J");
FinishedMessage=0;
LineNo=1;
do until(FinishedMessage)
DiseLW(LineNo||"> ");
MsgLine=HostReadString("",75);
DiseLW("^M^J");
if (MsgLine=".") then FinishedMessage=1;
q=LineOut(MsgFileName, MsgLine);
LineNo=LineNo+1;
end
FinishedMessage=0;
do until (FinishedMessage)
DiseLW("^M^JMessage Ended^M^J");
DiseLW("[S]ave Message [A]bort Message : ");
MsgOption=Translate(HostReadChar());
DiseLW("^M^J");
if MsgOption="S" then SaveMessage();
if MsgOption="A" then AbortMessage();
end /* do */
return "";
SaveMessage:
FinishedMessage=1;
q=LineOut(MsgFileName,"------------------------------");
q=stream(MsgFileName,C,"close");
"erase "||MessageDir||"\HOST.MSG"
q=stream(MessageDir||"\HOST.MSG",C,"open write");
q=LineOut(MessageDir||"\HOST.MSG", ThisMessage);
q=stream(MessageDir||"\HOST.MSG",C,"close");
return "";
Goto RetSendMessage
AbortMessage:
FinishedMessage=1;
"erase "||MsgFileName
return "";
ReadMessages:
MaxMessage=1
ThisMessage=1
MsgFileName=""
MsgOption=""
LogLW("User Read Messages");
if (stream(MessageDir||"\HOST.MSG",C,"query exists")="") then do
DiseLW("^M^JSorry, there are no messages.^M^J");
SleepLW(2);
return "";
end /* Do */
q=stream(MessageDir||"\HOST.MSG",C,"open read");
MaxMessage=LineIn(MessageDir||"\HOST.MSG");
q=stream(MessageDIR||"\HOST.MSG",C,"close");
DiseLW("^M^JMessages range from 1 to "||MaxMessage||"^M^J");
DiseLW("Enter message to start reading at : ");
ThisMessage=HostReadString(ThisMessage,3);
DiseLW("^M^J");
DoneReading=0;
do until (DoneReading)
MsgFileName=MessageDir||"\MESSAGE."||ThisMessage
if (stream(MsgFileName,C,"query exists")\="") then do
DiseFile(MsgFileName);
DiseLW("^M^J[ENTER] for next message or [Q] to quit : ");
MsgOption=HostReadChar();
DiseLW("^M^J");
if MsgOption="Q" then DoneReading=1;
end /* Do */
ThisMessage=ThisMessage+1;
if (ThisMessage>MaxMessage) then DoneReading=1;
end;
DiseLW("^M^JEnd of messages.^M^J");
SleepLW(2);
return "";
PageSysop:
LogLW("User Attempted To Page Sysop");
DiseLW("^M^JPaging operator, press Q to abort...^M^J");
DispLW("SYSOP: Press 'C' to chat^M^J");
StopPage=0;
OldTimeOut=GetLW(TimeOut);
SetLW(TimeOut,5);
do until (StopPage)
DispLW("");
Key=Translate(HostReadChar());
if Key="Q" then do
SetLW(TimeOut,OldTimeOut);
return "";
end /* Do */
if Key="C" then StopPage=1;
end
SetLW(TimeOut,0);
DiseLW("^M^J^M^J You are now in chat mode^M^J");
DispLW(" SYSOP: Type ~ (tilde character) on a blank line to end chat mode");
DispLW("^M^J^M^J");
LogLW("Sysop Answered Chat Request");
Key=""
do until Key="~"
Key=""
DiseLW(" ");
Key=HostReadString("",77);
DiseLW("^M^J");
end
SetLW(TimeOut,OldTimeOut);
return "";
UploadFile:
ULProtocol=""
ULFile=""
ULFile2=""
DiseFile("PROT");
DiseLW("Select protocol: ");
ULProtocol=Translate(HostReadChar());
/* Check if this is a batch upload... */
BatchUpload=0;
if ULProtocol="Y" then BatchUpload=1;
if ULProtocol="Z" then BatchUpload=1;
if ULProtocol="R" then BatchUpload=1;
if ULProtocol="G" then BatchUpload=1;
/* Set download directory if this a a batch upload */
if (BatchUpload) then do
OldDLDir=GetLW(DLDir);
SetLW(DLDir, FileDir);
end
else
do
DiseLW("^M^J^M^JName of file you are uploading: ");
ULFile=HostReadString(ULFile,77);
if ULFile="" then return "";
ULFile2=FileDir||"\"||ULFile;
end
DiseLW("^M^JStart your upload now...^M^J");
if (BatchUpload) then
ReceiveFilesLW(ULProtocol, "");
else
ReceiveFilesLW(ULProtocol,ULFile2);
/* Restore old download directory */
if (BatchUpload) then
SetLW(DLDir, OldDLDir);
SleepLW(1);
FlushBufferLW();
return "";
DownloadFile:
DLProtocol=""
DLFile=""
DLFile2=""
DiseFile("PROT");
DiseLW("Select protocol: ");
DLProtocol=HostReadChar();
DiseLW("^M^JName of file you are downloading: ");
DLFile=HostReadString("",77);
if DLFile\="" then do
DiseLW("^M^J");
DLFile2=FileDir||"\"||DLFile;
if (stream(DLFile2,C,"query exists")="") then do
DiseLW("^M^J^M^JThat file does not exist!^M^J");
SleepLW(2);
end /* Do */
else
do
DiseLW("Start download now...^M^J");
SendFilesLW(DLProtocol,DLFile2);
SleepLW(1);
FlushBufferLW();
LogLW("User downloaded file "||DLFile2);
end
end
return "";
ShowFiles:
"DIR "||FileDir||" >host.out"
DiseLW("^M^J^M^J");
DiseFile("HOST.OUT");
DiseLW("^M^JPress [ENTER]");
q=HostReadChar();
return "";
DiseFile:
arg DispFile
q=stream(DispFile,C,"open read");
do until lines(DispFile) = 0
DiseLW(linein(DispFile));
DiseLW("^M^J");
end /* do */
q=stream(DispFile,C,"close");
return "";
ReadConfigFile:
LogLW("Read Configuration File");
DispLW(" Reading configuration file...");
q=stream("HOST.CFG",C,"open read");
MessageDir=LineIn("HOST.CFG");
FileDir=LineIn("HOST.CFG");
SysopPassword=LineIn("HOST.CFG");
MaxTime=LineIn("HOST.CFG");
LockPort=LineIn("HOST.CFG");
q=stream("HOST.CFG",C,"close");
DispLW("OK^M^J");
return "";
MakeConfig:
LogLW("Created Configuration File");
DispLW(" Creating configuration file...");
"erase HOST.CFG"
q=stream("HOST.CFG",C,"open write");
q=LineOut("HOST.CFG", MessageDir);
q=LineOut("HOST.CFG", FileDir);
q=LineOut("HOST.CFG", SysopPassword);
q=LineOut("HOST.CFG", MaxTime);
q=LineOut("HOST.CFG", LockPort);
q=stream("HOST.CFG",C,"close");
DispLW("OK^M^J");
Return "";
MakeUserList:
LogLW("Created User File");
DispLW(" Creating user list file...");
q=stream("HOST.USR",C,"open write");
q=stream("HOST.USR",C,"close");
DispLW("OK^M^J");
Return "";
HostReadChar:
ReturnString=GetKeyLW();
if (ReturnString="TIMEOUT") | ((GetLW(Online)==0) & (\GetLW(LocalOnly))) then
Signal LostCarrier;
return ReturnString;
HostReadString:
arg StartString, MaxStrLen
ReturnString=GetStrLW(StartString, MaxStrLen);
if (ReturnString="TIMEOUT") | ((GetLW(Online)=0) & (\GetLW(LocalOnly))) then
Signal LostCarrier;
return ReturnString;