diff --git a/AI.md b/AI.md index 0b03217..16355db 100644 --- a/AI.md +++ b/AI.md @@ -11,18 +11,18 @@ When the user says this is a new chat or asks to continue mars-nwe work, first read this file before proposing patches or making assumptions. Then ask for, or use, the current project status that the user pasted into the chat. -## Current handoff status after patch 0217 +## Current handoff status after patch 0218 The current accepted patch line in this chat is expected to include: - endpoint-audit/documentation patches through `0176-docs-audit-direct-lifecycle-buffer-endpoints.patch`; - redesign documentation patches `0177` through `0198`; -- endpoint-audit/documentation patches `0199` through `0217`; -- latest expected patch name: `0217-docs-audit-nds-fragger-stubs.patch`. +- endpoint-audit/documentation patches `0199` through `0218`; +- latest expected patch name: `0218-docs-audit-print-spool-stubs.patch`. When continuing in a new chat, first ask the user which patch was actually last -applied. If they confirm `0217`, build the next patch as `0218-...` against a -tree that already contains `0217`. If any patch failed or was skipped, rebuild +applied. If they confirm `0218`, build the next patch as `0219-...` against a +tree that already contains `0218`. If any patch failed or was skipped, rebuild against the last confirmed applied patch instead of assuming the file in `/mnt/data` was accepted. @@ -198,24 +198,21 @@ Schema/import direction: Latest endpoint audit note: -- Patch `0217` audits the planned NetWare-4.x NDS/NCP Fragger family - `0x2222/104` / wire `0x68` in `src/nwconn.c`. The top-level source case was - already present and still returns `0xfb` at runtime. Patch `0217` adds - disabled `MARS_NWE_4` source-stub selector documentation for `104/01` Ping for - NDS NCP, `104/02` Send NDS Fragmented Request/Reply, `104/03` Fragment Close, - `104/04` Return Bindery Context, `104/05` Monitor NDS Connection, `104/06` - Return NDS Statistics, `104/07` Clear Statistics, and `104/08` Reload NDS - Software. -- Remember that `104/02` is a nested-selector path: the NDS `Verb` is a 32-bit - payload field after the NDS subfunction, so future docs should write paths - like `0x2222/104/02 verb=` instead of inventing one-byte `zz` cases. - Future implementation belongs to `nwnds`/`libdirectory`; `nwserv` remains - control plane only. +- Patch `0218` audits SDK `0x2222/17` / wire `0x11` Print/Spool as a + NetWare 2.x/3.x/4.x compatibility family. No active top-level source + handler exists, so the documented selector slots `17/00` Write To Spool + File, `17/01` Close Spool File, `17/02` Set Spool File Flags, `17/03` + Spool A Disk File, `17/06` Get Printer Status, `17/09` Create Spool File, + and `17/10` Get Printer's Queue are recorded as a disabled `#if 0` source + stub in `src/nwconn.c`. +- Future implementation belongs to a print/spool compatibility provider, + probably sharing queue provider concepts for queued output, but not to + `nwnds`. The stub is intentionally inactive and has no runtime effect. -The next patch number should be `0218` if `0217` was applied. Likely next +The next patch number should be `0219` if `0218` was applied. Likely next blocks are deeper `0x2222/23` bindery/property/admin subfunction coverage, -SDK `0x2222/36`/`37` NCP Extension scope, SDK `0x2222/17` Print/Spool, or -another user-selected endpoint family. +SDK `0x2222/36`/`37` NCP Extension scope, SDK `0x2222/90` scope, or another +user-selected endpoint family. ## Patch workflow diff --git a/TODO.md b/TODO.md index da9efd1..7ec626e 100644 --- a/TODO.md +++ b/TODO.md @@ -206,14 +206,17 @@ Present in the code but not yet fully endpoint-audited: planned NetWare-4.x/NDS work. The top-level source case remains active as unsupported (`0xfb`), while the documented 104/01..104/08 selector slots are recorded behind `#if MARS_NWE_4` in `src/nwconn.c`. +- SDK `0x2222/17` / wire `0x11` Print/Spool is source-stub-audited + as a NetWare 2.x/3.x/4.x compatibility family. There is no active + top-level handler, so patch 0218 records the documented selector slots + `17/00`, `17/01`, `17/02`, `17/03`, `17/06`, `17/09`, and `17/10` as a + disabled `#if 0` stub in `src/nwconn.c`. Future implementation belongs to + a print/spool compatibility provider, likely integrated with queue handling, + not to `nwnds`. SDK-listed blocks that do not currently show a top-level handler in `src/nwconn.c`: -- SDK `0x2222/17` / wire `0x11` Print/Spool group. The PDF lists old print - calls such as Write To Spool File, Close Spool File, Set Spool File Flags, - Spool A Disk File, Get Printer Status, Create Spool File, and Get Printer's - Queue. No top-level `case 0x11` has been identified in `src/nwconn.c` yet. - SDK `0x2222/36` and `0x2222/37` / wire `0x24` and `0x25` NCP Extension families. The PDF lists extension-info and execute-extension calls; no top-level handlers have been identified yet. Bucket by generation before diff --git a/src/nwconn.c b/src/nwconn.c index a5ac8cc..1b9ebd4 100644 --- a/src/nwconn.c +++ b/src/nwconn.c @@ -5567,6 +5567,94 @@ static int handle_ncp_serv(void) } /* case 0x17 */ break; +#if 0 + case 0x11 : { /* SDK 17 / wire 0x11 Print / Spool group. + * Coverage: missing top-level handler in the current + * source, so keep the eligible NetWare 2.x/3.x/4.x print + * selector map as a disabled documentation stub. + * Request handoff: SDK 17 requests carry a 16-bit + * SubFunctionStrucLen at requestdata[0..1], followed by + * the one-byte SubFunctionCode at requestdata[2]. + * Reply ownership: a future print/spool provider would + * return normal Completion plus per-subfunction payload; + * nwconn would still own the final client reply envelope. + * Future owner: print/spool compatibility provider, likely + * integrated with queue handling but not with nwnds. + */ + int print_sub = (requestlen >= (int)sizeof(NCPREQUEST) + 3) + ? (int)requestdata[2] : -1; + switch (print_sub) { + case 0x00: /* 17/00 Write To Spool File. + * Request: SubFunctionStrucLen, SubFunctionCode, + * ClientPrinterNumber, PrintData[]. + * Reply: no payload, normal Completion. + */ + completition = 0xfb; + break; + + case 0x01: /* 17/01 Close Spool File. + * Request: SubFunctionStrucLen, SubFunctionCode, + * AbortQueueFlag. + * Reply: no payload, normal Completion. + */ + completition = 0xfb; + break; + + case 0x02: /* 17/02 Set Spool File Flags. + * Request: SubFunctionStrucLen, SubFunctionCode, + * PrintFlags, TabSize, TargetPrinter, + * NumberOfCopies, FormType, BannerName, + * BannerFileName. + * Reply: no payload, normal Completion. + */ + completition = 0xfb; + break; + + case 0x03: /* 17/03 Spool A Disk File. + * Request: SubFunctionStrucLen, SubFunctionCode, + * DirectoryHandle, Path, PrintFlags, TabSize, + * TargetPrinter, NumberOfCopies, FormType, + * BannerName, BannerFileName. + * Reply: no payload, normal Completion. + */ + completition = 0xfb; + break; + + case 0x06: /* 17/06 Get Printer Status. + * Request: SubFunctionStrucLen, SubFunctionCode, + * TargetPrinter. + * Reply: PrinterHalted, PrinterOffLine, + * CurrentFormType, RedirectedPrinter. + */ + completition = 0xfb; + break; + + case 0x09: /* 17/09 Create Spool File. + * Request: SubFunctionStrucLen, SubFunctionCode, + * DirectoryHandle, Path, PrintFlags, TabSize, + * TargetPrinter, NumberOfCopies, FormType, + * BannerName, BannerFileName. + * Reply: CreatedSpoolFileHandle / name data per + * old print-service layout. + */ + completition = 0xfb; + break; + + case 0x0a: /* 17/10 Get Printer's Queue. + * Request: SubFunctionStrucLen, SubFunctionCode, + * TargetPrinter, QueueIndex. + * Reply: PrinterQueueEntry list / next index. + */ + completition = 0xfb; + break; + + default: completition = 0xfb; + break; + } + } + break; +#endif + case 0x18 : /* End of Job */ /* * Direct NCP 0x2222/24 End of Job.