PS3 [Update v1.05] sMAN vv1.02 : New "Setup" Option in side-menu of new UI by deank

If you have not heard of sMAN already. its a new plugin from legendary developer deank. sMAN combines webMAN (vanilla) and recently developed sLaunch feature (that was a separate plugin complementing webMAN). So what is the difference between webMAN & sMAN, sMAN provides a UI experiance for changing games on the XMB, as seen in the ScreenShot provided directly from the XMB you will be greeted with this new way to mount a game. Prefer the original way? Then deank still has you covered with his original webMAN plugin as well. This update provides a new "Setup" option in the side menu and also completely does away with the "My Games" entry on the XMB and to launch the sMAN (slaunch feature) simple hold the START button on your dualshock controller to launch this new UI from the XMB. See full details in deank's release quote


Update: Deank also released a quick update to version 1.02 offering a few improvements/fixes outlined. Update 2: deank is on fire releasing another update to sMAN with the release of v1.05, note this version changes the START button to L1/R1 to launch the sluanch feature on the XMB, see all changes in the changelogs provided.

sman.jpg

  • sMAN (webMAN + sLaunch)

    sMAN 1.01 (2/192017)
    • Added "Setup" option in side-menu
    • Removed xml generation - no need for custom category_game.xml anymore
    • Removed xai_plugin/idle_plugin usage
    • Added x2 upscale for small images/covers (w/h < 336)
    • Added indication of current group mode (PS3 1 / xxx) under title name/path
    • Removed "My Games" entry from XMB - hold [START] to launch sMAN (Note: changed to R2/L2 in v1.05 see below)
    Update(1) - sMAN v1.02 (2/19/2017)
    • Changed netiso/rawseciso implementation (external) - use plugin slot #0
    • Fixed crash when trying to load another PS1 title after one is played
    Update(2) - sMAN v1.05 (2/19/2017)
    • Use [L2+R2] to start sMAN
    • The sprx is bigger (but actually uses less memory) because it contains some glued resources
    • It will use standard PS1/PS2/PSP/PS3/Blu-ray/DVD icons when there is no proper cover/image available
    • This version of the plugin must be named sman.sprx and loaded from (in this exact order):
      • /dev_hdd0/sman.sprx or
      • /dev_hdd0/plugins/sman.sprx or
      • /dev_flash/vsh/module/sman.sprx
      • otherwise it won't work. The first match of these three will be loaded.
    sMAN resource files are located in /dev_hdd0/tmp/wmtmp/res folder. There are six icons, background and ntfs/net external plugins. You can play with them until the next reboot when they will be restored to defaults.​
    NB: Renaming it to webftp_server.sprx and other stupid things are not supported. :)
    Thanks to @bguerville for his help about loading xmb plugins: http://www.psx-place.com/......

    Dean

Download:

 
after deleting sman and re installing it a while later it keeps on getting sman fatal error quit as soon as the xmb loads i have tried everything and yet i keep on getting it :confusion:
 
after deleting sman and re installing it a while later it keeps on getting sman fatal error quit as soon as the xmb loads i have tried everything and yet i keep on getting it :confusion:
A fatal error message is displayed when sMan fails to extract its resources files.
It can be due to
1. File corruption or a problem accessing files boot_plugins.txt or
sman.sprx due to permission issues.
2. An error occurring during the resource folder extraction process in /dev_hdd0/tmp/wmtmp/res.
The extraction error could be the result of
a) Bad compilation settings if you made the sprx yourself (wrong number of resource files or padding size).
b) Folder/File Permissions issue

Edit: I actually found a quote from deank in another sMan thread concerning this error, where he explains that there can't be many causes to this issue. Check it out..
There are only four reasons for the 'fatal error' and none of them are related to other applications (like multiMAN or webMAN MOD or anything).

1) Can't open /dev_hdd0/boot_plugins.txt
2) Can't find /sman.sprx string in boot_plugins.txt
3) Can't open sman.sprx from the path found in boot_plugins.txt
4) sman.sprx exists but is damaged

(...)
The only thing I can think of is "access permissions".
Anyway, the only way to properly debug the problems you have is to use stage2.bin (DEBUG) and see what is going on.
Note that if you wish to get some debug output from Cobra to find the cause of your current issue, I wrote a step by step of the process in this post http://www.psx-place.com/index.php?posts/76347
 
Last edited:
There is no better option than the multiman cover folder for automatic detection.
I suggest you use a multiman cover pack like this https://www.mediafire.com/download/bbn25yp0d8no7zp

I ditched multiman because I wanted xmb to be clean. So I've been looking at coding a better option, but for the moment I just grab the jpg from gametdb, resize them and put them in tmp/wmtmp. But then I'm not a serial horder for games, so it doesn't take very long.
 
I ditched multiman because I wanted xmb to be clean. So I've been looking at coding a better option, but for the moment I just grab the jpg from gametdb, resize them and put them in tmp/wmtmp. But then I'm not a serial horder for games, so it doesn't take very long.
Not sure I understand this because grabbing the files manually online, one cover file after the other + editing them to put them in a temporary folder where they can get deleted at any time, is totally impractical & basically makes no sense to me. Lots of work for 2 dozen games, never mind hundreds... What is the point of that anyway because the result will be identical?
Installing a multiman covers pack does not require having multiman installed whatsoever & will not bloat the xmb at all. It is by far the best option, psx/ps2/ps3 games can be added at any time, their covers are already there.. The cost in disk space is minimal & totally acceptable imho.

About coding a "better" option, I am not sure what 'better' could actually mean here because the cover situation has been looked into already by several devs & the best ways are already implemented in sMan & wMm.
Anyway if you are interested in alternatives, I suggest you have a look at the wMM source, there is code included to retrieve the covers directly from the Internet for instance. When using online covers, if ever Internet is not available, icon0 files are used instead by default.
 
Last edited:
A fatal error message is displayed when sMan fails to extract its resources files.
It can be due to
1. File corruption or a problem accessing files boot_plugins.txt or
sman.sprx due to permission issues.
2. An error occurring during the resource folder extraction process in /dev_hdd0/tmp/wmtmp/res.
The extraction error could be the result of
a) Bad compilation settings if you made the sprx yourself (wrong number of resource files or padding size).
b) Folder/File Permissions issue

Edit: I actually found a quote from deank in another sMan thread concerning this error, where he explains that there can't be many causes to this issue. Check it out..
Note that if you wish to get some debug output from Cobra to find the cause of your current issue, I wrote a step by step of the process in this post http://www.psx-place.com/index.php?posts/76347
i didn't encounter any of those issues at all and have tried re-downloading a couple of times with different download managers but still the same issue.
on my boot_plugins.txt the sman entry wasnt on the first line if i put it there it wouldnt load so it had to be on the second line and the first and all the rest where empty as an
1-
2- dev_hdd0/plugins/sman.sprx
or maybe its a problem with my cfw its the latest rebug with webman disabled from toolbox and cobra is on ?
 
2- dev_hdd0/plugins/sman.sprx
Try use path /dev_hdd0/sman.sprx because this is first location where sman look for.. itself. Also there is no reason to sman not work from first entry in boot plugins, how you editing this file? Notepad++?.
 
Try use path /dev_hdd0/sman.sprx because this is first location where sman look for.. itself. Also there is no reason to sman not work from first entry in boot plugins, how you editing this file? Notepad++?.
that was indeed the first path i tried ,im using LibreOffice writer as im currently on ubuntu ,i could use notepad or notepad++ on wine or with virtual box but i dont think they are different ill give em a try.
 
@MHAF99 Use gedit ;) Maybe Your LO write file in unsupported encoding. For such simple config files it must be pure ASCII (on one byte) with Windows line breaks: 0x0A0D (or maybe Unix one: 0x0D, I forgot now ;p).
 
i didn't encounter any of those issues at all and have tried re-downloading a couple of times with different download managers but still the same issue.
on my boot_plugins.txt the sman entry wasnt on the first line if i put it there it wouldnt load so it had to be on the second line and the first and all the rest where empty as an
1-
2- dev_hdd0/plugins/sman.sprx
or maybe its a problem with my cfw its the latest rebug with webman disabled from toolbox and cobra is on ?
Sorry but you obviously encountered one of those problems because those are the only situations where the message can be displayed! Nothing to do with the CFW.

It's easily checked in the source.
Use grep to search for the word "fatal" anywhere in the sMan project. You will find this in gui.h:
Code:
#define STR_SERROR		"sMAN: Fatal error - Quit"
If you search for STR_SERROR you will find only one occurrence in main.c
Code:
int list_s = extract_resources();
	if(!list_s) {show_msg(STR_SERROR); sys_ppu_thread_exit(0);}
Now you know that for the message to be displayed list_s must be 0.
The next step is to check the extract_resources() function to find out when it returns 0. All situations where the function returns 0 will lead to the Fatal Error message to be displayed.
Code:
static u8 extract_resources(void)
{
	typedef struct
	{
		u32		offset;
		u32		size;
		char	name[16];
	}
	res_def;

	int fs, fd;
	struct CellFsStat s;
	char sman[128];
	sman[0]=0;

	if (cellFsOpen("/dev_hdd0/boot_plugins.txt", CELL_FS_O_RDONLY, &fd, 0, 0) == CELL_FS_SUCCEEDED)
	{
		while (working)
		{
			char path[128];
			int eof;

			if (read_text_line(fd, path, sizeof(path), &eof) > 0)
			{
				if(strstr(path, "/sman.sprx") && !sman[0] && cellFsStat(path, &s)==CELL_FS_SUCCEEDED)
				{
					strncpy(sman, path, 127);
					break;
				}
			}
			else break;

			if (eof) break;
		}
		cellFsClose(fd);
	}
	else return 0;

	cellFsChmod(sman, 0666);
	if(cellFsOpen(sman, CELL_FS_O_RDONLY, &fs, 0, 0)!=CELL_FS_SUCCEEDED) return 0;

	u64 msiz = 0;
	u8 res_files=0;

#define SPRX_PAD	160*1024			// offset of resource data from start of sman.sprx
#define RES_VER		(9)					// resource files version

	cellFsLseek(fs, SPRX_PAD, CELL_FS_SEEK_SET, &msiz);
	cellFsRead(fs, &res_files, 1, &msiz);
	if(res_files!=23)					// sanity check
		{cellFsClose(fs); return 0;}

	res_def res_data[res_files];		// offset, size and name array for resource files
	cellFsRead(fs, &res_data, sizeof(res_data), &msiz);

	char dest[128];
	u32 buf_size=0;

	for(int n=0; n<res_files; n++) if(res_data[n].size>buf_size) buf_size=res_data[n].size;

	u8* buf = (u8*) malloc(buf_size);	// largest resource file size used for buffer size

	if(buf)
	{
		for(int n=0; n<res_files; n++)
		{
			sprintf(dest, WMRES "/%s", res_data[n].name);
			if(/*!strstr(dest, "/www_") &&*/ sm_config->resv==RES_VER && file_exists(dest)) continue;

			cellFsOpen(dest, CELL_FS_O_CREAT | CELL_FS_O_TRUNC | CELL_FS_O_WRONLY, &fd, NULL, 0);
			cellFsLseek(fs, SPRX_PAD+res_data[n].offset, CELL_FS_SEEK_SET, &msiz);
			cellFsRead(fs, buf, res_data[n].size, &msiz);
			cellFsWrite(fd, buf, msiz, NULL);
			cellFsClose(fd);
			cellFsChmod(dest, 0666);
		}

		cellFsClose(fs);
		free(buf);
		if(sm_config->resv!=RES_VER)
		{
			sm_config->resv=RES_VER;
			save_settings();
		}
	}
	else {cellFsClose(fs); return 0;}

	return 1;
}
------------------------------------------------------
Now possible lines returning 0 in this function:

1.
Code:
if (cellFsOpen("/dev_hdd0/boot_plugins.txt", CELL_FS_O_RDONLY, &fd, 0, 0) == CELL_FS_SUCCEEDED)
	{
		... 
	}
	else return 0;
Obviously, if /dev_hdd0/boot_plugins.txt cannot be found or opened properly, the function returns 0 & the fatal error message is displayed.

2.
Code:
if(cellFsOpen(sman, CELL_FS_O_RDONLY, &fs, 0, 0)!=CELL_FS_SUCCEEDED) return 0;

If the sMan sprx cannot be found or opened properly, the fatal error message is displayed.

3.
Code:
if(res_files!=23)					// sanity check
		{cellFsClose(fs); return 0;}
If the number of resource files to extract is different from 23 due to wrong resource files setup during compilation, the Fatal Error message is displayed.

4.
Code:
u32 buf_size=0;

	for(int n=0; n<res_files; n++) if(res_data[n].size>buf_size) buf_size=res_data[n].size;

	u8* buf = (u8*) malloc(buf_size);	// largest resource file size used for buffer size

	if(buf)
	{
... 
  } 
else {cellFsClose(fs); return 0;}
If resource files are corrupted and/or the size of the largest resource file found is 0, then buf=0 & the Fatal Error message is displayed.

Conclusion: there are only 4 situations in the sMan code that can lead to the Fatal error message, you now have them all in detail in front of you!
 
Last edited:
Sorry but you obviously encountered one of those problems because those are the only situations where the message can be displayed! Nothing to do with the CFW.

It's easily checked in the source.
Use grep to search for the word "fatal" anywhere in the sMan project. You will find this in gui.h:
Code:
#define STR_SERROR        "sMAN: Fatal error - Quit"
If you search for STR_SERROR you will find only one occurrence in main.c
Code:
int list_s = extract_resources();
    if(!list_s) {show_msg(STR_SERROR); sys_ppu_thread_exit(0);}
Now you know that for the message to be displayed list_s must be 0.
The next step is to check the extract_resources() function to find out when it returns 0. All situations where the function returns 0 will lead to the Fatal Error message to be displayed.
Code:
static u8 extract_resources(void)
{
    typedef struct
    {
        u32        offset;
        u32        size;
        char    name[16];
    }
    res_def;

    int fs, fd;
    struct CellFsStat s;
    char sman[128];
    sman[0]=0;

    if (cellFsOpen("/dev_hdd0/boot_plugins.txt", CELL_FS_O_RDONLY, &fd, 0, 0) == CELL_FS_SUCCEEDED)
    {
        while (working)
        {
            char path[128];
            int eof;

            if (read_text_line(fd, path, sizeof(path), &eof) > 0)
            {
                if(strstr(path, "/sman.sprx") && !sman[0] && cellFsStat(path, &s)==CELL_FS_SUCCEEDED)
                {
                    strncpy(sman, path, 127);
                    break;
                }
            }
            else break;

            if (eof) break;
        }
        cellFsClose(fd);
    }
    else return 0;

    cellFsChmod(sman, 0666);
    if(cellFsOpen(sman, CELL_FS_O_RDONLY, &fs, 0, 0)!=CELL_FS_SUCCEEDED) return 0;

    u64 msiz = 0;
    u8 res_files=0;

#define SPRX_PAD    160*1024            // offset of resource data from start of sman.sprx
#define RES_VER        (9)                    // resource files version

    cellFsLseek(fs, SPRX_PAD, CELL_FS_SEEK_SET, &msiz);
    cellFsRead(fs, &res_files, 1, &msiz);
    if(res_files!=23)                    // sanity check
        {cellFsClose(fs); return 0;}

    res_def res_data[res_files];        // offset, size and name array for resource files
    cellFsRead(fs, &res_data, sizeof(res_data), &msiz);

    char dest[128];
    u32 buf_size=0;

    for(int n=0; n<res_files; n++) if(res_data[n].size>buf_size) buf_size=res_data[n].size;

    u8* buf = (u8*) malloc(buf_size);    // largest resource file size used for buffer size

    if(buf)
    {
        for(int n=0; n<res_files; n++)
        {
            sprintf(dest, WMRES "/%s", res_data[n].name);
            if(/*!strstr(dest, "/www_") &&*/ sm_config->resv==RES_VER && file_exists(dest)) continue;

            cellFsOpen(dest, CELL_FS_O_CREAT | CELL_FS_O_TRUNC | CELL_FS_O_WRONLY, &fd, NULL, 0);
            cellFsLseek(fs, SPRX_PAD+res_data[n].offset, CELL_FS_SEEK_SET, &msiz);
            cellFsRead(fs, buf, res_data[n].size, &msiz);
            cellFsWrite(fd, buf, msiz, NULL);
            cellFsClose(fd);
            cellFsChmod(dest, 0666);
        }

        cellFsClose(fs);
        free(buf);
        if(sm_config->resv!=RES_VER)
        {
            sm_config->resv=RES_VER;
            save_settings();
        }
    }
    else {cellFsClose(fs); return 0;}

    return 1;
}
------------------------------------------------------
Now possible lines returning 0 in this function:

1.
Code:
if (cellFsOpen("/dev_hdd0/boot_plugins.txt", CELL_FS_O_RDONLY, &fd, 0, 0) == CELL_FS_SUCCEEDED)
    {
        ...
    }
    else return 0;
Obviously, if /dev_hdd0/boot_plugins.txt cannot be found or opened properly, the function returns 0 & the fatal error message is displayed.

2.
Code:
if(cellFsOpen(sman, CELL_FS_O_RDONLY, &fs, 0, 0)!=CELL_FS_SUCCEEDED) return 0;

If the sMan sprx cannot be found or opened properly, the fatal error message is displayed.

3.
Code:
if(res_files!=23)                    // sanity check
        {cellFsClose(fs); return 0;}
If the number of resource files to extract is different from 23 due to wrong resource files setup during compilation, the Fatal Error message is displayed.

4.
Code:
u32 buf_size=0;

    for(int n=0; n<res_files; n++) if(res_data[n].size>buf_size) buf_size=res_data[n].size;

    u8* buf = (u8*) malloc(buf_size);    // largest resource file size used for buffer size

    if(buf)
    {
...
  }
else {cellFsClose(fs); return 0;}
If resource files are corrupted and/or the size of the largest resource file found is 0, then buf=0 & the Fatal Error message is displayed.

Conclusion: there are only 4 situations in the sMan code that can lead to the Fatal error message, you now have them all in detail in front of you!
thanks alot ill try again fresh and see what happens and using gedit as devil advised
 
Finally this weird issue is solved it was a permissions issue, here is what to do if you encounter it :
looking at the directory /dev_hdd0/tmp via filezilla ftp and looking at its permissions it had 700 so i tried to change it to 777 but as soon as i applied it would go back to 700. so
i created a new folder in the same path on the hdd lets say tmp2 so it would be /dev_hdd0/tmp2 set its permissions to 777 and copied all files from tmp to tmp2 after that i set all files and folders inside the directory tmp2 permissions to 777 and after making sure all went ok (all files are intact) i deleted the original tmp folder renamed tmp2 to tmp and rebooted.
it loaded fine after that.

upload_2017-5-9_20-19-10.png
 
@MHAF99
I suppose this can happen if the tmp folder was created manually or whatever..
If you delete the /dev_hdd0/tmp folder manually, sMan will recreate it & sMan always sets the permissions correctly on folder creation (search the code "cellFsMkdir(PSTMP" where PSTMP is defined as "/dev_hdd0/tmp", you will find only one occurrence
Code:
cellFsMkdir(PSTMP, CELL_FS_S_IFDIR | 0777);
As you can see, the permissions are set right when there's folder gets created by sMan. Note that this line of code is located in a function that runs everytime sMan starts.

@deank
To avoid this, maybe a permission test for the tmp folder followed by a cellFsChmod(PSTMP, (CELL_FS_S_IFDIR | 0777);
); if the test fails, could be considered?
 
Last edited:
Is there any (easy) way to change background in sman launcher?

Poslano sa mog X5max_PRO koristeći Tapatalk
The resource files are located in /dev_hdd0/tmp/wmtmp/res, you could manually replace any file there however, as the resources are automatically extracted everytime sMan is initialised, any file replacement will be short lived because it will be overwritten..
The best way to change the background pic imo is to repack the resources with the replaced pic & recompile the sprx.
I would not exactly call this "easy" especially for noobs but it's still accessible... although you should note that, to compile the sMan project, you need to use the PS3 SDK which, legally, is under (expensive) license!
 
Last edited:
@MHAF99
I suppose this can happen if the tmp folder was created manually or whatever..
If you delete the /dev_hdd0/tmp folder manually, sMan will recreate it & always sets the permissions correctly.

@deank
To avoid this, maybe a permission test for the tmp folder followed by a cellFsChmod(PSTMP, (CELL_FS_S_IFDIR | 0777);
); if the test fails, could be considered?
yeah its really possible as i did lots of playarounds when deleting and reinstalling webman plugins etc must have messed up a couple of things.
 
Last edited by a moderator:
The resource files are located in /dev_hdd0/tmp/wmtmp/res, you could manually replace any file there however, as the resources are automatically extracted everytime sMan is initialised, any file replacement will be short lived because it will be overwritten..
The best way to change the background pic imo is to repack the resources with the replaced pic & recompile the sprx.
I would not exactly call this "easy" especially for noobs but it's still accessible... although you should note that, to compile the sMan project, you need to use the PS3 SDK which, legally, is under (expensive) license!
Thank you for your help...yes i am a little noobish for ps3 compiling...am i asking too much if i request somobody helpfull to compile sman.sprx with some dark background? (black, it doesn't matter image...just to be black)
Sorry for my english and thank you in advance
 
Thank you for your help...yes i am a little noobish for ps3 compiling...am i asking too much if i request somobody helpfull to compile sman.sprx with some dark background? (black, it doesn't matter image...just to be black)
Sorry for my english and thank you in advance
Well, the only obstacle is the sdk. If you are able to get the sdk setup, I don't think the changes you want to make require any modification to the resources padding.
If I am correct, you would only need to do the following 2 steps:
1. Open res/sMan.jpg with an image editor. Fill the pic with black colour & save the pic.
2. Run "make all" at the sdk prompt.

That's it done...
If I find 5mn tonight I will try to do it for you. No promises...
 
You can just replace the image in sman res folder. It will not be overwritten.


Sent from my iPhone using Tapatalk
Oh crap.
Deank is correct of course, I missed this line!
Code:
if(/*!strstr(dest, "/www_") &&*/ sm_config->resv==RES_VER && file_exists(dest)) continue;
@omnimodeus
No need to recompile. My mistake, sorry...
Just replace "/dev_hdd0/tmp/wmtmp/res/sMan.jpg".
 
Last edited:

Featured content

Trending content

Back
Top