- Cleanup the code

- Allow to build with the command line
This commit is contained in:
Regis Cosnier 2019-03-15 20:42:54 +01:00
parent fac5057e93
commit 539e09e4a5
6 changed files with 89 additions and 65 deletions

View file

@ -23,7 +23,7 @@ QUICK START
NOTES
- When using a custom KML script by selecting a folder, you must take care of the case sensitivity of its dependencies.
- When using a custom KML script by selecting a folder, you must take care of the case sensitivity of its dependency files.
NOT WORKING YET
@ -86,8 +86,10 @@ You should have received a copy of the GNU General Public License along with thi
Note: some included files are not covered by the GPL; these include ROM image files (copyrighted by HP), KML files and faceplate images (copyrighted by their authors).
The Eric's Real scripts ("real*.kml" and "real*.bmp") are embedded in this application with the kind permission of Eric Rechlin.
TODO
- Sometimes, it seems in authentic calculator slow speed and it should not be.
- Sometimes, it seems to be in authentic calculator slow speed and it should not be.
- Add a separation between the pixels (Suggestion from Jaime Meza)
- Sometimes the "busy" annunciator gets stuck
- Add KML script loading dependencies fallback to the inner ROM (and may be KML include?)
@ -95,3 +97,34 @@ TODO
- Add a true fullscreen mode under the status bar and the bottom buttons
- Improve the access to the menu
- Change the logo following the template
BUILD
Emu48 for Android is built with Android Studio 3.3 (2019).
And to generate a installable APK file with a real Android device, it MUST be signed.
Either use Android Studio:
* In menu "Build"
* Select "Generate Signed Bundle / APK..."
* Select "APK", then "Next"
* "Create new..." (or use an existing key store file)
* Enter "Key store password", "Key alias" and "Key password", then "Next"
* Select a "Destination folder:"
* Select the "Build Variants:" "release"
* Select the "Signature Versions:" "V1" (V1 only)
* Finish
Or in the command line, build the signed APK:
* In the root folder, create a keystore.jks file with:
** keytool -genkey -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0
** keytool -genkeypair -v -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0
* create the file ./keystore.properties , with the following properties:
storeFile=../keystore.jks
storePassword=myPassword
keyAlias=key0
keyPassword=myPassword
* gradlew build
* The APK should be in the folder app/build/outputs/apk/release
Then, you should be able to use this fresh APK file with an Android device.

View file

@ -1,5 +1,32 @@
apply plugin: 'com.android.application'
// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
def canSign = false
if(keystorePropertiesFile.exists()) {
canSign = true
println("The release flavor will signed in app/build/outputs/apk/release/app-release.apk")
// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
} else {
println("""
The keystore.properties file is not found, so, you will not be able to install an unsigned APK in an Android device.
Please, in the root folder, create a keystore.jks file with the command:
keytool -genkey -keystore ./keystore.jks -keyalg RSA -validity 9125 -alias key0
and create the file ./keystore.properties , with the following properties:
storeFile=../keystore.jks
storePassword=myPassword
keyAlias=key0
keyPassword=myPassword
""")
}
android {
compileSdkVersion 28
defaultConfig {
@ -17,10 +44,29 @@ android {
}
}
}
// if(project.hasProperty("MyProject.properties")
// && new File(project.property("MyProject.properties")).exists()) {
if(canSign) {
signingConfigs {
release {
// storeFile new File(keystoreProperties['storeFile'])
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
v1SigningEnabled true
v2SigningEnabled false
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if(canSign) {
signingConfig signingConfigs.release
}
}
}
externalNativeBuild {

View file

@ -37,12 +37,6 @@ extern void buttonUp(int x, int y);
extern void keyDown(int virtKey);
extern void keyUp(int virtKey);
extern void OnBackupSave();
extern void OnBackupRestore();
extern void OnBackupDelete();
//JNIEnv *getJNIEnvironment();
JavaVM *java_machine;
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
@ -283,7 +277,7 @@ JNIEXPORT void JNICALL Java_org_emulator_forty_eight_NativeLib_start(JNIEnv *env
// read emulator settings
GetCurrentDirectory(ARRAYSIZEOF(szCurrentDirectory),szCurrentDirectory);
ReadSettings();
//ReadSettings();
_tcscpy(szCurrentDirectory, "");
_tcscpy(szEmuDirectory, "assets/calculators/");

View file

@ -24,7 +24,6 @@ size_t assetsPrefixLength;
const TCHAR * contentScheme = _T("content://");
size_t contentSchemeLength;
const TCHAR * documentScheme = _T("document:");
//static HDC mainPaintDC = NULL;
struct timerEvent {
BOOL valid;
int timerId;
@ -208,7 +207,7 @@ HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
return handle;
}
}
return INVALID_HANDLE_VALUE;
return (HANDLE) INVALID_HANDLE_VALUE;
}
BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) {
@ -338,27 +337,7 @@ BOOL UnmapViewOfFile(LPCVOID lpBaseAddress) {
for (int i = 0; i < MAX_FILE_MAPPING_HANDLE; ++i) {
HANDLE fileMappingHandle = fileMappingHandles[i];
if(fileMappingHandle && lpBaseAddress == fileMappingHandle->fileMappingAddress) {
// Only save the file manually (for Port2 actually)
// if(fileMappingHandle->fileMappingProtect == PAGE_READWRITE) {
// if(fileMappingHandle->handleType == HANDLE_TYPE_FILE_MAPPING) {
// // munmap does not seem to work, so:
// size_t numberOfBytesToWrite = fileMappingHandle->fileMappingSize - fileMappingHandle->fileMappingOffset;
// off_t currentPosition = lseek(fileMappingHandle->fileDescriptor, 0, SEEK_CUR);
// lseek(fileMappingHandle->fileDescriptor, fileMappingHandle->fileMappingOffset, SEEK_SET);
// write(fileMappingHandle->fileDescriptor, fileMappingHandle->fileMappingAddress, numberOfBytesToWrite);
// lseek(fileMappingHandle->fileDescriptor, currentPosition, SEEK_SET);
// result = munmap(lpBaseAddress, fileMappingHandle->fileMappingSize);
// } else if(fileMappingHandle->handleType == HANDLE_TYPE_FILE_MAPPING_CONTENT) {
// size_t numberOfBytesToWrite = fileMappingHandle->fileMappingSize - fileMappingHandle->fileMappingOffset;
// off_t currentPosition = lseek(fileMappingHandle->fileDescriptor, 0, SEEK_CUR);
// lseek(fileMappingHandle->fileDescriptor, fileMappingHandle->fileMappingOffset, SEEK_SET);
// write(fileMappingHandle->fileDescriptor, fileMappingHandle->fileMappingAddress, numberOfBytesToWrite);
// lseek(fileMappingHandle->fileDescriptor, currentPosition, SEEK_SET);
// } else if(fileMappingHandle->handleType == HANDLE_TYPE_FILE_MAPPING_ASSET) {
// // No need to unmap
// result = 0;
// }
// }
// Only save the file manually (for Port2 actually)
fileMappingHandles[i] = NULL;
break;
}
@ -761,21 +740,6 @@ BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpS
return 0;
}
/*
void SetTimer(void *, TimerType id, int msec, void *)
{
switch(id) {
case TIME_SHOW:
doc_manager->getCurrent()->SetShowTimer(msec);
break;
case TIME_NEXT:
doc_manager->getCurrent()->SetNextTimer(msec);
break;
}
}
*/
HGLOBAL WINAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes) {
return malloc(dwBytes);
}
@ -876,14 +840,6 @@ MMRESULT waveOutOpen(LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWOR
handle->pwfx = (WAVEFORMATEX *) pwfx;
handle->uDeviceID = uDeviceID;
//SLObjectItf engineObject = NULL;
//SLObjectItf outputMixObject = NULL;
//SLObjectItf bqPlayerObject = NULL;
//pthread_mutex_t audioEngineLock = PTHREAD_MUTEX_INITIALIZER;
//handle->audioEngineLock = PTHREAD_MUTEX_INITIALIZER;
SLresult result;
// create engine
@ -1674,17 +1630,14 @@ BOOL GdiFlush(void) {
return 0;
}
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint) {
//hWindowDC;
// if(!mainPaintDC)
// mainPaintDC = CreateCompatibleDC(NULL);
if(lpPaint) {
memset(lpPaint, 0, sizeof(PAINTSTRUCT));
lpPaint->fErase = TRUE;
lpPaint->hdc = hWindowDC; //mainPaintDC;
lpPaint->rcPaint.right = (short) nBackgroundW; //androidBitmapInfo.width; // - 1;
lpPaint->rcPaint.bottom = (short) nBackgroundH; //androidBitmapInfo.height; // - 1;
lpPaint->hdc = hWindowDC;
lpPaint->rcPaint.right = (short) nBackgroundW;
lpPaint->rcPaint.bottom = (short) nBackgroundH;
}
return hWindowDC; //mainPaintDC;
return hWindowDC;
}
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint) {
mainViewUpdateCallback();

View file

@ -225,7 +225,7 @@ enum
FILE_MAP_COPY,
//errors
INVALID_HANDLE_VALUE = -1,
INVALID_HANDLE_VALUE = -1,
ERROR_ALREADY_EXISTS = 1
};

View file

@ -13,5 +13,3 @@ org.gradle.jvmargs=-Xmx1536m
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true