# How webMAN MOD Implements Its File Manager for PS3 Filesystem Access

> Discover how webMAN MOD's file manager accesses and manipulates the PS3 filesystem. It uses a unified HTML generator and HTTP endpoints to control XMB operations.

- Repository: [Aldo Vargas/webman-mod](https://github.com/aldostools/webman-mod)
- Tags: how-to-guide
- Published: 2026-02-24

---

**webMAN MOD implements its file manager as a unified HTML generator that serves both web and VSH-Menu interfaces, routing all filesystem operations through HTTP endpoints that ultimately invoke the PS3's explore-plugin callbacks to manipulate the XMB.**

The webMAN MOD plugin for PlayStation 3 provides a comprehensive file management system capable of browsing local storage, NTFS volumes, and network shares. According to the aldostools/webman-mod source code, the implementation centers on a shared `add_list_entry` routine that generates directory listings for both the web interface and the on-screen VSH-Menu display. This architecture ensures consistent behavior across all entry points while leveraging the PS3's native `cellFsReaddir` API and explore-plugin interface for actual filesystem operations.

## Architecture: Three Entry Points to the Same Core

webMAN MOD exposes its file manager functionality through three distinct interfaces that converge on the same backend logic:

1.  **Web Interface** – Accessible via `http://<PS3_IP>/fm.ps3?<path>`, generating HTML directory trees with mount, copy, and install actions
2.  **VSH-Menu UI** – Activated by pressing **START** in the VSH-Menu, providing controller-driven navigation with cut, copy, paste, and delete operations
3.  **Explore-Plugin API** – Internal XMB integration via `exec_xmb_command` that performs actions directly from the XMB browser or VSH-Menu selections

All three paths ultimately call the same `folder_listing()` dispatcher and `add_list_entry()` HTML builder found in [`include/file_manager.h`](https://github.com/aldostools/webman-mod/blob/main/include/file_manager.h).

## Web Interface Implementation

When the embedded web server receives a request for `/fm.ps3`, it forwards the call to `folder_listing()` (defined at line 6012 in [`include/www/www_page.h`](https://github.com/aldostools/webman-mod/blob/main/include/www/www_page.h)). This function opens the requested directory—whether local, network, or NTFS—and iterates over entries using `cellFsReaddir()` or NTFS equivalents.

For each directory entry, `folder_listing()` invokes `add_list_entry()` (lines 40-120 in [`include/file_manager.h`](https://github.com/aldostools/webman-mod/blob/main/include/file_manager.h)) to construct a single HTML table row:

-   **File type classification** via `set_file_type()` (lines 18-38) assigns CSS classes (`ps3`, `ps2`, `psx`, `psp`, `dvd`, `rom`) based on file extensions
-   **Metadata formatting** converts raw sizes to human-readable `B/KB/MB/GB` units and appends optional **PARAM.SFO** and **ICON0** links for game directories (lines 56-99)
-   **Action link generation** creates contextual hyperlinks (`/mount.ps3…`, `/copy.ps3…`, `/install.ps3…`, `/view.ps3…`) depending on the file type and current view (lines 190-260)

The resulting HTML follows this structure:

```html
<tr><td><a class="ps3" href="/mount.ps3/dev_hdd0/GAMES/ABCD12345">Game Folder</a>
<td>4.2 GB</td><td>01-Jan-2024 12:34</td></tr>

```

After collecting all rows, the system applies `qsort` according to the requested sort parameter and concatenates the results into the HTTP response using `_concat(&sout, TABLE_ITEM_PREFIX)`.

## VSH-Menu File Manager UI

The VSH-Menu file manager view (triggered from XMB via SELECT + hold) renders a scrollable on-screen file list using `draw_frame()` (lines 6728-6776 in [`_Projects_/vsh_menu/main.c`](https://github.com/aldostools/webman-mod/blob/main/_Projects_/vsh_menu/main.c)). The current directory contents are stored in the global arrays `items[]` and `items_isdir[]`.

Controller input handling occurs in `do_file_manager_action(curpad)` starting at line 628 of [`_Projects_/vsh_menu/main.c`](https://github.com/aldostools/webman-mod/blob/main/_Projects_/vsh_menu/main.c). The function maps button combinations to specific filesystem operations:

-   **Cross Button**: Mounts ISOs or PS3_GAME directories, installs PKG files, or opens images/text files by building URLs like `/mount_ps3<url>` or `/install.ps3<url>` and sending them via `send_wm_request()`
-   **Square Button**: Initiates copy/cut/paste operations by encoding paths with `urlenc()` and dispatching `/cpy.ps3`, `/cut.ps3`, or `/paste.ps3` requests
-   **L2 + Square**: Deletes files or folders recursively using `del(tempstr, true)`, which internally calls `cellFsUnlink` and `cellFsRmdir`
-   **Triangle**: Navigates up one directory level by adjusting the `curdir` variable and reloading the list

All VSH-Menu actions generate HTTP requests to the internal web server, ensuring that the same `folder_listing()` validation and mount logic (`mount_game()`, `mount_ps_disc_image()` at line 5140 in [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c)) executes regardless of whether the user interacts via browser or controller.

## XMB Integration via Explore Plugin

To synchronize file operations with the PlayStation 3's native interface, webMAN MOD utilizes the explore-plugin API defined in [`vsh/explore_plugin.h`](https://github.com/aldostools/webman-mod/blob/main/vsh/explore_plugin.h). When a mount or copy command completes, the code invokes:

```c
explore_interface->ExecXMBcommand("open_list nocheck/...", NULL, 0);

```

The `explore_interface` pointer is obtained at runtime in [`include/init/vsh.h`](https://github.com/aldostools/webman-mod/blob/main/include/init/vsh.h) (lines 58-66) through the PS3's VSH system. This interface provides callbacks such as `DoUnk5` and `ExecXMBcommand` that instruct the XMB to refresh its view, focus specific segments, or launch mounted discs.

Thus, any `/mount.ps3` or `/copy.ps3` command processed through the web or VSH-Menu ultimately triggers an explore-plugin callback, ensuring the XMB remains aware of filesystem changes and can launch games immediately after mounting.

## NTFS and Network Filesystem Support

The file manager transparently handles non-native filesystems through conditional logic in `folder_listing()`. When a path begins with `/net` or references a mounted NTFS volume (`/dev_ntfs*`), the system activates NTFS helpers defined in [`include/scan/prepntfs.h`](https://github.com/aldostools/webman-mod/blob/main/include/scan/prepntfs.h) (lines 24-28).

The same `add_list_entry()` routine processes these entries unchanged; only the underlying size and timestamp retrieval switches to NTFS-specific calls (`ps3ntfs_*`). This abstraction allows users to browse external USB drives with NTFS partitions or network shares via the same HTML interface and controller navigation used for the internal PS3 hard drive.

## Summary

-   **Unified Backend**: Both web and VSH-Menu interfaces rely on `add_list_entry()` in [`include/file_manager.h`](https://github.com/aldostools/webman-mod/blob/main/include/file_manager.h) to generate directory listings and action links
-   **HTTP Routing**: All file operations route through `/fm.ps3`, `/mount.ps3`, and `/copy.ps3` endpoints handled by `folder_listing()` in [`include/www/www_page.h`](https://github.com/aldostools/webman-mod/blob/main/include/www/www_page.h)
-   **Controller Mapping**: The VSH-Menu maps physical buttons to HTTP requests in `do_file_manager_action()` within [`_Projects_/vsh_menu/main.c`](https://github.com/aldostools/webman-mod/blob/main/_Projects_/vsh_menu/main.c)
-   **XMB Synchronization**: Filesystem changes propagate to the XMB via `explore_interface->ExecXMBcommand()` calls through [`vsh/explore_plugin.h`](https://github.com/aldostools/webman-mod/blob/main/vsh/explore_plugin.h)
-   **Extended Storage**: NTFS and network paths integrate transparently via [`include/scan/prepntfs.h`](https://github.com/aldostools/webman-mod/blob/main/include/scan/prepntfs.h) without requiring separate UI code paths

## Frequently Asked Questions

### How does webMAN MOD read directory contents from the PS3 filesystem?

webMAN MOD uses the standard PlayStation 3 system call `cellFsReaddir()` to iterate over local directories, as implemented in the `folder_listing()` function at line 6012 of [`include/www/www_page.h`](https://github.com/aldostools/webman-mod/blob/main/include/www/www_page.h). For NTFS volumes, it substitutes NTFS-specific helper functions from [`include/scan/prepntfs.h`](https://github.com/aldostools/webman-mod/blob/main/include/scan/prepntfs.h) while maintaining the same iteration pattern.

### Can the webMAN MOD file manager delete files recursively?

Yes. When the user presses **L2 + Square** in the VSH-Menu file manager view, the system calls `del(tempstr, true)` from [`_Projects_/vsh_menu/main.c`](https://github.com/aldostools/webman-mod/blob/main/_Projects_/vsh_menu/main.c). This function performs recursive deletion by combining `cellFsUnlink` for files and `cellFsRmdir` for empty directories, with the boolean parameter enabling recursive traversal.

### What is the relationship between the web interface and VSH-Menu file manager?

Both interfaces generate identical HTTP requests to the internal web server. The VSH-Menu constructs URLs like `/mount_ps3<encoded_path>` and sends them via `send_wm_request()`, while the web interface generates clickable links to `/mount.ps3/<path>`. Both requests hit the same `folder_listing()` dispatcher in [`include/www/www_page.h`](https://github.com/aldostools/webman-mod/blob/main/include/www/www_page.h), ensuring consistent behavior across input methods.

### How does webMAN MOD mount games from the file manager?

Mounting occurs through a chain starting at the user interface (web or VSH-Menu), proceeding through `folder_listing()`, and culminating in `mount_game()` or `mount_ps_disc_image()` in [`main.c`](https://github.com/aldostools/webman-mod/blob/main/main.c). After loading the disc image or game folder, the system calls `explore_interface->ExecXMBcommand()` to notify the XMB, making the mounted content appear as a playable disc in the system menu.