KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: VLF Port von PSCrypter
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich wollte zum lernen von C und zum coden, PSCrypter im VLF-Style machen, also habe ich ein wenig herum gespielt.
Wenn ich es kompilieren will, kommt aber:
Spoiler: (anzeigen)
Kann mir jemand helfen, ich habe bereits alle include dateien verglichen genauso wie die Makefiles.
Die Makefile von dem Port

Spoiler: (anzeigen)
In meiner main.c steht folgendes:
Achtung unübersichtlicher Code (anzeigen)

Code:
main.c:(.text+0x370): undefined reference to `pspDebugScreenPrintf'
main.c:(.text+0x4a8): undefined reference to `pspDebugScreenPrintf'
main.c:(.text+0x4d8): undefined reference to `pspDebugScreenPrintf'
main.o: In function `main_pack_pbp':
main.c:(.text+0x578): undefined reference to `pspDebugScreenPrintf'
main.c:(.text+0x608): undefined reference to `pspDebugScreenPrintf'


Diese FUNKTION gibt es in VLF NICHT! da musst du vlfGuiAddText(1,1, "text"); benutzen Smile

du kannst nihct so einfach portieren da musch du vlf gut kennen

Nun,da keiner von diesem Therad VLF kann (außer PSP_Lord und ich und Ceikor Wink) hier mal DL is NICHT mit source code da sich sonst jeder depp der nix kann des kutz c&p machen kann -.-:

mom ich upps grad

Das ganze mit dem Login brauchst du ja nicht oder den dann wäre der Code viel kleiner also so:

Spoiler: (anzeigen)
Richtig, Cha0z, bei vlfGuiAddText musst du aber in zweierler Hinsicht aufpassen. 1.) Der PSP scheint es nicht zu gefallen, wenn du zwei vlfGuiAddText Objekte hast (wenn du also zwei Funktionen diesen Types aufrufst).

Außerdem musst du aufpassen, wenn du eine Remove Metode in eine Fubktion packst, die öfters aufgerufen wird. Wenn das VlfText Objekt gar nicht mehr vorhanden ist und du es dann versucht zu löschen, wird die PSP freezen.
Warum erzähl ich dir das? Ganz einfach, dieser Fehler ist nicht leicht zu finden und stellt eine Präventionsmaßnahme dar.

Beispiel code:

//variables
VlfText welcome_message

//functions

int homebrew_main(int argc, char *argv[]) {
//35: position of our text on the x-axis
//20: positon of our text on the y-axis
//"hey, welcome to my program": the text to display (can also be a pointer to a char)
welcome_message = vlfGuiAddText(35, 20, "Hey, welcome to my program =)");
....
}

/* make sure to call this function ONLY with an existing welcome_message object...
...otherwise freeze */
void finish() {
vlfGuiRemoveText(welcome_message);
...
}

-end of code

So, dieser code ist nur zu Demo Zwecken gedacht, der Aufruf der Methode "vlfGuiAddText" liefert ein Objekt vom Typ "VlfText" zurück, wir speichern diesen Rückgabewert also in eine Variable von diesem Typ (welcome_message). Mit diesem Objekt können wir nun eine ganze Menge weiterer Funktionen aufrufen, z.B. vlfGuiSetTextScrollBar(welcome_message, 180). Diese Funktion erstellt eine Scrollbar um unser VlfText Objekt, also um unseren Text.

In der vlf Sample von Dark-Alex sind viele Funktionen aufgeführt, für eine echte Dokumentation empfehle ich dir aber die vlf header Datei (vlf.h) durchzulesen.
Der code ist zwar schon etwas kleiner, dennoch könnetst du noch weitere Sachen verändern.

Ein paar dieser include files sind überflüssig, hier die wichtigsten, die du haben solltest:

Code:
#include <pspkernel.h>
#include <stdio.h>
#include <vlf.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <pspdebug.h>


Eine zweite Sache, dei den code übersichtlicher machen würde ist, du packst den home-button callback in eine main.h und auch die includes:

Code:
#ifndef _MAIN_H
#define    _MAIN_H

//includes
#include <pspkernel.h>
#include <stdio.h>
#include <vlf.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <pspdebug.h>

/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

return 0;
}

/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;

thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}

return thid;
}

#endif
/* vim: set cin et sw=4 ts=4: */


deine main.c wäre dann so:

Code:
#include "main.h"

//module attributes
PSP_MODULE_INFO("PSCRYPTERv3.0", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(0);
int err = 0;


#define MAX_BUFFER_SIZE 1024*1024*5+1024*512
#define MAX_ORIGIN_FILE_SIZE 1024*1024*4

#define printf    pspDebugScreenPrintf


#include "main_crypter.h"
#include "unpack-pbp.h"
#include "pack-pbp.h"

#include "fix-realocations.h"

char *filename_list[10] = {
"name","EBOOT_signed.PBP", "param.sfo", "icon0.png", "icon1.pmf", "pic0.png", "pic1.png", "snd0.at3", "data.psp", "data.psar"
};


char *license_text =
        "PSCRYPTER v2.0 by Carlosgs.\n\n"
        "Encrypt EBOOT.PBP files directly\n"
        "from the PSP\n\n"
        "Uses the code made by 'bbtgp'\n"
        "and parts of the PSPSDK\n\n"
        "2.0 added realocation fixing by JJS\n"
        "THANK YOU!";
        

VlfPicture logo;        
        
VlfText license, do_you_agree;

int OnExit(int enter)
{
    if (enter)
        sceKernelExitGame();
    
    return VLF_EV_RET_NOTHING;
}


void OnLicenseAgreementFadeOutComplete(void *param)
{
    // Destruct old items    
    vlfGuiRemoveText(license);
    vlfGuiRemoveText(do_you_agree);
    vlfGuiCancelBottomDialog();
    
    vlfGuiCustomBottomDialog(NULL, "Exit", 1, 0, VLF_DEFAULT, OnExit);    
    
    sceIoMkdir("sign", 0777);
    
    sceIoChdir("sign");
    

    sceIoRemove("EBOOT_signed.PBP");
    sceIoRemove("param.sfo");
    sceIoRemove("icon0.png");
    sceIoRemove("icon1.pmf");
    sceIoRemove("pic0.png");
    sceIoRemove("pic1.png");
    sceIoRemove("snd0.at3");
    sceIoRemove("data.psp");
    sceIoRemove("data_unsigned.psp");
    sceIoRemove("data.psar");
    
    crypter = vlfGuiAddText(64, 65, "Unpacking EBOOT file...\n");

    err = main_unpack_pbp();
    if(err != 0)
    {
    crypter = vlfGuiAddText(64, 120, "Error while unpacking: %d\n");    

    }
    
    vlfGuiSetRectangleFade(0, VLF_TITLEBAR_HEIGHT, 480, 272-VLF_TITLEBAR_HEIGHT, VLF_FADE_MODE_IN, VLF_FADE_SPEED_SUPER_FAST, 0, NULL, NULL, 0);    
}

int OnLicenseAgreement(int enter)
{
    if (enter)
    {
        vlfGuiSetRectangleFade(0, VLF_TITLEBAR_HEIGHT, 480, 272-VLF_TITLEBAR_HEIGHT, VLF_FADE_MODE_OUT, VLF_FADE_SPEED_SUPER_FAST, 0, OnLicenseAgreementFadeOutComplete, NULL, 0);
        return VLF_EV_RET_REMOVE_HANDLERS;
    }
    
    sceKernelExitGame();
    
    return VLF_EV_RET_NOTHING;
}
        
void StartSample()
{
    license = vlfGuiAddText(100, 40, license_text);            
    vlfGuiSetTextScrollBar(license,  90);
    
    do_you_agree = vlfGuiAddText(120, 210, "Are you ready?");
    vlfGuiBottomDialog(VLF_DI_CANCEL, VLF_DI_ENTER, 1, 0, VLF_DEFAULT, OnLicenseAgreement);  
    vlfGuiSetRectangleFade(0, VLF_TITLEBAR_HEIGHT, 480, 272-VLF_TITLEBAR_HEIGHT, VLF_FADE_MODE_IN, VLF_FADE_SPEED_SUPER_FAST, 0, NULL, NULL, 0);
}

int menu_sel(int sel)
{
    switch (sel)
    {
        case 0:            
            StartSample();    
            vlfGuiRemovePicture(logo);        
        return VLF_EV_RET_REMOVE_HANDLERS | VLF_EV_RET_REMOVE_OBJECTS;
        
        case 1:
            sceKernelExitGame();
                    
        case 2:
            sceKernelExitGame();
        break;
    }
    
    return VLF_EV_RET_NOTHING;
}

int app_main(int argc, char *argv[])
{

    char *items[] = { "Start Crypter", "Exit", "Exit2" };
    
    vlfGuiSystemSetup(1, 1, 1);        
    vlfGuiLateralMenu(3, items, 0, menu_sel, 100);
    
    logo = vlfGuiAddPictureFile("logo.png", 95, 80); // png's are now supported
    
    
    while (1)
    {
        vlfGuiDrawFrame();
    }
    
    return 0;
}

?? Wieso kommt jetzt eigentlich undefined reference, wie kann man das beheben?
Mal ehrlich leute, warum lernt ihr nicht zuerst richtig C/C++? Faulheit?!

Und nun zum Topic, wozu das ganze. Du wirst es eh nicht auf eine OFW zum laufen bingen weil du dort noch keine Module laden kannst.

Hierrüber könnt ich mich stunden lang kaput lachen:

char *items[] = { "Start Crypter", "Exit", "Exit2" };

Zu guter letzt drücke dich bitter etwas klarer aus.
Wenn das eine frage im bezug auf deinem ersten Post ist, lese. Cha0z hat dir die antwort gegeben und wenn du damit nichts anfangen kannst bist du falsch hier.

Ceikor :
Mal ehrlich leute, warum lernt ihr nicht zuerst richtig C/C++? Faulheit?!

Und nun zum Topic, wozu das ganze. Du wirst es eh nicht auf eine OFW zum laufen bingen weil du dort noch keine Module laden kannst.

Hierrüber könnt ich mich stunden lang kaput lachen:

char *items[] = { "Start Crypter", "Exit", "Exit2" };

Zu guter letzt drücke dich bitter etwas klarer aus.
Wenn das eine frage im bezug auf deinem ersten Post ist, lese. Cha0z hat dir die antwort gegeben und wenn du damit nichts anfangen kannst bist du falsch hier.


Gut gesagt! Exit 2 Big Grin des eine spiel ^^

@LF: LoL, einfach nur LoL...

Ey lest mal mein ersten Post da ich upps grad muss noch was anderes machen

@Ceikor (anzeigen)
Ausserdem, tut mir Leid, anscheinend hatte ich nicht genügend analysiert, bevor ich geschrieben hab. Ich weiß jetzt, dass ich in den Includes, alle printf funktionen passend mit ersetzen muss.
Kann geclosed werden.

Ceikor :
Mal ehrlich leute, warum lernt ihr nicht zuerst richtig C/C++? Faulheit?!

Und nun zum Topic, wozu das ganze. Du wirst es eh nicht auf eine OFW zum laufen bingen weil du dort noch keine Module laden kannst.

Hierrüber könnt ich mich stunden lang kaput lachen:

char *items[] = { "Start Crypter", "Exit", "Exit2" };

Zu guter letzt drücke dich bitter etwas klarer aus.
Wenn das eine frage im bezug auf deinem ersten Post ist, lese. Cha0z hat dir die antwort gegeben und wenn du damit nichts anfangen kannst bist du falsch hier.

Fühlst dich jetzt obercool weil du ihm in C-Sprache fertig gemacht hast?
Statt einfach die Finger von der Tastatur zu lassen.

Gut gesagt godzilla, leider hatte er zwar Recht gehabt, dass Co$mo Recht hatte (wie peinlich), ich hatte es nur bereits probiert gehabt. Anscheinend hatte ich make clean vergessen.
Noch NICHT closen!

Erst uppe ich dann... Tongue

BIN FERTIG! muss nur noch ein sample hinzufügen Tongue
@killagodzilla: Dir gehst gut ja? Geh zu Mutti heulen^^ Ich habe hier niemanden fertig gemacht, ich habe nur klip und klar gesagt was los ist, wenn ihr damit nicht zurecht kommt heult los, ich werd euch nicht daran hindern^^ und noch was das war OT Wink und auf mir immer rumhacken wenn ich OT werde *lol* Kinder Kinder^^

EDIT: Und ja killagodzilla ich find mich jetzt ober cool, wenn du das so siehst Tongue ist immer schön wenn andere wissen wie andere sich gerade fühlen^^ frag mich immer wie ihr das macht. Ihr habt ein Talent Wink

@Littlefighter19: Ja ok dennoch fand ich diesen eintrag lustig^^ hab halt mein eigenen Humor^^
Nächstes mal erst aktualisieren und dann Posten Wink und warum es sowenig Coder gibt, daran bin ich nicht schuld sondern eher Noobs (die es leider hier zu viele gibt) die nur Copy/Past veranstalten und nur source codes haben wollen, das solltet ihr euch mal klar machen.

@Cha0z: Was willst du uppen??

Ceikor :
@killagodzilla: Dir gehst gut ja? Geh zu Mutti heulen^^ Ich habe hier niemanden fertig gemacht, ich habe nur klip und klar gesagt was los ist, wenn ihr damit nicht zurecht kommt heult los, ich werd euch nicht daran hindern^^ und noch was das war OT Wink und auf mir immer rumhacken wenn ich OT werde *lol* Kinder Kinder^^

@Littlefighter19: Ja ok dennoch fand ich diesen eintrag lustig^^ hab halt mein eigenen Humor^^
Nächstes mal erst aktualisieren und dann Posten Wink

@Cha0z: Was willst du uppen??


PSCrypter v2.0 VLF Port by Cha0z

Ich bin schon fertig
Ich kann auch den source uppen.
Seiten: 1 2
Referenz-URLs