From 7c846abb658c51c85795c45d5ccc36a99915246d Mon Sep 17 00:00:00 2001
From: BrokenName <brokenname@kfee-programming.com>
Date: Mon, 27 Dec 2021 10:06:38 -0800
Subject: [PATCH 1/3] DRY: Consolidated the code for retrieving a port so it
 will give consistent errors.

---
 src/NetscriptFunctions.ts | 102 ++++++++++----------------------------
 1 file changed, 26 insertions(+), 76 deletions(-)

diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index 83a4335ac..db4d1a0fe 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -70,6 +70,7 @@ import { NetscriptCodingContract } from "./NetscriptFunctions/CodingContract";
 import { NetscriptCorporation } from "./NetscriptFunctions/Corporation";
 import { NetscriptFormulas } from "./NetscriptFunctions/Formulas";
 import { NetscriptStockMarket } from "./NetscriptFunctions/StockMarket";
+import { IPort } from "./NetscriptPort";
 
 import {
   NS as INS,
@@ -442,6 +443,26 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
     getServer: safeGetServer,
     checkSingularityAccess: checkSingularityAccess,
     hack: hack,
+    getValidPort: (funcName:string, port: any): IPort => {
+      if (isNaN(port)) {
+        throw makeRuntimeErrorMsg(
+          funcName,
+          `Invalid argument. Must be a port number between 1 and ${CONSTANTS.NumNetscriptPorts}, is ${port}`,
+        );
+      }
+      port = Math.round(port);
+      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
+        throw makeRuntimeErrorMsg(
+          funcName,
+          `Trying to write to invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
+        );
+      }
+      const iport = NetscriptPorts[port - 1];
+      if (iport == null || !(iport instanceof Object)) {
+        throw makeRuntimeErrorMsg(funcName, `Could not find port: ${port}. This is a bug. Report to dev.`);
+      }
+      return iport;
+    }
   };
 
   const gang = NetscriptGang(Player, workerScript, helper);
@@ -1737,25 +1758,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
       return res;
     },
     writePort: function (port: any, data: any = ""): any {
-      // Write to port
-      // Port 1-10
-      if (typeof data !== "string" && typeof data !== "number") {
-        throw makeRuntimeErrorMsg(
-          "writePort",
-          `Trying to write invalid data to a port: only strings and numbers are valid.`,
-        );
-      }
-      port = Math.round(port);
-      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
-        throw makeRuntimeErrorMsg(
-          "writePort",
-          `Trying to write to invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
-        );
-      }
-      const iport = NetscriptPorts[port - 1];
-      if (iport == null || !(iport instanceof Object)) {
-        throw makeRuntimeErrorMsg("writePort", `Could not find port: ${port}. This is a bug. Report to dev.`);
-      }
+      const iport = helper.getValidPort("writePort", port);
       return Promise.resolve(iport.write(data));
     },
     write: function (port: any, data: any = "", mode: any = "a"): any {
@@ -1832,18 +1835,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
     },
     readPort: function (port: any): any {
       // Read from port
-      // Port 1-10
-      port = Math.round(port);
-      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
-        throw makeRuntimeErrorMsg(
-          "readPort",
-          `Invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
-        );
-      }
-      const iport = NetscriptPorts[port - 1];
-      if (iport == null || !(iport instanceof Object)) {
-        throw makeRuntimeErrorMsg("readPort", `Could not find port: ${port}. This is a bug. Report to dev.`);
-      }
+      const iport = helper.getValidPort("readPort", port);
       const x = iport.read();
       return x;
     },
@@ -1878,23 +1870,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
     },
     peek: function (port: any): any {
       updateDynamicRam("peek", getRamCost("peek"));
-      if (isNaN(port)) {
-        throw makeRuntimeErrorMsg(
-          "peek",
-          `Invalid argument. Must be a port number between 1 and ${CONSTANTS.NumNetscriptPorts}, is ${port}`,
-        );
-      }
-      port = Math.round(port);
-      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
-        throw makeRuntimeErrorMsg(
-          "peek",
-          `Invalid argument. Must be a port number between 1 and ${CONSTANTS.NumNetscriptPorts}, is ${port}`,
-        );
-      }
-      const iport = NetscriptPorts[port - 1];
-      if (iport == null || !(iport instanceof Object)) {
-        throw makeRuntimeErrorMsg("peek", `Could not find port: ${port}. This is a bug. Report to dev.`);
-      }
+      const iport = helper.getValidPort("peek", port);
       const x = iport.peek();
       return x;
     },
@@ -1918,38 +1894,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
     },
     clearPort: function (port: any): any {
       // Clear port
-      port = Math.round(port);
-      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
-        throw makeRuntimeErrorMsg(
-          "clear",
-          `Trying to clear invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid`,
-        );
-      }
-      const iport = NetscriptPorts[port - 1];
-      if (iport == null || !(iport instanceof Object)) {
-        throw makeRuntimeErrorMsg("clear", `Could not find port: ${port}. This is a bug. Report to dev.`);
-      }
+      const iport = helper.getValidPort("clearPort", port);
       return iport.clear();
     },
     getPortHandle: function (port: any): any {
       updateDynamicRam("getPortHandle", getRamCost("getPortHandle"));
-      if (isNaN(port)) {
-        throw makeRuntimeErrorMsg(
-          "getPortHandle",
-          `Invalid port: ${port} Must be an integer between 1 and ${CONSTANTS.NumNetscriptPorts}.`,
-        );
-      }
-      port = Math.round(port);
-      if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
-        throw makeRuntimeErrorMsg(
-          "getPortHandle",
-          `Invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
-        );
-      }
-      const iport = NetscriptPorts[port - 1];
-      if (iport == null || !(iport instanceof Object)) {
-        throw makeRuntimeErrorMsg("getPortHandle", `Could not find port: ${port}. This is a bug. Report to dev.`);
-      }
+      const iport = helper.getValidPort("getPortHandle", port);
       return iport;
     },
     rm: function (fn: any, hostname: any): any {

From 90ca9407d5b46d220472ceaabb78b62c7ed9b011 Mon Sep 17 00:00:00 2001
From: BrokenName <brokenname@kfee-programming.com>
Date: Mon, 27 Dec 2021 10:38:00 -0800
Subject: [PATCH 2/3] Update NetscriptFunctions.ts

Undid removal of writePort data validation
---
 src/NetscriptFunctions.ts | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index db4d1a0fe..493aa3181 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -1758,6 +1758,12 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
       return res;
     },
     writePort: function (port: any, data: any = ""): any {
+      if (typeof data !== "string" && typeof data !== "number") {
+        throw makeRuntimeErrorMsg(
+          "writePort",
+          `Trying to write invalid data to a port: only strings and numbers are valid.`,
+        );
+      }
       const iport = helper.getValidPort("writePort", port);
       return Promise.resolve(iport.write(data));
     },

From b13f146bc333366cb8f151f3a7ae77c657396998 Mon Sep 17 00:00:00 2001
From: ErzengelLichtes <erzengel.des.lichtes@gmail.com>
Date: Mon, 27 Dec 2021 11:36:14 -0800
Subject: [PATCH 3/3] Changed writing specific text to be more generic

---
 src/NetscriptFunctions.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/NetscriptFunctions.ts b/src/NetscriptFunctions.ts
index 493aa3181..823b5533d 100644
--- a/src/NetscriptFunctions.ts
+++ b/src/NetscriptFunctions.ts
@@ -454,7 +454,7 @@ export function NetscriptFunctions(workerScript: WorkerScript): NS {
       if (port < 1 || port > CONSTANTS.NumNetscriptPorts) {
         throw makeRuntimeErrorMsg(
           funcName,
-          `Trying to write to invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
+          `Trying to use an invalid port: ${port}. Only ports 1-${CONSTANTS.NumNetscriptPorts} are valid.`,
         );
       }
       const iport = NetscriptPorts[port - 1];