mirror of
https://github.com/Interlisp/maiko.git
synced 2026-03-21 00:38:06 +00:00
Compare commits
13 Commits
nhb-update
...
fgh_github
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e68fb0dd57 | ||
|
|
11978b714f | ||
|
|
d55b9e55c6 | ||
|
|
666cceff7e | ||
|
|
cea720feb2 | ||
|
|
a3f3775c0a | ||
|
|
d2d4f18ade | ||
|
|
c3b7d1707d | ||
|
|
532731b716 | ||
|
|
29e5b374fe | ||
|
|
0c7b1cccd4 | ||
|
|
86ba485c3e | ||
|
|
b88ea87fa8 |
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: Build
|
name: Build
|
||||||
|
|
||||||
on: [push, pull_request]
|
on: [push, pull_request, workflow_dispatch]
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04]
|
os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Install X11 dependencies on MacOS
|
- name: Install X11 dependencies on MacOS
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04]
|
os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
|
||||||
env:
|
env:
|
||||||
BUILD_TYPE: Release
|
BUILD_TYPE: Release
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
2
.github/workflows/buildBuilderImage.yml
vendored
2
.github/workflows/buildBuilderImage.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
|||||||
|
|
||||||
buildBuilder:
|
buildBuilder:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checkout maiko
|
# Checkout maiko
|
||||||
|
|||||||
18
.github/workflows/buildRelease.yml
vendored
18
.github/workflows/buildRelease.yml
vendored
@@ -84,7 +84,7 @@ jobs:
|
|||||||
# the result of a workflow_dispatch or a workflow_call
|
# the result of a workflow_dispatch or a workflow_call
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
draft: ${{ steps.one.outputs.draft }}
|
draft: ${{ steps.one.outputs.draft }}
|
||||||
force: ${{ steps.one.outputs.force }}
|
force: ${{ steps.one.outputs.force }}
|
||||||
@@ -116,7 +116,7 @@ jobs:
|
|||||||
|
|
||||||
sentry:
|
sentry:
|
||||||
needs: inputs
|
needs: inputs
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ jobs:
|
|||||||
|| needs.inputs.outputs.force == 'true'
|
|| needs.inputs.outputs.force == 'true'
|
||||||
)
|
)
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
# Checkout the actions for this repo owner
|
# Checkout the actions for this repo owner
|
||||||
@@ -185,14 +185,14 @@ jobs:
|
|||||||
|
|
||||||
# Setup the Docker Machine Emulation environment.
|
# Setup the Docker Machine Emulation environment.
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
with:
|
with:
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
|
||||||
# Setup the Docker Buildx funtion
|
# Setup the Docker Buildx funtion
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
# Do the Docker Build using the Dockerfile in the repository we
|
# Do the Docker Build using the Dockerfile in the repository we
|
||||||
# checked out. Save the results in a directory under /tmp to be used
|
# checked out. Save the results in a directory under /tmp to be used
|
||||||
@@ -204,7 +204,7 @@ jobs:
|
|||||||
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
||||||
#
|
#
|
||||||
- name: Build Docker Image and Save It Locally
|
- name: Build Docker Image and Save It Locally
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
builder: ${{ steps.buildx.outputs.name }}
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
build-args: |
|
build-args: |
|
||||||
@@ -266,7 +266,7 @@ jobs:
|
|||||||
|| needs.inputs.outputs.force == 'true'
|
|| needs.inputs.outputs.force == 'true'
|
||||||
)
|
)
|
||||||
|
|
||||||
runs-on: macos-latest
|
runs-on: macos-12
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
@@ -487,7 +487,7 @@ jobs:
|
|||||||
|| needs.inputs.outputs.force == 'true'
|
|| needs.inputs.outputs.force == 'true'
|
||||||
)
|
)
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
@@ -554,7 +554,7 @@ jobs:
|
|||||||
|
|
||||||
complete:
|
complete:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||||
|
|||||||
@@ -87,11 +87,11 @@ IF(MAIKO_DISPLAY_X11)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(MAIKO_DISPLAY_SDL STREQUAL "2")
|
IF(MAIKO_DISPLAY_SDL STREQUAL "2")
|
||||||
FIND_PACKAGE(SDL2 REQUIRED)
|
FIND_PACKAGE(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
|
||||||
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
||||||
"-DSDL=2"
|
"-DSDL=2"
|
||||||
)
|
)
|
||||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL2_INCLUDE_DIRS}")
|
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL2::Headers)
|
||||||
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL2::SDL2)
|
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL2::SDL2)
|
||||||
SET(MAIKO_DISPLAY_SDL_SRCS
|
SET(MAIKO_DISPLAY_SDL_SRCS
|
||||||
src/sdl.c
|
src/sdl.c
|
||||||
@@ -101,11 +101,11 @@ IF(MAIKO_DISPLAY_SDL STREQUAL "2")
|
|||||||
)
|
)
|
||||||
MESSAGE("-- Configured for SDL2 display")
|
MESSAGE("-- Configured for SDL2 display")
|
||||||
ELSEIF(MAIKO_DISPLAY_SDL STREQUAL "3")
|
ELSEIF(MAIKO_DISPLAY_SDL STREQUAL "3")
|
||||||
FIND_PACKAGE(SDL3 REQUIRED)
|
FIND_PACKAGE(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
||||||
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
||||||
"-DSDL=3"
|
"-DSDL=3"
|
||||||
)
|
)
|
||||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL3_INCLUDE_DIRS}")
|
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL3::Headers)
|
||||||
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL3::SDL3)
|
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL3::SDL3)
|
||||||
SET(MAIKO_DISPLAY_SDL_SRCS
|
SET(MAIKO_DISPLAY_SDL_SRCS
|
||||||
src/sdl.c
|
src/sdl.c
|
||||||
|
|||||||
34
inc/gcdata.h
34
inc/gcdata.h
@@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
#include "lispemul.h" /* for LispPTR, DLword */
|
#include "lispemul.h" /* for LispPTR, DLword */
|
||||||
#include "version.h" /* for USHORT */
|
#include "version.h" /* for BIGVM */
|
||||||
|
|
||||||
#define ADDREF 0 /* for gclookup routine. */
|
#define ADDREF 0 /* for gclookup routine. */
|
||||||
#define DELREF 1 /* for gclookup routine. */
|
#define DELREF 1 /* for gclookup routine. */
|
||||||
@@ -131,10 +131,10 @@
|
|||||||
#ifdef BIGVM
|
#ifdef BIGVM
|
||||||
struct hashentry
|
struct hashentry
|
||||||
{ /* GC hashtable entry */
|
{ /* GC hashtable entry */
|
||||||
unsigned short count :15;
|
DLword count :15;
|
||||||
unsigned short stackref :1;
|
DLword stackref :1;
|
||||||
unsigned short segnum :15;
|
DLword segnum :15;
|
||||||
unsigned short collision :1;
|
DLword collision :1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct htlinkptr
|
struct htlinkptr
|
||||||
@@ -162,10 +162,10 @@ struct htoverflow
|
|||||||
#else
|
#else
|
||||||
struct hashentry
|
struct hashentry
|
||||||
{ /* GC hashtable entry */
|
{ /* GC hashtable entry */
|
||||||
USHORT count :6;
|
DLword count :6;
|
||||||
USHORT stackref :1;
|
DLword stackref :1;
|
||||||
USHORT segnum :8;
|
DLword segnum :8;
|
||||||
USHORT collision :1;
|
DLword collision :1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct htlinkptr
|
struct htlinkptr
|
||||||
@@ -200,10 +200,10 @@ struct htoverflow
|
|||||||
#ifdef BIGVM
|
#ifdef BIGVM
|
||||||
struct hashentry
|
struct hashentry
|
||||||
{ /* GC hashtable entry */
|
{ /* GC hashtable entry */
|
||||||
USHORT collision :1;
|
DLword collision :1;
|
||||||
USHORT segnum :15;
|
DLword segnum :15;
|
||||||
USHORT stackref :1;
|
DLword stackref :1;
|
||||||
USHORT count :15;
|
DLword count :15;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct htlinkptr
|
struct htlinkptr
|
||||||
@@ -231,10 +231,10 @@ struct htoverflow
|
|||||||
#else
|
#else
|
||||||
struct hashentry
|
struct hashentry
|
||||||
{ /* GC hashtable entry */
|
{ /* GC hashtable entry */
|
||||||
USHORT collision :1;
|
DLword collision :1;
|
||||||
USHORT segnum :8;
|
DLword segnum :8;
|
||||||
USHORT stackref :1;
|
DLword stackref :1;
|
||||||
USHORT count :6;
|
DLword count :6;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct htlinkptr
|
struct htlinkptr
|
||||||
|
|||||||
@@ -267,22 +267,22 @@ struct state {
|
|||||||
|
|
||||||
/* For bit test */
|
/* For bit test */
|
||||||
typedef struct wbits {
|
typedef struct wbits {
|
||||||
USHORT LSB : 1;
|
DLword LSB : 1;
|
||||||
USHORT B14 : 1;
|
DLword B14 : 1;
|
||||||
USHORT B13 : 1;
|
DLword B13 : 1;
|
||||||
USHORT B12 : 1;
|
DLword B12 : 1;
|
||||||
USHORT B11 : 1;
|
DLword B11 : 1;
|
||||||
USHORT B10 : 1;
|
DLword B10 : 1;
|
||||||
USHORT B9 : 1;
|
DLword B9 : 1;
|
||||||
USHORT B8 : 1;
|
DLword B8 : 1;
|
||||||
USHORT B7 : 1;
|
DLword B7 : 1;
|
||||||
USHORT B6 : 1;
|
DLword B6 : 1;
|
||||||
USHORT B5 : 1;
|
DLword B5 : 1;
|
||||||
USHORT B4 : 1;
|
DLword B4 : 1;
|
||||||
USHORT B3 : 1;
|
DLword B3 : 1;
|
||||||
USHORT B2 : 1;
|
DLword B2 : 1;
|
||||||
USHORT B1 : 1;
|
DLword B1 : 1;
|
||||||
USHORT xMSB : 1;
|
DLword xMSB : 1;
|
||||||
} WBITS;
|
} WBITS;
|
||||||
|
|
||||||
#define PUTBASEBIT68K(base68k, offset, bitvalue) \
|
#define PUTBASEBIT68K(base68k, offset, bitvalue) \
|
||||||
|
|||||||
8
inc/rawcolordefs.h
Normal file
8
inc/rawcolordefs.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef RAWCOLORDEFS_H
|
||||||
|
#define RAWCOLORDEFS_H 1
|
||||||
|
#include "lispemul.h" /* for LispPTR */
|
||||||
|
void C_slowbltchar(LispPTR *args);
|
||||||
|
LispPTR Colorize_Bitmap(LispPTR args[]);
|
||||||
|
void Draw_8BppColorLine(LispPTR *args);
|
||||||
|
void Uncolorize_Bitmap(LispPTR args[]);
|
||||||
|
#endif
|
||||||
114
inc/stack.h
114
inc/stack.h
@@ -79,22 +79,22 @@ typedef struct fnhead {
|
|||||||
} FNHEAD;
|
} FNHEAD;
|
||||||
|
|
||||||
typedef struct frameex1 {
|
typedef struct frameex1 {
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
unsigned short fast : 1;
|
DLword fast : 1;
|
||||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||||
unsigned short incall : 1;
|
DLword incall : 1;
|
||||||
unsigned short validnametable : 1;
|
DLword validnametable : 1;
|
||||||
/* 0: look for FunctionHeader
|
/* 0: look for FunctionHeader
|
||||||
1: look for NameTable on this FrameEx */
|
1: look for NameTable on this FrameEx */
|
||||||
unsigned short nopush : 1;
|
DLword nopush : 1;
|
||||||
unsigned short usecount : 8;
|
DLword usecount : 8;
|
||||||
DLword alink; /* alink pointer (Low addr) */
|
DLword alink; /* alink pointer (Low addr) */
|
||||||
#ifdef BIGVM
|
#ifdef BIGVM
|
||||||
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
||||||
#else
|
#else
|
||||||
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
||||||
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||||
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
DLword nextblock; /* pointer to FreeStackBlock */
|
DLword nextblock; /* pointer to FreeStackBlock */
|
||||||
DLword pc; /* Program counter */
|
DLword pc; /* Program counter */
|
||||||
@@ -102,23 +102,23 @@ typedef struct frameex1 {
|
|||||||
LispPTR nametable; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
LispPTR nametable; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
||||||
#else
|
#else
|
||||||
DLword lonametable; /* ptr to NameTable of this FrameEx (Low addr) */
|
DLword lonametable; /* ptr to NameTable of this FrameEx (Low addr) */
|
||||||
unsigned short hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */
|
DLword hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */
|
||||||
unsigned short hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
DLword hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
DLword blink; /* blink pointer (Low addr) */
|
DLword blink; /* blink pointer (Low addr) */
|
||||||
DLword clink; /* clink pointer (Low addr) */
|
DLword clink; /* clink pointer (Low addr) */
|
||||||
} FX;
|
} FX;
|
||||||
|
|
||||||
typedef struct frameex2 {
|
typedef struct frameex2 {
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
unsigned short fast : 1;
|
DLword fast : 1;
|
||||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||||
unsigned short incall : 1;
|
DLword incall : 1;
|
||||||
unsigned short validnametable : 1;
|
DLword validnametable : 1;
|
||||||
/* 0: look for FunctionHeader
|
/* 0: look for FunctionHeader
|
||||||
1: look for NameTable on this FrameEx */
|
1: look for NameTable on this FrameEx */
|
||||||
unsigned short nopush : 1;
|
DLword nopush : 1;
|
||||||
unsigned short usecount : 8;
|
DLword usecount : 8;
|
||||||
DLword alink; /* alink pointer (Low addr) */
|
DLword alink; /* alink pointer (Low addr) */
|
||||||
LispPTR fnheader; /* pointer to FunctionHeader */
|
LispPTR fnheader; /* pointer to FunctionHeader */
|
||||||
DLword nextblock; /* pointer to FreeStackBlock */
|
DLword nextblock; /* pointer to FreeStackBlock */
|
||||||
@@ -135,19 +135,19 @@ typedef struct fxblock {
|
|||||||
} FXBLOCK;
|
} FXBLOCK;
|
||||||
|
|
||||||
typedef struct basic_frame {
|
typedef struct basic_frame {
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
unsigned short nil : 3;
|
DLword nil : 3;
|
||||||
unsigned short residual : 1;
|
DLword residual : 1;
|
||||||
unsigned short padding : 1;
|
DLword padding : 1;
|
||||||
unsigned short usecnt : 8;
|
DLword usecnt : 8;
|
||||||
DLword ivar; /* stk offset of IVARs for this frame ?? */
|
DLword ivar; /* stk offset of IVARs for this frame ?? */
|
||||||
|
|
||||||
} Bframe;
|
} Bframe;
|
||||||
|
|
||||||
typedef struct stkword {
|
typedef struct stkword {
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
unsigned short nil : 5;
|
DLword nil : 5;
|
||||||
unsigned short usecount : 8;
|
DLword usecount : 8;
|
||||||
} StackWord;
|
} StackWord;
|
||||||
|
|
||||||
typedef struct stack_block {
|
typedef struct stack_block {
|
||||||
@@ -185,33 +185,33 @@ typedef struct fnhead {
|
|||||||
unsigned nil3 : 2; /* not used */
|
unsigned nil3 : 2; /* not used */
|
||||||
unsigned nil2 : 2; /* not used */
|
unsigned nil2 : 2; /* not used */
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
unsigned short argtype : 2; /* ?? */
|
DLword argtype : 2; /* ?? */
|
||||||
unsigned short byteswapped : 1; /* code was reswapped. */
|
DLword byteswapped : 1; /* code was reswapped. */
|
||||||
unsigned short nil4 : 1; /* not used, prev: native translated? */
|
DLword nil4 : 1; /* not used, prev: native translated? */
|
||||||
unsigned short fvaroffset : 8;
|
DLword fvaroffset : 8;
|
||||||
/* DLword offset from head of NameTable */
|
/* DLword offset from head of NameTable */
|
||||||
unsigned short nlocals : 8; /* ?? */
|
DLword nlocals : 8; /* ?? */
|
||||||
DLword ntsize; /* size of NameTable */
|
DLword ntsize; /* size of NameTable */
|
||||||
/* NameTable of variable length is following with this structure. */
|
/* NameTable of variable length is following with this structure. */
|
||||||
} FNHEAD;
|
} FNHEAD;
|
||||||
|
|
||||||
typedef struct frameex1 {
|
typedef struct frameex1 {
|
||||||
DLword alink; /* alink pointer (Low addr) */
|
DLword alink; /* alink pointer (Low addr) */
|
||||||
unsigned short usecount : 8;
|
DLword usecount : 8;
|
||||||
unsigned short nopush : 1;
|
DLword nopush : 1;
|
||||||
unsigned short validnametable : 1;
|
DLword validnametable : 1;
|
||||||
/* 0: look for FunctionHeader
|
/* 0: look for FunctionHeader
|
||||||
1: look for NameTable on this FrameEx */
|
1: look for NameTable on this FrameEx */
|
||||||
unsigned short incall : 1;
|
DLword incall : 1;
|
||||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||||
unsigned short fast : 1;
|
DLword fast : 1;
|
||||||
unsigned short flags : 3; /* hi word */
|
DLword flags : 3; /* hi word */
|
||||||
|
|
||||||
#ifdef BIGVM
|
#ifdef BIGVM
|
||||||
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
||||||
#else
|
#else
|
||||||
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||||
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||||
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
|
|
||||||
@@ -221,8 +221,8 @@ typedef struct frameex1 {
|
|||||||
#ifdef BIGVM
|
#ifdef BIGVM
|
||||||
LispPTR nametable; /* pointer to NameTable of this FX (Hi2 addr) */
|
LispPTR nametable; /* pointer to NameTable of this FX (Hi2 addr) */
|
||||||
#else
|
#else
|
||||||
unsigned short hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */
|
DLword hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */
|
||||||
unsigned short hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */
|
DLword hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */
|
||||||
DLword lonametable; /* pointer to NameTable of this FX (Low addr) */
|
DLword lonametable; /* pointer to NameTable of this FX (Low addr) */
|
||||||
#endif /* BIGVM */
|
#endif /* BIGVM */
|
||||||
|
|
||||||
@@ -232,15 +232,15 @@ typedef struct frameex1 {
|
|||||||
|
|
||||||
typedef struct frameex2 {
|
typedef struct frameex2 {
|
||||||
DLword alink; /* alink pointer (Low addr) */
|
DLword alink; /* alink pointer (Low addr) */
|
||||||
unsigned short usecount : 8;
|
DLword usecount : 8;
|
||||||
unsigned short nopush : 1;
|
DLword nopush : 1;
|
||||||
unsigned short validnametable : 1;
|
DLword validnametable : 1;
|
||||||
/* 0: look for FunctionHeader
|
/* 0: look for FunctionHeader
|
||||||
1: look for NameTable on this FrameEx */
|
1: look for NameTable on this FrameEx */
|
||||||
unsigned short incall : 1;
|
DLword incall : 1;
|
||||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||||
unsigned short fast : 1;
|
DLword fast : 1;
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
|
|
||||||
LispPTR fnheader; /* pointer to FunctionHeader (swapped) */
|
LispPTR fnheader; /* pointer to FunctionHeader (swapped) */
|
||||||
|
|
||||||
@@ -261,18 +261,18 @@ typedef struct fxblock {
|
|||||||
|
|
||||||
typedef struct basic_frame {
|
typedef struct basic_frame {
|
||||||
DLword ivar;
|
DLword ivar;
|
||||||
unsigned short usecnt : 8;
|
DLword usecnt : 8;
|
||||||
unsigned short padding : 1;
|
DLword padding : 1;
|
||||||
unsigned short residual : 1;
|
DLword residual : 1;
|
||||||
unsigned short nil : 3;
|
DLword nil : 3;
|
||||||
unsigned short flags : 3;
|
DLword flags : 3;
|
||||||
|
|
||||||
} Bframe;
|
} Bframe;
|
||||||
|
|
||||||
typedef struct stkword {
|
typedef struct stkword {
|
||||||
USHORT usecount : 8;
|
DLword usecount : 8;
|
||||||
USHORT nil : 5;
|
DLword nil : 5;
|
||||||
USHORT flags : 3;
|
DLword flags : 3;
|
||||||
} StackWord;
|
} StackWord;
|
||||||
|
|
||||||
typedef struct stack_block {
|
typedef struct stack_block {
|
||||||
|
|||||||
@@ -227,9 +227,6 @@ typedef unsigned char u_char;
|
|||||||
typedef unsigned long u_int;
|
typedef unsigned long u_int;
|
||||||
typedef unsigned short u_short;
|
typedef unsigned short u_short;
|
||||||
#undef UNALIGNED_FETCH_OK
|
#undef UNALIGNED_FETCH_OK
|
||||||
typedef unsigned USHORT;
|
|
||||||
#else
|
|
||||||
typedef unsigned short USHORT;
|
|
||||||
#endif /* DOS */
|
#endif /* DOS */
|
||||||
|
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
|
|||||||
@@ -589,8 +589,8 @@ void bt1(FX *startFX) {
|
|||||||
BT_morep;
|
BT_morep;
|
||||||
while ((fnobj->framename != ATOM_T) && (fx->alink != 11)) {
|
while ((fnobj->framename != ATOM_T) && (fx->alink != 11)) {
|
||||||
if (fnum > URMAXFXNUM - 1) {
|
if (fnum > URMAXFXNUM - 1) {
|
||||||
/* Internal buf overflow,more than 100 stacks */
|
/* Internal buf overflow, too many stack frames */
|
||||||
printf("***There are more than 100 stack frames.\n");
|
printf("***There are more than %d stack frames.\n", URMAXFXNUM);
|
||||||
printf(
|
printf(
|
||||||
"If you want to continue, Uraid will smash its internal table for FX pointer. Do you "
|
"If you want to continue, Uraid will smash its internal table for FX pointer. Do you "
|
||||||
"accept?(Y or N)\n");
|
"accept?(Y or N)\n");
|
||||||
|
|||||||
@@ -552,15 +552,15 @@ void printarrayblock(LispPTR base) {
|
|||||||
printf(" Length: %d cells.\n\n", bbase->arlen);
|
printf(" Length: %d cells.\n\n", bbase->arlen);
|
||||||
|
|
||||||
addr = ((LispPTR *)bbase) - 20;
|
addr = ((LispPTR *)bbase) - 20;
|
||||||
for (; addr < (LispPTR *)bbase; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
for (; addr < (LispPTR *)bbase; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||||
printf("%p %8x <- array header\n", (void *)addr, *addr);
|
printf("%16p %8x <- array header\n", (void *)addr, *addr);
|
||||||
addr++;
|
addr++;
|
||||||
for (; addr < (LispPTR *)bbase + 20; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
for (; addr < (LispPTR *)bbase + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||||
printf(". . .\n");
|
printf(". . .\n");
|
||||||
|
|
||||||
addr = ((LispPTR *)btrailer) - 20;
|
addr = ((LispPTR *)btrailer) - 20;
|
||||||
for (; addr < (LispPTR *)btrailer; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
for (; addr < (LispPTR *)btrailer; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||||
printf("%p %8x <- array trailer\n", (void *)addr, *addr);
|
printf("%16p %8x <- array trailer\n", (void *)addr, *addr);
|
||||||
addr++;
|
addr++;
|
||||||
for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||||
}
|
}
|
||||||
|
|||||||
26
src/main.c
26
src/main.c
@@ -243,7 +243,7 @@ int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will cal
|
|||||||
extern DspInterface currentdsp;
|
extern DspInterface currentdsp;
|
||||||
#endif /* DOS || XWINDOW */
|
#endif /* DOS || XWINDOW */
|
||||||
#ifdef SDL
|
#ifdef SDL
|
||||||
extern int init_SDL(char*, int, int, int);
|
#include "sdldefs.h" /* for init_SDL */
|
||||||
#endif
|
#endif
|
||||||
extern const time_t MDate;
|
extern const time_t MDate;
|
||||||
extern int nokbdflag;
|
extern int nokbdflag;
|
||||||
@@ -324,6 +324,15 @@ extern char foregroundColorName[64];
|
|||||||
char backgroundColorName[64] = {0};
|
char backgroundColorName[64] = {0};
|
||||||
extern char backgroundColorName[64];
|
extern char backgroundColorName[64];
|
||||||
#endif
|
#endif
|
||||||
|
char windowTitle[255] = "Medley";
|
||||||
|
extern char windowTitle[255];
|
||||||
|
int lispDisplayRequestedWidth = 1024;
|
||||||
|
extern int lispDisplayRequestedWidth;
|
||||||
|
int lispDisplayRequestedHeight = 768;
|
||||||
|
extern int lispDisplayRequestedHeight;
|
||||||
|
int pixelScale = 1;
|
||||||
|
extern int pixelScale;
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* M A I N E N T R Y P O I N T */
|
/* M A I N E N T R Y P O I N T */
|
||||||
@@ -338,9 +347,6 @@ int main(int argc, char *argv[])
|
|||||||
extern int TIMER_INTERVAL;
|
extern int TIMER_INTERVAL;
|
||||||
extern fd_set LispReadFds;
|
extern fd_set LispReadFds;
|
||||||
long tmpint;
|
long tmpint;
|
||||||
int width = 1024, height = 768;
|
|
||||||
int pixelscale = 1;
|
|
||||||
char *windowtitle = "Medley";
|
|
||||||
|
|
||||||
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
|
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
|
||||||
if (dld_find_executable(argv[0]) == 0) {
|
if (dld_find_executable(argv[0]) == 0) {
|
||||||
@@ -365,7 +371,6 @@ int main(int argc, char *argv[])
|
|||||||
// arg processing changes argc/argv
|
// arg processing changes argc/argv
|
||||||
if (argc > 1 && argv[1][0] != '-') {
|
if (argc > 1 && argv[1][0] != '-') {
|
||||||
strncpy(sysout_name_first_arg, argv[1], MAXPATHLEN);
|
strncpy(sysout_name_first_arg, argv[1], MAXPATHLEN);
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -468,7 +473,7 @@ int main(int argc, char *argv[])
|
|||||||
#ifdef SDL
|
#ifdef SDL
|
||||||
else if ((strcmp(argv[i], "-sc") == 0) || (strcmp(argv[i], "-SC") == 0)) {
|
else if ((strcmp(argv[i], "-sc") == 0) || (strcmp(argv[i], "-SC") == 0)) {
|
||||||
if (argc > ++i) {
|
if (argc > ++i) {
|
||||||
int read = sscanf(argv[i], "%dx%d", &width, &height);
|
int read = sscanf(argv[i], "%dx%d", &lispDisplayRequestedWidth, &lispDisplayRequestedHeight);
|
||||||
if(read != 2) {
|
if(read != 2) {
|
||||||
(void)fprintf(stderr, "Could not parse -sc argument %s\n", argv[i]);
|
(void)fprintf(stderr, "Could not parse -sc argument %s\n", argv[i]);
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -479,7 +484,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
} else if ((strcmp(argv[i], "-pixelscale") == 0) || (strcmp(argv[i], "-PIXELSCALE") == 0)) {
|
} else if ((strcmp(argv[i], "-pixelscale") == 0) || (strcmp(argv[i], "-PIXELSCALE") == 0)) {
|
||||||
if (argc > ++i) {
|
if (argc > ++i) {
|
||||||
int read = sscanf(argv[i], "%d", &pixelscale);
|
int read = sscanf(argv[i], "%d", &pixelScale);
|
||||||
if(read != 1) {
|
if(read != 1) {
|
||||||
(void)fprintf(stderr, "Could not parse -pixelscale argument %s\n", argv[i]);
|
(void)fprintf(stderr, "Could not parse -pixelscale argument %s\n", argv[i]);
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -491,7 +496,7 @@ int main(int argc, char *argv[])
|
|||||||
} else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "-T") == 0)
|
} else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "-T") == 0)
|
||||||
|| (strcmp(argv[i], "-title") == 0) || (strcmp(argv[i], "-TITLE") == 0)) {
|
|| (strcmp(argv[i], "-title") == 0) || (strcmp(argv[i], "-TITLE") == 0)) {
|
||||||
if (argc > ++i) {
|
if (argc > ++i) {
|
||||||
windowtitle = argv[i];
|
strncpy(windowTitle, argv[i], sizeof(windowTitle) - 1);
|
||||||
} else {
|
} else {
|
||||||
(void)fprintf(stderr, "Missing argument after -title\n");
|
(void)fprintf(stderr, "Missing argument after -title\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -711,13 +716,12 @@ int main(int argc, char *argv[])
|
|||||||
make_dsp_instance(currentdsp, 0, 0, 0, 1); /* All defaults the first time */
|
make_dsp_instance(currentdsp, 0, 0, 0, 1); /* All defaults the first time */
|
||||||
#endif /* DOS || XWINDOW */
|
#endif /* DOS || XWINDOW */
|
||||||
#if defined(SDL)
|
#if defined(SDL)
|
||||||
init_SDL(windowtitle, width, height, pixelscale);
|
init_SDL(windowTitle, lispDisplayRequestedWidth, lispDisplayRequestedHeight, pixelScale);
|
||||||
#endif /* SDL */
|
#endif /* SDL */
|
||||||
/* Load sysout to VM space and returns real sysout_size(not 0) */
|
/* Load sysout to VM space and returns real sysout_size(not 0) */
|
||||||
sysout_size = sysout_loader(sysout_name, sysout_size);
|
sysout_size = sysout_loader(sysout_name, sysout_size);
|
||||||
|
|
||||||
build_lisp_map(); /* built up map */
|
build_lisp_map(); /* build up map */
|
||||||
|
|
||||||
init_ifpage(sysout_size); /* init interface page */
|
init_ifpage(sysout_size); /* init interface page */
|
||||||
init_iopage();
|
init_iopage();
|
||||||
init_miscstats();
|
init_miscstats();
|
||||||
|
|||||||
@@ -419,7 +419,7 @@ loop:
|
|||||||
/* */
|
/* */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope)
|
static void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope)
|
||||||
{
|
{
|
||||||
DLword *nbase;
|
DLword *nbase;
|
||||||
u_char *dbase;
|
u_char *dbase;
|
||||||
|
|||||||
@@ -1565,9 +1565,7 @@ int init_SDL(char *windowtitle, int w, int h, int s) {
|
|||||||
sdl_displayheight = h;
|
sdl_displayheight = h;
|
||||||
sdl_windowwidth = w * s;
|
sdl_windowwidth = w * s;
|
||||||
sdl_windowheight = h * s;
|
sdl_windowheight = h * s;
|
||||||
int width = sdl_displaywidth;
|
printf("requested width: %d, height: %d\n", sdl_displaywidth, sdl_displayheight);
|
||||||
int height = sdl_displayheight;
|
|
||||||
printf("requested width: %d, height: %d\n", width, height);
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||||
printf("SDL could not be initialized. SDL_Error: %s\n", SDL_GetError());
|
printf("SDL could not be initialized. SDL_Error: %s\n", SDL_GetError());
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1608,7 +1606,8 @@ int init_SDL(char *windowtitle, int w, int h, int s) {
|
|||||||
#endif
|
#endif
|
||||||
printf("Creating texture...\n");
|
printf("Creating texture...\n");
|
||||||
sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_pixelformat->format,
|
sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_pixelformat->format,
|
||||||
SDL_TEXTUREACCESS_STREAMING, width, height);
|
SDL_TEXTUREACCESS_STREAMING,
|
||||||
|
sdl_displaywidth, sdl_displayheight);
|
||||||
sdl_foreground_color = sdl_MapColorName(sdl_pixelformat,
|
sdl_foreground_color = sdl_MapColorName(sdl_pixelformat,
|
||||||
foregroundColorName[0] ? foregroundColorName : "black");
|
foregroundColorName[0] ? foregroundColorName : "black");
|
||||||
sdl_background_color = sdl_MapColorName(sdl_pixelformat,
|
sdl_background_color = sdl_MapColorName(sdl_pixelformat,
|
||||||
|
|||||||
@@ -64,6 +64,11 @@
|
|||||||
#include "uutilsdefs.h" // for suspend_lisp, check_unix_password, unix_fu...
|
#include "uutilsdefs.h" // for suspend_lisp, check_unix_password, unix_fu...
|
||||||
#include "vmemsavedefs.h" // for lisp_finish, vmem_save0
|
#include "vmemsavedefs.h" // for lisp_finish, vmem_save0
|
||||||
|
|
||||||
|
#ifdef COLOR
|
||||||
|
#include "rawcolordefs.h"
|
||||||
|
#include "llcolordefs.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
extern LispPTR *PENDINGINTERRUPT68k;
|
extern LispPTR *PENDINGINTERRUPT68k;
|
||||||
|
|
||||||
/***********************************************************/
|
/***********************************************************/
|
||||||
|
|||||||
@@ -683,9 +683,10 @@ int print_opcode(int pc, DLbyte *addr, struct fnhead *fnobj) {
|
|||||||
extern unsigned int oplength[256];
|
extern unsigned int oplength[256];
|
||||||
int len = oplength[op] + 1;
|
int len = oplength[op] + 1;
|
||||||
|
|
||||||
printf(" 0%o (0x%x) ", pc, pc);
|
printf(" 0%04o (0x%04x) ", pc, pc);
|
||||||
for (i = 0; i < len; i++) printf("%o ", 0xFF & GETBYTE(addr + i));
|
for (i = 0; i < len; i++) printf("%4o", 0xFF & GETBYTE(addr + i));
|
||||||
printf(" %s", opcode_table[op]);
|
for (; i < 9; i++) printf(" ");
|
||||||
|
printf("%s", opcode_table[op]);
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ extern DLword *DisplayRegion68k;
|
|||||||
|
|
||||||
extern int Current_Hot_X, Current_Hot_Y; /* X Cursor hotspots */
|
extern int Current_Hot_X, Current_Hot_Y; /* X Cursor hotspots */
|
||||||
|
|
||||||
extern char Window_Title[255];
|
extern char windowTitle[255];
|
||||||
extern char Icon_Title[255];
|
extern char iconTitle[255];
|
||||||
|
|
||||||
extern int save_argc;
|
extern int save_argc;
|
||||||
extern char **save_argv;
|
extern char **save_argv;
|
||||||
@@ -91,8 +91,8 @@ void Create_LispWindow(DspInterface dsp)
|
|||||||
unsigned int GravSize;
|
unsigned int GravSize;
|
||||||
char *WT, *IT;
|
char *WT, *IT;
|
||||||
|
|
||||||
WT = Window_Title;
|
WT = windowTitle;
|
||||||
IT = Icon_Title;
|
IT = iconTitle;
|
||||||
|
|
||||||
GravSize = (dsp->ScrollBarWidth / 2) - dsp->InternalBorderWidth;
|
GravSize = (dsp->ScrollBarWidth / 2) - dsp->InternalBorderWidth;
|
||||||
Col2 = dsp->Visible.width;
|
Col2 = dsp->Visible.width;
|
||||||
|
|||||||
16
src/xrdopt.c
16
src/xrdopt.c
@@ -81,14 +81,14 @@ extern char Display_Name[128];
|
|||||||
char Display_Name[128];
|
char Display_Name[128];
|
||||||
extern char iconpixmapfile[1024];
|
extern char iconpixmapfile[1024];
|
||||||
char iconpixmapfile[1024];
|
char iconpixmapfile[1024];
|
||||||
extern char Window_Title[255];
|
extern char iconTitle[255];
|
||||||
char Window_Title[255];
|
char iconTitle[255];
|
||||||
extern char Icon_Title[255];
|
|
||||||
char Icon_Title[255];
|
|
||||||
extern char cursorColor[255];
|
extern char cursorColor[255];
|
||||||
char cursorColor[255] = {0};
|
char cursorColor[255] = {0};
|
||||||
extern char foregroundColorName[64];
|
extern char foregroundColorName[64];
|
||||||
extern char backgroundColorName[64];
|
extern char backgroundColorName[64];
|
||||||
|
extern char windowTitle[255];
|
||||||
|
|
||||||
|
|
||||||
extern char sysout_name_cl[];
|
extern char sysout_name_cl[];
|
||||||
extern char sysout_name_xrm[];
|
extern char sysout_name_xrm[];
|
||||||
@@ -247,14 +247,14 @@ void read_Xoption(int *argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) {
|
if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) {
|
||||||
(void)strncpy(Window_Title, value.addr, value.size);
|
(void)strncpy(windowTitle, value.addr, sizeof(windowTitle) - 1);
|
||||||
} else {
|
} else {
|
||||||
(void)strcpy(Window_Title, WINDOW_NAME);
|
(void)strncpy(windowTitle, WINDOW_NAME, sizeof(windowTitle) - 1);
|
||||||
}
|
}
|
||||||
if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) {
|
if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) {
|
||||||
(void)strncpy(Icon_Title, value.addr, value.size);
|
(void)strncpy(iconTitle, value.addr, value.size);
|
||||||
} else {
|
} else {
|
||||||
(void)strcpy(Icon_Title, "Medley");
|
(void)strcpy(iconTitle, "Medley");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) {
|
if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) {
|
||||||
|
|||||||
Reference in New Issue
Block a user