jcs
/wifi_da
/amendments
/27
*: Add dialog to manually specify another/hidden SSID
jcs made amendment 27 23 days ago
--- README Sun Jan 28 00:05:35 2024
+++ README Tue Sep 17 20:46:39 2024
@@ -18,6 +18,11 @@ To install on System 6, use the Font/DA Mover utility:
There should now be a Wi-Fi option in the Apple menu.
+Change history:
+
+1.2 - 2024-09-18
+ - Add option to manually specify another (possibly hidden) SSID
+
1.1 - 2024-01-29
- Fix password entry in connection dialog on Mac OS 8+
--- wi-fi.h Sat Jan 27 23:43:26 2024
+++ wi-fi.h Tue Sep 17 20:22:36 2024
@@ -35,6 +35,9 @@
#define ABOUT_DIALOG_ID 2
+#define SSID_DIALOG_ID 3
+#define SSID_DIALOG_NAME_FIELD_ID 3
+
#define BLUESCSI_NETWORK_WIFI_CMD 0x1c
#define BLUESCSI_NETWORK_WIFI_CMD_SCAN 0x01
#define BLUESCSI_NETWORK_WIFI_CMD_COMPLETE 0x02
@@ -73,7 +76,8 @@ struct wifi_network_entry {
char rssi;
unsigned char channel;
unsigned char flags;
-#define WIFI_NETWORK_FLAG_AUTH 0x1
+#define WIFI_NETWORK_FLAG_AUTH (1 << 1)
+#define WIFI_NETWORK_FLAG_HIDDEN (1 << 2)
char _padding;
};
--- Wi-Fi DA.π.r Sun Jan 28 00:11:11 2024
+++ Wi-Fi DA.π.r Tue Sep 17 20:45:37 2024
@@ -8,7 +8,7 @@ data 'DITL' (-16000) {
$"5E30 5E31 5E32 5E33" /* ^0^1^2^3 */
};
-data 'DITL' (-15999, "CONNECT") {
+data 'DITL' (-15999, "PASSWORD") {
$"0005 0000 0000 0050 0136 0064 017F 0407" /* .......P.6.d.... */
$"436F 6E6E 6563 745B 0000 0000 0050 00E6" /* Connect[.....P.. */
$"0064 012F 0406 4361 6E63 656C 0000 0000" /* .d./..Cancel.... */
@@ -28,6 +28,17 @@ data 'DITL' (-15998, "ABOUT", purgeable, preload) {
$"0000 FFD8 0106 011E C002 C180" /* ...ÿ....¿.¡Ä */
};
+data 'DITL' (-15997, "SSID") {
+ $"0004 0000 0000 0041 0136 0055 017F 0408" /* .......A.6.U.... */
+ $"436F 6E74 696E 7565 0000 0000 0041 00E6" /* Continue.....A.. */
+ $"0055 012F 0406 4361 6E63 656C 0000 0000" /* .U./..Cancel.... */
+ $"0023 005A 0033 017D 1000 0000 0000 0023" /* .#.Z.3.}.......# */
+ $"000A 0033 0055 8805 5353 4944 3A00 0000" /* ...3.Uà.SSID:... */
+ $"0000 000A 000A 001C 0105 881D 456E 7465" /* ..........à.Ente */
+ $"7220 7468 6520 5769 2D46 6920 6E65 7477" /* r the Wi-Fi netw */
+ $"6F72 6B20 5353 4944 3A00" /* ork SSID:. */
+};
+
data 'MENU' (-15999) {
$"C181 0000 0000 0000 0000 FFFF FFFF 0557" /* ¡Å.............W */
$"692D 4669 0E41 626F 7574 2057 692D 4669" /* i-Fi.About Wi-Fi */
@@ -50,6 +61,12 @@ data 'DLOG' (-15998) {
$"0000 C182 0000 280A" /* ..¡Ç..(. */
};
+data 'DLOG' (-15997) {
+ $"0076 0036 00D4 01C4 0010 0000 0100 0000" /* .v.6.‘.ƒ........ */
+ $"0000 C183 0A57 692D 4669 2053 5349 4477" /* ..¡É.Wi-Fi SSIDw */
+ $"680A" /* h. */
+};
+
data 'SICN' (-16000) {
$"0000 6006 700E 3FFC 1FF8 3E7C 67E6 4FF2" /* ..`.p.?...>|g.O. */
$"1BD8 17E8 0FF0 1C38 399C 718E 6006 0000" /* .ÿ.....89úqé`... */
@@ -92,7 +109,7 @@ data 'BNDL' (-16000) {
};
data 'vers' (1) {
- $"0110 8000 0000 0331 2E31 2B31 2E31 20A9" /* ..Ä....1.1+1.1 © */
+ $"0120 8000 0000 0331 2E32 2B31 2E32 20A9" /* . Ä....1.2+1.2 © */
$"2032 3032 332D 3230 3234 2C20 6A6F 7368" /* 2023-2024, josh */
$"7561 2073 7465 696E 203C 6A63 7340 6A63" /* ua stein <jcs@jc */
$"732E 6F72 673E" /* s.org> */
@@ -531,7 +548,7 @@ data 'PICT' (-16000) {
};
data 'dast' (-16000) {
- $"5D76 312E 310D 4465 736B 2041 6363 6573" /* ]v1.1¬Desk Acces */
+ $"5D76 312E 320D 4465 736B 2041 6363 6573" /* ]v1.2¬Desk Acces */
$"736F 7279 2066 6F72 2042 6C75 6553 4353" /* sory for BlueSCS */
$"490D A920 3230 3234 2C20 6A6F 7368 7561" /* I© 2024, joshua */
$"2073 7465 696E 0D0D 5765 623A 2068 7474" /* stein¬¬Web: htt */
--- window.c Sat Jan 27 23:53:39 2024
+++ window.c Tue Sep 17 20:38:48 2024
@@ -20,6 +20,7 @@
#define NO_DEVICE_TEXT "\pNo Device Found"
#define NO_NETWORK_TEXT "(No Network)"
+#define OTHER_NETWORK_TEXT "(Other Network)"
#define DA_HEIGHT 25
#define DA_WIDTH 180
@@ -240,7 +241,7 @@ update_wifi_ssid_list(bool update_networks)
nwifi_menu_networks = nitems(wifi_menu_networks);
DEBUG_LOG(("capping nets to %d", nwifi_menu_networks));
}
-
+
/* add each additional network from the scan, excluding current */
for (n = 0, m = 1; n < nwifi_menu_networks; n++) {
if (strcmp(wifi_scan_networks[n].ssid,
@@ -258,9 +259,17 @@ update_wifi_ssid_list(bool update_networks)
nwifi_menu_networks = m;
- if (wifi_menu_networks[0].ssid[0] == '\0')
+ if (wifi_menu_networks[0].ssid[0] == '\0') {
strlcpy(wifi_menu_networks[0].ssid, NO_NETWORK_TEXT,
sizeof(wifi_menu_networks[0].ssid));
+ nwifi_menu_networks++;
+ }
+
+ /* keep "other network" as last entry */
+ strlcpy(wifi_menu_networks[nwifi_menu_networks - 1].ssid,
+ OTHER_NETWORK_TEXT, sizeof(wifi_menu_networks[0].ssid));
+ wifi_menu_networks[nwifi_menu_networks - 1].flags =
+ WIFI_NETWORK_FLAG_AUTH | WIFI_NETWORK_FLAG_HIDDEN;
/* leave the first item and we'll set its text later */
while (CountMItems(ssid_menu) > 1)
@@ -289,7 +298,7 @@ update_wifi_ssid_list(bool update_networks)
mitem++;
}
-
+
update_window(true);
}
@@ -325,8 +334,7 @@ destroy_window(void)
void
window_mousedown(Point p)
{
- Str255 password;
- char ssid[64];
+ Str255 password, ssid;
Rect r, irect;
GrafPtr savePort;
short mitems, n, selitem, hit, itype;
@@ -373,10 +381,46 @@ window_mousedown(Point p)
net = &wifi_menu_networks[loword(new_net) - 1];
memset(&wjr, 0, sizeof(wjr));
- strlcpy(wjr.ssid, net->ssid, sizeof(wjr.ssid));
+
+ if (net->flags & WIFI_NETWORK_FLAG_HIDDEN) {
+ dg = GetNewDialog(OwnedResourceID(SSID_DIALOG_ID), 0L,
+ (WindowPtr)-1L);
+ center_in_screen(((DialogPeek)dg)->window.port.portRect.right,
+ ((DialogPeek)dg)->window.port.portRect.bottom, false, &r);
+ MoveWindow(dg, r.left, r.top, false);
+
+ ShowWindow(dg);
+ SetPort(dg);
+
+ /* outline continue button */
+ GetDItem(dg, ok, &itype, &ihandle, &irect);
+ PenSize(3, 3);
+ InsetRect(&irect, -4, -4);
+ FrameRoundRect(&irect, 16, 16);
+ PenNormal();
+
+ for (;;) {
+ ModalDialog(WiFiPasswordDialogFieldFilter, &hit);
+ if (hit == ok || hit == cancel)
+ break;
+ }
+
+ if (hit != ok) {
+ DisposDialog(dg);
+ goto menu_done;
+ }
+
+ GetDItem(dg, SSID_DIALOG_NAME_FIELD_ID, &itype, &ihandle, &irect);
+ GetIText(ihandle, &ssid);
+ PtoCstr(ssid);
+ strlcpy(wjr.ssid, (char *)ssid, sizeof(wjr.ssid));
+
+ DisposDialog(dg);
+ } else
+ strlcpy(wjr.ssid, net->ssid, sizeof(wjr.ssid));
if (net->flags & WIFI_NETWORK_FLAG_AUTH) {
- strlcpy(ssid, net->ssid, sizeof(ssid));
+ strlcpy((char *)ssid, wjr.ssid, sizeof(ssid));
CtoPstr(ssid);
ParamText(ssid, "\p", "\p", "\p");
PtoCstr(ssid);