Thingamajig/modemctl.pas

119 lines
3.3 KiB
Plaintext
Raw Permalink Normal View History

2022-09-27 08:21:14 +00:00
program ModemCtl;
{$MODE OBJFPC}
uses SysUtils, StrUtils, Sockets;
type
//Connection state
Connection = record
Originate: boolean;
Answer: boolean;
Dial: boolean;
2022-09-27 08:21:14 +00:00
Addr: longword;
Port: word;
Hang: boolean;
end;
var
ConnVar: Connection; //State of the modem
ConnFile: file of Connection; //File storing the state of the modem
2022-09-27 08:21:14 +00:00
Addr: in_addr; //Temporary variable
begin
//Check the arguments
if ParamStr (1) = '-a' then begin
if ParamCount <> 2 then begin
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
halt (1);
end;
end
else if ParamStr (1) = '-d' then begin
if ParamCount <> 2 then begin
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
2022-09-27 08:21:14 +00:00
halt (1);
end;
end
else begin
if ParamCount > 1 then begin
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
2022-09-27 08:21:14 +00:00
halt (1);
end;
end;
//Assign the state file
assign (ConnFile, ExpandFileName ('~/.thingamajig/connection'));
2022-09-27 08:21:14 +00:00
//Set the connection
if ParamStr (1) = '-o' then begin
ConnVar.Originate := true;
ConnVar.Answer := false;
ConnVar.Dial := false;
ConnVar.Addr := 0;
ConnVar.Port := 0;
ConnVar.Hang := false;
end
else if ParamStr (1) = '-a' then begin
ConnVar.Originate := false;
ConnVar.Answer := true;
ConnVar.Dial := false;
2022-09-27 08:21:14 +00:00
try
Addr := StrToHostAddr (ExtractDelimited (1, ParamStr (2), [':']));
ConnVar.Addr := Addr.s_addr;
2022-09-27 08:21:14 +00:00
except
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
2022-09-27 08:21:14 +00:00
halt (1);
end;
try
ConnVar.Port := StrToInt (ExtractDelimited (2, ParamStr (2), [':']));
2022-09-27 08:21:14 +00:00
except
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
2022-09-27 08:21:14 +00:00
halt (1);
end;
ConnVar.Hang := false;
ConnVar.Hang := false;
2022-09-27 08:21:14 +00:00
end
else if ParamStr (1) = '-d' then begin
ConnVar.Originate := false;
ConnVar.Answer := false;
ConnVar.Dial := true;
try
Addr := StrToHostAddr (ExtractDelimited (1, ParamStr (2), [':']));
ConnVar.Addr := Addr.s_addr;
except
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
halt (1);
end;
try
ConnVar.Port := StrToInt (ExtractDelimited (2, ParamStr (2), [':']));
except
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
halt (1);
end;
ConnVar.Hang := false;
2022-09-27 08:21:14 +00:00
end
else if ParamStr (1) = '-h' then begin
ConnVar.Originate := false;
ConnVar.Answer := false;
ConnVar.Dial := false;
ConnVar.Addr := 0;
ConnVar.Port := 0;
ConnVar.Hang := true;
2022-09-27 08:21:14 +00:00
end
else begin
writeln ('Usage: modemctl -o/[-a address:port]/[-d address:port]/-h');
2022-09-27 08:21:14 +00:00
halt (1);
end;
//Write the state
try
rewrite (ConnFile);
write (ConnFile, ConnVar);
close (ConnFile);
2022-09-27 08:21:14 +00:00
except
writeln ('Error: could not set the connection');
end;
end.