mirror of
https://github.com/Interlisp/maiko.git
synced 2026-03-16 14:57:20 +00:00
Compare commits
4 Commits
fgh_github
...
wip-nhb-sd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd90bbf9b9 | ||
|
|
cec93e6ae5 | ||
|
|
72e26ca033 | ||
|
|
f6f833c612 |
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -1,6 +1,6 @@
|
||||
name: Build
|
||||
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
on: [push, pull_request]
|
||||
|
||||
defaults:
|
||||
run:
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
|
||||
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install X11 dependencies on MacOS
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [macos-12, macos-13, macos-14, macos-15, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04]
|
||||
os: [macos-11, macos-12, ubuntu-22.04, ubuntu-20.04]
|
||||
env:
|
||||
BUILD_TYPE: Release
|
||||
steps:
|
||||
|
||||
2
.github/workflows/buildBuilderImage.yml
vendored
2
.github/workflows/buildBuilderImage.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
|
||||
buildBuilder:
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
# 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
|
||||
|
||||
inputs:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
draft: ${{ steps.one.outputs.draft }}
|
||||
force: ${{ steps.one.outputs.force }}
|
||||
@@ -116,7 +116,7 @@ jobs:
|
||||
|
||||
sentry:
|
||||
needs: inputs
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
release_not_built: ${{ steps.check.outputs.release_not_built }}
|
||||
|
||||
@@ -152,7 +152,7 @@ jobs:
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
)
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
# Checkout the actions for this repo owner
|
||||
@@ -185,14 +185,14 @@ jobs:
|
||||
|
||||
# Setup the Docker Machine Emulation environment.
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
uses: docker/setup-qemu-action@v2
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
# Setup the Docker Buildx funtion
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
# Do the Docker Build using the Dockerfile in the repository we
|
||||
# checked out. Save the results in a directory under /tmp to be used
|
||||
@@ -204,7 +204,7 @@ jobs:
|
||||
# Dockerfile, NOT HERE IN THE WORKFLOW.
|
||||
#
|
||||
- name: Build Docker Image and Save It Locally
|
||||
uses: docker/build-push-action@v6
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
builder: ${{ steps.buildx.outputs.name }}
|
||||
build-args: |
|
||||
@@ -266,7 +266,7 @@ jobs:
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
)
|
||||
|
||||
runs-on: macos-12
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -487,7 +487,7 @@ jobs:
|
||||
|| needs.inputs.outputs.force == 'true'
|
||||
)
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
|
||||
@@ -554,7 +554,7 @@ jobs:
|
||||
|
||||
complete:
|
||||
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
build_successful: ${{ steps.output.outputs.build_successful }}
|
||||
|
||||
@@ -37,16 +37,12 @@ IF(NEED_LIB_M)
|
||||
SET(MAIKO_LIBRARIES m)
|
||||
ENDIF()
|
||||
|
||||
SET (MAIKO_RELEASE 351 CACHE STRING "Release version to build. Release: 115, 200, 201, 210, 300, 350, 351")
|
||||
SET_PROPERTY(CACHE MAIKO_RELEASE PROPERTY STRINGS 115 200 201 210 300 350 351)
|
||||
|
||||
MESSAGE("-- Configured for release ${MAIKO_RELEASE}")
|
||||
SET(MAIKO_DEFINITIONS
|
||||
"-DRELEASE=${MAIKO_RELEASE}"
|
||||
"-DRELEASE=351"
|
||||
)
|
||||
|
||||
SET(MAIKO_INIT_DEFINITIONS
|
||||
"-DRELEASE=${MAIKO_RELEASE}" "-DINIT" "-DNOVERSION"
|
||||
"-DRELEASE=351" "-DINIT" "-DNOVERSION"
|
||||
)
|
||||
|
||||
OPTION(MAIKO_DISPLAY_X11 "Use X11 for display." ON)
|
||||
@@ -87,11 +83,11 @@ IF(MAIKO_DISPLAY_X11)
|
||||
ENDIF()
|
||||
|
||||
IF(MAIKO_DISPLAY_SDL STREQUAL "2")
|
||||
FIND_PACKAGE(SDL2 REQUIRED CONFIG REQUIRED COMPONENTS SDL2)
|
||||
FIND_PACKAGE(SDL2 REQUIRED)
|
||||
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
||||
"-DSDL=2"
|
||||
)
|
||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL2::Headers)
|
||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL2_INCLUDE_DIRS}")
|
||||
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL2::SDL2)
|
||||
SET(MAIKO_DISPLAY_SDL_SRCS
|
||||
src/sdl.c
|
||||
@@ -101,11 +97,11 @@ IF(MAIKO_DISPLAY_SDL STREQUAL "2")
|
||||
)
|
||||
MESSAGE("-- Configured for SDL2 display")
|
||||
ELSEIF(MAIKO_DISPLAY_SDL STREQUAL "3")
|
||||
FIND_PACKAGE(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
||||
FIND_PACKAGE(SDL3 REQUIRED)
|
||||
SET(MAIKO_DISPLAY_SDL_DEFINITIONS
|
||||
"-DSDL=3"
|
||||
)
|
||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS SDL3::Headers)
|
||||
SET(MAIKO_DISPLAY_SDL_INCLUDE_DIRS "${SDL3_INCLUDE_DIRS}")
|
||||
SET(MAIKO_DISPLAY_SDL_LIBRARIES SDL3::SDL3)
|
||||
SET(MAIKO_DISPLAY_SDL_SRCS
|
||||
src/sdl.c
|
||||
|
||||
35
inc/gcdata.h
35
inc/gcdata.h
@@ -18,7 +18,8 @@
|
||||
*/
|
||||
/**********************************************************************/
|
||||
#include "lispemul.h" /* for LispPTR, DLword */
|
||||
#include "version.h" /* for BIGVM */
|
||||
#include "version.h" /* for USHORT */
|
||||
#include "gchtfinddefs.h"
|
||||
|
||||
#define ADDREF 0 /* for gclookup routine. */
|
||||
#define DELREF 1 /* for gclookup routine. */
|
||||
@@ -131,10 +132,10 @@
|
||||
#ifdef BIGVM
|
||||
struct hashentry
|
||||
{ /* GC hashtable entry */
|
||||
DLword count :15;
|
||||
DLword stackref :1;
|
||||
DLword segnum :15;
|
||||
DLword collision :1;
|
||||
unsigned short count :15;
|
||||
unsigned short stackref :1;
|
||||
unsigned short segnum :15;
|
||||
unsigned short collision :1;
|
||||
};
|
||||
|
||||
struct htlinkptr
|
||||
@@ -162,10 +163,10 @@ struct htoverflow
|
||||
#else
|
||||
struct hashentry
|
||||
{ /* GC hashtable entry */
|
||||
DLword count :6;
|
||||
DLword stackref :1;
|
||||
DLword segnum :8;
|
||||
DLword collision :1;
|
||||
USHORT count :6;
|
||||
USHORT stackref :1;
|
||||
USHORT segnum :8;
|
||||
USHORT collision :1;
|
||||
};
|
||||
|
||||
struct htlinkptr
|
||||
@@ -200,10 +201,10 @@ struct htoverflow
|
||||
#ifdef BIGVM
|
||||
struct hashentry
|
||||
{ /* GC hashtable entry */
|
||||
DLword collision :1;
|
||||
DLword segnum :15;
|
||||
DLword stackref :1;
|
||||
DLword count :15;
|
||||
USHORT collision :1;
|
||||
USHORT segnum :15;
|
||||
USHORT stackref :1;
|
||||
USHORT count :15;
|
||||
};
|
||||
|
||||
struct htlinkptr
|
||||
@@ -231,10 +232,10 @@ struct htoverflow
|
||||
#else
|
||||
struct hashentry
|
||||
{ /* GC hashtable entry */
|
||||
DLword collision :1;
|
||||
DLword segnum :8;
|
||||
DLword stackref :1;
|
||||
DLword count :6;
|
||||
USHORT collision :1;
|
||||
USHORT segnum :8;
|
||||
USHORT stackref :1;
|
||||
USHORT count :6;
|
||||
};
|
||||
|
||||
struct htlinkptr
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#ifndef GCHTFINDDEFS_H
|
||||
#define GCHTFINDDEFS_H 1
|
||||
#include "lispemul.h" /* for LispPTR, DLword */
|
||||
#include "gcdata.h" /* for GCENTRY */
|
||||
void enter_big_reference_count(LispPTR ptr);
|
||||
void modify_big_reference_count(GCENTRY *entry, DLword casep, LispPTR ptr);
|
||||
void modify_big_reference_count(LispPTR *entry, DLword casep, LispPTR ptr);
|
||||
LispPTR htfind(LispPTR ptr, int casep);
|
||||
LispPTR rec_htfind(LispPTR ptr, int casep);
|
||||
#endif
|
||||
|
||||
@@ -267,22 +267,22 @@ struct state {
|
||||
|
||||
/* For bit test */
|
||||
typedef struct wbits {
|
||||
DLword LSB : 1;
|
||||
DLword B14 : 1;
|
||||
DLword B13 : 1;
|
||||
DLword B12 : 1;
|
||||
DLword B11 : 1;
|
||||
DLword B10 : 1;
|
||||
DLword B9 : 1;
|
||||
DLword B8 : 1;
|
||||
DLword B7 : 1;
|
||||
DLword B6 : 1;
|
||||
DLword B5 : 1;
|
||||
DLword B4 : 1;
|
||||
DLword B3 : 1;
|
||||
DLword B2 : 1;
|
||||
DLword B1 : 1;
|
||||
DLword xMSB : 1;
|
||||
USHORT LSB : 1;
|
||||
USHORT B14 : 1;
|
||||
USHORT B13 : 1;
|
||||
USHORT B12 : 1;
|
||||
USHORT B11 : 1;
|
||||
USHORT B10 : 1;
|
||||
USHORT B9 : 1;
|
||||
USHORT B8 : 1;
|
||||
USHORT B7 : 1;
|
||||
USHORT B6 : 1;
|
||||
USHORT B5 : 1;
|
||||
USHORT B4 : 1;
|
||||
USHORT B3 : 1;
|
||||
USHORT B2 : 1;
|
||||
USHORT B1 : 1;
|
||||
USHORT xMSB : 1;
|
||||
} WBITS;
|
||||
|
||||
#define PUTBASEBIT68K(base68k, offset, bitvalue) \
|
||||
|
||||
@@ -499,8 +499,7 @@ do { \
|
||||
#define MAXVERSION 999999999
|
||||
|
||||
#define LASTVERSIONARRAY ((unsigned) -1)
|
||||
#define VERSIONARRAYCHUNKLENGTH 200
|
||||
#define VERSIONARRAYMAXLENGTH 2000
|
||||
#define VERSIONARRAYLENGTH 200
|
||||
|
||||
#define NoFileP(varray) \
|
||||
(((varray)->version_no == LASTVERSIONARRAY)? 1 : 0)
|
||||
|
||||
1
inc/my.h
1
inc/my.h
@@ -20,7 +20,6 @@
|
||||
#include "version.h" // for BIGVM
|
||||
#include "adr68k.h" // for NativeAligned2FromLAddr, NativeAligned4FromLAddr, LAddrFromNative
|
||||
#include "arith.h" // for N_ARITH_SWITCH, N_GETNUMBER
|
||||
#include "gchtfinddefs.h"// for htfind, rec_htfind, from gcdata.h macros
|
||||
#include "gcdata.h" // for ADDREF, DELREF
|
||||
#include "lispemul.h" // for ERROR_EXIT, LispPTR, DLword, SEGMASK, state
|
||||
#include "lispmap.h" // for S_POSITIVE, S_CHARACTER, S_NEGATIVE
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#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;
|
||||
|
||||
typedef struct frameex1 {
|
||||
DLword flags : 3;
|
||||
DLword fast : 1;
|
||||
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
DLword incall : 1;
|
||||
DLword validnametable : 1;
|
||||
unsigned short flags : 3;
|
||||
unsigned short fast : 1;
|
||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
unsigned short incall : 1;
|
||||
unsigned short validnametable : 1;
|
||||
/* 0: look for FunctionHeader
|
||||
1: look for NameTable on this FrameEx */
|
||||
DLword nopush : 1;
|
||||
DLword usecount : 8;
|
||||
unsigned short nopush : 1;
|
||||
unsigned short usecount : 8;
|
||||
DLword alink; /* alink pointer (Low addr) */
|
||||
#ifdef BIGVM
|
||||
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
#else
|
||||
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
||||
DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||
DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
#endif /* BIGVM */
|
||||
DLword nextblock; /* pointer to FreeStackBlock */
|
||||
DLword pc; /* Program counter */
|
||||
@@ -102,23 +102,23 @@ typedef struct frameex1 {
|
||||
LispPTR nametable; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
||||
#else
|
||||
DLword lonametable; /* ptr to NameTable of this FrameEx (Low addr) */
|
||||
DLword hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */
|
||||
DLword hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
||||
unsigned short hi1nametable : 8; /* ptr to NameTable of this FrameEx (Hi1 addr) */
|
||||
unsigned short hi2nametable : 8; /* ptr to NameTable of this FrameEx (Hi2 addr) */
|
||||
#endif /* BIGVM */
|
||||
DLword blink; /* blink pointer (Low addr) */
|
||||
DLword clink; /* clink pointer (Low addr) */
|
||||
} FX;
|
||||
|
||||
typedef struct frameex2 {
|
||||
DLword flags : 3;
|
||||
DLword fast : 1;
|
||||
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
DLword incall : 1;
|
||||
DLword validnametable : 1;
|
||||
unsigned short flags : 3;
|
||||
unsigned short fast : 1;
|
||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
unsigned short incall : 1;
|
||||
unsigned short validnametable : 1;
|
||||
/* 0: look for FunctionHeader
|
||||
1: look for NameTable on this FrameEx */
|
||||
DLword nopush : 1;
|
||||
DLword usecount : 8;
|
||||
unsigned short nopush : 1;
|
||||
unsigned short usecount : 8;
|
||||
DLword alink; /* alink pointer (Low addr) */
|
||||
LispPTR fnheader; /* pointer to FunctionHeader */
|
||||
DLword nextblock; /* pointer to FreeStackBlock */
|
||||
@@ -135,19 +135,19 @@ typedef struct fxblock {
|
||||
} FXBLOCK;
|
||||
|
||||
typedef struct basic_frame {
|
||||
DLword flags : 3;
|
||||
DLword nil : 3;
|
||||
DLword residual : 1;
|
||||
DLword padding : 1;
|
||||
DLword usecnt : 8;
|
||||
unsigned short flags : 3;
|
||||
unsigned short nil : 3;
|
||||
unsigned short residual : 1;
|
||||
unsigned short padding : 1;
|
||||
unsigned short usecnt : 8;
|
||||
DLword ivar; /* stk offset of IVARs for this frame ?? */
|
||||
|
||||
} Bframe;
|
||||
|
||||
typedef struct stkword {
|
||||
DLword flags : 3;
|
||||
DLword nil : 5;
|
||||
DLword usecount : 8;
|
||||
unsigned short flags : 3;
|
||||
unsigned short nil : 5;
|
||||
unsigned short usecount : 8;
|
||||
} StackWord;
|
||||
|
||||
typedef struct stack_block {
|
||||
@@ -185,33 +185,33 @@ typedef struct fnhead {
|
||||
unsigned nil3 : 2; /* not used */
|
||||
unsigned nil2 : 2; /* not used */
|
||||
#endif /* BIGVM */
|
||||
DLword argtype : 2; /* ?? */
|
||||
DLword byteswapped : 1; /* code was reswapped. */
|
||||
DLword nil4 : 1; /* not used, prev: native translated? */
|
||||
DLword fvaroffset : 8;
|
||||
unsigned short argtype : 2; /* ?? */
|
||||
unsigned short byteswapped : 1; /* code was reswapped. */
|
||||
unsigned short nil4 : 1; /* not used, prev: native translated? */
|
||||
unsigned short fvaroffset : 8;
|
||||
/* DLword offset from head of NameTable */
|
||||
DLword nlocals : 8; /* ?? */
|
||||
unsigned short nlocals : 8; /* ?? */
|
||||
DLword ntsize; /* size of NameTable */
|
||||
/* NameTable of variable length is following with this structure. */
|
||||
} FNHEAD;
|
||||
|
||||
typedef struct frameex1 {
|
||||
DLword alink; /* alink pointer (Low addr) */
|
||||
DLword usecount : 8;
|
||||
DLword nopush : 1;
|
||||
DLword validnametable : 1;
|
||||
unsigned short usecount : 8;
|
||||
unsigned short nopush : 1;
|
||||
unsigned short validnametable : 1;
|
||||
/* 0: look for FunctionHeader
|
||||
1: look for NameTable on this FrameEx */
|
||||
DLword incall : 1;
|
||||
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
DLword fast : 1;
|
||||
DLword flags : 3; /* hi word */
|
||||
unsigned short incall : 1;
|
||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
unsigned short fast : 1;
|
||||
unsigned short flags : 3; /* hi word */
|
||||
|
||||
#ifdef BIGVM
|
||||
LispPTR fnheader; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
#else
|
||||
DLword hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
DLword hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||
unsigned short hi2fnheader : 8; /* pointer to FunctionHeader (Hi2 addr) */
|
||||
unsigned short hi1fnheader : 8; /* pointer to FunctionHeader (Hi1 addr) */
|
||||
DLword lofnheader; /* pointer to FunctionHeader (Low addr) */
|
||||
#endif /* BIGVM */
|
||||
|
||||
@@ -221,8 +221,8 @@ typedef struct frameex1 {
|
||||
#ifdef BIGVM
|
||||
LispPTR nametable; /* pointer to NameTable of this FX (Hi2 addr) */
|
||||
#else
|
||||
DLword hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */
|
||||
DLword hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */
|
||||
unsigned short hi2nametable : 8; /* pointer to NameTable of this FX (Hi2 addr) */
|
||||
unsigned short hi1nametable : 8; /* pointer to NameTable of this FX (Hi1 addr) */
|
||||
DLword lonametable; /* pointer to NameTable of this FX (Low addr) */
|
||||
#endif /* BIGVM */
|
||||
|
||||
@@ -232,15 +232,15 @@ typedef struct frameex1 {
|
||||
|
||||
typedef struct frameex2 {
|
||||
DLword alink; /* alink pointer (Low addr) */
|
||||
DLword usecount : 8;
|
||||
DLword nopush : 1;
|
||||
DLword validnametable : 1;
|
||||
unsigned short usecount : 8;
|
||||
unsigned short nopush : 1;
|
||||
unsigned short validnametable : 1;
|
||||
/* 0: look for FunctionHeader
|
||||
1: look for NameTable on this FrameEx */
|
||||
DLword incall : 1;
|
||||
DLword nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
DLword fast : 1;
|
||||
DLword flags : 3;
|
||||
unsigned short incall : 1;
|
||||
unsigned short nil2 : 1; /* not used, prev: This frame treats N-func */
|
||||
unsigned short fast : 1;
|
||||
unsigned short flags : 3;
|
||||
|
||||
LispPTR fnheader; /* pointer to FunctionHeader (swapped) */
|
||||
|
||||
@@ -261,18 +261,18 @@ typedef struct fxblock {
|
||||
|
||||
typedef struct basic_frame {
|
||||
DLword ivar;
|
||||
DLword usecnt : 8;
|
||||
DLword padding : 1;
|
||||
DLword residual : 1;
|
||||
DLword nil : 3;
|
||||
DLword flags : 3;
|
||||
unsigned short usecnt : 8;
|
||||
unsigned short padding : 1;
|
||||
unsigned short residual : 1;
|
||||
unsigned short nil : 3;
|
||||
unsigned short flags : 3;
|
||||
|
||||
} Bframe;
|
||||
|
||||
typedef struct stkword {
|
||||
DLword usecount : 8;
|
||||
DLword nil : 5;
|
||||
DLword flags : 3;
|
||||
USHORT usecount : 8;
|
||||
USHORT nil : 5;
|
||||
USHORT flags : 3;
|
||||
} StackWord;
|
||||
|
||||
typedef struct stack_block {
|
||||
|
||||
@@ -227,6 +227,9 @@ typedef unsigned char u_char;
|
||||
typedef unsigned long u_int;
|
||||
typedef unsigned short u_short;
|
||||
#undef UNALIGNED_FETCH_OK
|
||||
typedef unsigned USHORT;
|
||||
#else
|
||||
typedef unsigned short USHORT;
|
||||
#endif /* DOS */
|
||||
|
||||
/****************************************************************/
|
||||
@@ -234,14 +237,6 @@ typedef unsigned short u_short;
|
||||
/* --Start of system-specific flags */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
#ifdef MAIKO_OS_MACOS
|
||||
/* macOS does not follow the POSIX standard for the names of the stat
|
||||
fields that allow access to the nanosecond resolution times
|
||||
*/
|
||||
#define st_atim st_atimespec
|
||||
#define st_mtim st_mtimespec
|
||||
#define st_ctim st_ctimespec
|
||||
#endif
|
||||
|
||||
/****************************************************************/
|
||||
/* End of system-specific flag settings */
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "stack.h"
|
||||
#include "return.h"
|
||||
#include "cell.h"
|
||||
#include "gcdata.h"
|
||||
|
||||
#include "bbtsubdefs.h"
|
||||
#include "car-cdrdefs.h"
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "conspagedefs.h" // for next_conspage
|
||||
#include "emlglob.h"
|
||||
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lispemul.h" // for ConsCell, LispPTR, DLword, NIL_PTR, state
|
||||
#include "lspglob.h" // for ListpDTD
|
||||
#include "lsptypes.h" // for Listp, dtd
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "conspagedefs.h" // for N_OP_cons, cons, next_conspage
|
||||
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lispemul.h" // for ConsCell, DLword, LispPTR, NIL_PTR, DLWORD...
|
||||
#include "lspglob.h"
|
||||
#include "lsptypes.h" // for dtd, Listp, TYPE_LISTP
|
||||
|
||||
@@ -589,8 +589,8 @@ void bt1(FX *startFX) {
|
||||
BT_morep;
|
||||
while ((fnobj->framename != ATOM_T) && (fx->alink != 11)) {
|
||||
if (fnum > URMAXFXNUM - 1) {
|
||||
/* Internal buf overflow, too many stack frames */
|
||||
printf("***There are more than %d stack frames.\n", URMAXFXNUM);
|
||||
/* Internal buf overflow,more than 100 stacks */
|
||||
printf("***There are more than 100 stack frames.\n");
|
||||
printf(
|
||||
"If you want to continue, Uraid will smash its internal table for FX pointer. Do you "
|
||||
"accept?(Y or N)\n");
|
||||
|
||||
411
src/dsk.c
411
src/dsk.c
@@ -13,7 +13,7 @@
|
||||
#include <fcntl.h> // for O_RDWR, O_CREAT, open, O_RDONLY, O_TRUNC
|
||||
#include <stdio.h> // for NULL, sprintf, size_t, rename, SEEK_SET
|
||||
#include <stddef.h> // for ptrdiff_t
|
||||
#include <stdlib.h> // for strtoul, qsort
|
||||
#include <stdlib.h> // for strtoul
|
||||
#include <string.h> // for strcpy, strcmp, strlen, strncpy, strchr
|
||||
#include <sys/stat.h> // for stat, fstat, mkdir, S_ISREG, st_atime, chmod
|
||||
#include <sys/types.h> // for ino_t, time_t, off_t
|
||||
@@ -38,13 +38,12 @@
|
||||
#include <pwd.h> // for getpwuid, passwd
|
||||
#include <sys/param.h> // for MAXPATHLEN
|
||||
#include <sys/statvfs.h> // for statvfs
|
||||
#include <sys/time.h> // for timeval, utimes, futimens
|
||||
#include <sys/time.h> // for timeval, utimes
|
||||
#else
|
||||
#include <direct.h>
|
||||
#include <dos.h>
|
||||
#include <time.h>
|
||||
#include <io.h>
|
||||
#include <search.h> // for qsort(?)
|
||||
#define MAXPATHLEN _MAX_PATH
|
||||
#define MAXNAMLEM _MAX_PATH
|
||||
#define alarm(x) 0
|
||||
@@ -58,31 +57,25 @@ typedef struct filename_entry {
|
||||
unsigned version_no;
|
||||
} FileName;
|
||||
|
||||
/*
|
||||
* VA, a structure representing the file names and version numbers
|
||||
* that were present in a directory at a particular moment in time.
|
||||
* The {DSK} device presents a case-insensitive (to Medley) but
|
||||
* case-preserving (to the host) file system. The VA (Version Array)
|
||||
*/
|
||||
static struct {
|
||||
char name[MAXPATHLEN]; /* lowercase unversioned file name */
|
||||
struct timespec lastMTime; /* modification time of the directory */
|
||||
int allocated; /* number of entries in the files array */
|
||||
int lastUsed; /* index of the last entry in use in files array */
|
||||
FileName *files; /* array of files */
|
||||
} VA = {0};
|
||||
typedef struct current_varray {
|
||||
char path[MAXPATHLEN]; /* pathname of directory */
|
||||
char file[MAXPATHLEN]; /* file name (down cased name) */
|
||||
time_t mtime;
|
||||
} CurrentVArray;
|
||||
|
||||
static FileName VersionArray[VERSIONARRAYLENGTH];
|
||||
static CurrentVArray VArrayInfo;
|
||||
|
||||
static int locate_file(char *dir, char *name);
|
||||
static int make_directory(char *dir);
|
||||
static int maintain_version(char *file, int forcep);
|
||||
static int compare_file_versions(const void *a, const void *b);
|
||||
static int maintain_version(char *file, FileName *varray, int forcep);
|
||||
static int get_versionless(FileName *varray, char *file, char *dir);
|
||||
static int check_vless_link(char *vless, FileName *varray, char *to_file, int *highest_p);
|
||||
static int get_old(char *dir, FileName *varray, char *afile, char *vfile);
|
||||
static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile);
|
||||
static int get_new(char *dir, FileName *varray, char *afile, char *vfile);
|
||||
static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile);
|
||||
static int get_version_array(char *dir, char *file);
|
||||
static int get_version_array(char *dir, char *file, FileName *varray, CurrentVArray *cache);
|
||||
|
||||
#ifdef DOS
|
||||
static void separate_drive(char *lfname, char *drive)
|
||||
@@ -374,24 +367,24 @@ LispPTR COM_openfile(LispPTR *args)
|
||||
if (dskp) {
|
||||
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
|
||||
if (true_name(dir) != -1) return (0);
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
ConcNameAndVersion(name, ver, file);
|
||||
|
||||
switch (args[1]) {
|
||||
case RECOG_OLD:
|
||||
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
break;
|
||||
|
||||
case RECOG_OLDEST:
|
||||
if (get_oldest(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_oldest(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
break;
|
||||
|
||||
case RECOG_NEW:
|
||||
if (get_new(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_new(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
break;
|
||||
|
||||
case RECOG_OLD_NEW:
|
||||
if (get_old_new(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_old_new(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
break;
|
||||
|
||||
default: return (NIL);
|
||||
@@ -446,7 +439,7 @@ LispPTR COM_openfile(LispPTR *args)
|
||||
* Actually we are creating a new file. We have to
|
||||
* maintain a version status.
|
||||
*/
|
||||
if (maintain_version(file, 1) == 0) {
|
||||
if (maintain_version(file, (FileName *)NULL, 1) == 0) {
|
||||
TIMEOUT(rval = close(fd));
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
@@ -492,7 +485,7 @@ LispPTR COM_openfile(LispPTR *args)
|
||||
* the entirely newly created file, versionless file, should not
|
||||
* be linked to any file.
|
||||
*/
|
||||
if (maintain_version(file, 0) == 0) {
|
||||
if (maintain_version(file, (FileName *)NULL, 0) == 0) {
|
||||
TIMEOUT(close(fd));
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
@@ -677,7 +670,7 @@ LispPTR COM_closefile(LispPTR *args)
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
}
|
||||
#ifndef DOS /* effectively NEVER, since we're in an ifdef DOS */
|
||||
#ifndef DOS
|
||||
TIMEOUT(rval = utimes(file, time));
|
||||
if (rval != 0) {
|
||||
*Lisp_errno = errno;
|
||||
@@ -688,9 +681,13 @@ LispPTR COM_closefile(LispPTR *args)
|
||||
int fd, fatp, dskp, rval;
|
||||
time_t cdate;
|
||||
char lfname[MAXPATHLEN + 5], host[MAXNAMLEN];
|
||||
char file[MAXPATHLEN];
|
||||
char file[MAXPATHLEN], dir[MAXPATHLEN], name[MAXNAMLEN + 1];
|
||||
char ver[VERSIONLEN];
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
struct stat sbuf;
|
||||
struct timespec timesp[2];
|
||||
struct timeval time[2];
|
||||
ino_t ino;
|
||||
|
||||
ERRSETJMP(NIL);
|
||||
Lisp_errno = (int *)NativeAligned4FromLAddr(args[3]);
|
||||
@@ -755,24 +752,60 @@ LispPTR COM_closefile(LispPTR *args)
|
||||
}
|
||||
}
|
||||
|
||||
/* introduction of futimens() allows us to set the times on an open
|
||||
* file descriptor so a lot of directory manipulation to find the
|
||||
* appropriate name associated with the inode is no longer required
|
||||
*/
|
||||
if (!unpack_filename(file, dir, name, ver, 1)) return (NIL);
|
||||
|
||||
timesp[0].tv_sec = (long)sbuf.st_atime;
|
||||
timesp[0].tv_nsec = 0L;
|
||||
timesp[1].tv_sec = (long)ToUnixTime(cdate);
|
||||
timesp[1].tv_nsec = 0L;
|
||||
if (dskp) {
|
||||
/*
|
||||
* On {DSK}, we have to make sure dir is case sensitively existing
|
||||
* directory.
|
||||
*/
|
||||
if (true_name(dir) != -1) return (NIL);
|
||||
|
||||
TIMEOUT(rval = futimens(fd, timesp));
|
||||
if (rval != 0) {
|
||||
/*
|
||||
* There is a very troublesome problem here. The file name Lisp
|
||||
* recognizes is not always the same as the name which COM_openfile
|
||||
* used to open the file. Sometimes COM_openfile uses the versionless
|
||||
* file name to open a file, although Lisp always recognizes with
|
||||
* *versioned* file name.
|
||||
* Thus, we compare i-node number of the requested file with ones of all
|
||||
* of files on the directory. This is time spending implementation.
|
||||
* More clean up work is needed.
|
||||
*/
|
||||
TIMEOUT(rval = fstat(fd, &sbuf));
|
||||
if (rval != 0) {
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
}
|
||||
ino = sbuf.st_ino;
|
||||
|
||||
errno = 0;
|
||||
TIMEOUT0(dirp = opendir(dir));
|
||||
if (dirp == (DIR *)NULL) {
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
}
|
||||
|
||||
for (S_TOUT(dp = readdir(dirp)); dp != (struct dirent *)NULL || errno == EINTR;
|
||||
errno = 0, S_TOUT(dp = readdir(dirp)))
|
||||
if (dp) {
|
||||
if (ino == (ino_t)dp->d_ino) sprintf(file, "%s/%s", dir, dp->d_name);
|
||||
}
|
||||
TIMEOUT(closedir(dirp));
|
||||
}
|
||||
|
||||
time[0].tv_sec = (long)sbuf.st_atime;
|
||||
time[0].tv_usec = 0L;
|
||||
time[1].tv_sec = (long)ToUnixTime(cdate);
|
||||
time[1].tv_usec = 0L;
|
||||
|
||||
TIMEOUT(rval = close(fd));
|
||||
if (rval == -1) {
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
}
|
||||
|
||||
TIMEOUT(rval = close(fd));
|
||||
if (rval == -1) {
|
||||
TIMEOUT(rval = utimes(file, time));
|
||||
if (rval != 0) {
|
||||
*Lisp_errno = errno;
|
||||
return (NIL);
|
||||
}
|
||||
@@ -885,10 +918,10 @@ LispPTR DSK_getfilename(LispPTR *args)
|
||||
* Recognizing a file on DSK device needs the version information.
|
||||
* We gather version information in a version array first.
|
||||
*/
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
|
||||
ConcNameAndVersion(name, ver, aname);
|
||||
if (get_old(dir, VA.files, aname, vname) == 0) return (NIL);
|
||||
if (get_old(dir, VersionArray, aname, vname) == 0) return (NIL);
|
||||
|
||||
if ((rval = true_name(aname)) == 0) return (NIL);
|
||||
if (rval == -1) {
|
||||
@@ -925,10 +958,10 @@ LispPTR DSK_getfilename(LispPTR *args)
|
||||
strcpy(vname, dir);
|
||||
dirp = 1;
|
||||
} else {
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
|
||||
ConcNameAndVersion(name, ver, aname);
|
||||
if (get_oldest(dir, VA.files, aname, vname) == 0) return (NIL);
|
||||
if (get_oldest(dir, VersionArray, aname, vname) == 0) return (NIL);
|
||||
|
||||
if ((rval = true_name(aname)) == 0) return (NIL);
|
||||
if (rval == -1) {
|
||||
@@ -974,10 +1007,10 @@ LispPTR DSK_getfilename(LispPTR *args)
|
||||
* Here, dir is an existing directory. We have to perform
|
||||
* "new" recognition with the version information.
|
||||
*/
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
|
||||
ConcNameAndVersion(name, ver, aname);
|
||||
if (get_new(dir, VA.files, aname, vname) == 0) return (NIL);
|
||||
if (get_new(dir, VersionArray, aname, vname) == 0) return (NIL);
|
||||
dirp = 0;
|
||||
}
|
||||
}
|
||||
@@ -1000,10 +1033,10 @@ LispPTR DSK_getfilename(LispPTR *args)
|
||||
strcpy(vname, aname);
|
||||
dirp = 1;
|
||||
} else {
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
|
||||
ConcNameAndVersion(name, ver, aname);
|
||||
if (get_old_new(dir, VA.files, aname, vname) == 0) return (NIL);
|
||||
if (get_old_new(dir, VersionArray, aname, vname) == 0) return (NIL);
|
||||
dirp = 0;
|
||||
}
|
||||
}
|
||||
@@ -1099,6 +1132,7 @@ LispPTR DSK_deletefile(LispPTR *args)
|
||||
char file[MAXPATHLEN], fbuf[MAXPATHLEN], vless[MAXPATHLEN];
|
||||
char dir[MAXPATHLEN], ver[VERSIONLEN];
|
||||
int rval, fatp;
|
||||
FileName *varray;
|
||||
#ifdef DOS
|
||||
char drive[1], rawname[MAXNAMLEN];
|
||||
int extlen; /* len of extension, for making backup filename */
|
||||
@@ -1126,9 +1160,10 @@ LispPTR DSK_deletefile(LispPTR *args)
|
||||
#endif
|
||||
|
||||
if (unpack_filename(file, dir, fbuf, ver, 1) == 0) return (NIL);
|
||||
if (get_version_array(dir, fbuf) == 0) return (NIL);
|
||||
if (get_version_array(dir, fbuf, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
varray = VersionArray;
|
||||
|
||||
if (NoFileP(VA.files))
|
||||
if (NoFileP(varray))
|
||||
return (NIL); /*
|
||||
* If the specified file is deleted from
|
||||
* outside of Lisp during the last time
|
||||
@@ -1143,9 +1178,9 @@ LispPTR DSK_deletefile(LispPTR *args)
|
||||
*/
|
||||
|
||||
ConcNameAndVersion(fbuf, ver, file);
|
||||
if (get_oldest(dir, VA.files, file, fbuf) == 0) return (NIL);
|
||||
if (get_oldest(dir, varray, file, fbuf) == 0) return (NIL);
|
||||
|
||||
if (get_versionless(VA.files, vless, dir) == 0) {
|
||||
if (get_versionless(varray, vless, dir) == 0) {
|
||||
/*
|
||||
* There is no versionless file. All we have to do is to simply
|
||||
* try to unlink the specified file.
|
||||
@@ -1164,7 +1199,7 @@ LispPTR DSK_deletefile(LispPTR *args)
|
||||
* file is linked will destroy the consistency of the version status.
|
||||
*/
|
||||
|
||||
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) return (NIL);
|
||||
if (check_vless_link(vless, varray, fbuf, &rval) == 0) return (NIL);
|
||||
|
||||
if (strcmp(file, vless) == 0 || strcmp(file, fbuf) == 0) {
|
||||
if (*fbuf != '\0') {
|
||||
@@ -1185,12 +1220,12 @@ LispPTR DSK_deletefile(LispPTR *args)
|
||||
/*
|
||||
* Finally, we have to maintain the version status.
|
||||
*/
|
||||
if (maintain_version(vless, 0) == 0) return (NIL);
|
||||
if (maintain_version(vless, (FileName *)NULL, 0) == 0) return (NIL);
|
||||
return (ATOM_T);
|
||||
} else {
|
||||
/*
|
||||
* Although the versionfile is specified, it is not linked
|
||||
* to any file in VA.files. We should not maintain the version
|
||||
* to any file in varray. We should not maintain the version
|
||||
* status after deleting the versionless file, because
|
||||
* we cannot say whether the versionless file is actually under
|
||||
* control of the Medley DSK file system or not.
|
||||
@@ -1245,6 +1280,7 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
char dir[MAXPATHLEN], ver[VERSIONLEN];
|
||||
int rval, fatp;
|
||||
int need_maintain_flg;
|
||||
FileName *varray;
|
||||
#ifdef DOS
|
||||
char drive1[1], drive2[1];
|
||||
int extlen1, extlen2; /* len of extension */
|
||||
@@ -1295,9 +1331,10 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* We maintain the destination to handle the link damaged case correctly.
|
||||
*/
|
||||
ConcDirAndName(dir, fbuf, dst);
|
||||
if (maintain_version(dst, 0) == 0) return (NIL);
|
||||
if (maintain_version(dst, (FileName *)NULL, 0) == 0) return (NIL);
|
||||
|
||||
if (get_version_array(dir, fbuf) == 0) return (NIL);
|
||||
if (get_version_array(dir, fbuf, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
varray = VersionArray;
|
||||
|
||||
/*
|
||||
* Although the file should have been recognized with "new" mode in Lisp
|
||||
@@ -1306,7 +1343,7 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
*/
|
||||
|
||||
ConcNameAndVersion(fbuf, ver, dst);
|
||||
if (get_new(dir, VA.files, dst, fbuf) == 0) return (NIL);
|
||||
if (get_new(dir, varray, dst, fbuf) == 0) return (NIL);
|
||||
|
||||
/*
|
||||
* At this point, there are three cases for the destination. If there is
|
||||
@@ -1316,9 +1353,9 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* "real" destination file is the file to which the versionless file is linked,
|
||||
* we have to unlink the versionless file.
|
||||
*/
|
||||
if (!NoFileP(VA.files)) {
|
||||
if (OnlyVersionlessP(VA.files)) {
|
||||
get_versionless(VA.files, vless, dir);
|
||||
if (!NoFileP(varray)) {
|
||||
if (OnlyVersionlessP(varray)) {
|
||||
get_versionless(varray, vless, dir);
|
||||
if (strcmp(dst, vless) != 0) {
|
||||
ConcNameAndVersion(vless, "1", fbuf);
|
||||
TIMEOUT(rval = rename(vless, fbuf));
|
||||
@@ -1332,8 +1369,8 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* We are sure that the versionless file is linked to one of
|
||||
* the higher versioned file here.
|
||||
*/
|
||||
get_versionless(VA.files, vless, dir);
|
||||
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) { return (NIL); }
|
||||
get_versionless(varray, vless, dir);
|
||||
if (check_vless_link(vless, varray, fbuf, &rval) == 0) { return (NIL); }
|
||||
if (strcmp(dst, fbuf) == 0) {
|
||||
TIMEOUT(rval = unlink(vless));
|
||||
if (rval == -1) {
|
||||
@@ -1345,9 +1382,9 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
}
|
||||
|
||||
if (unpack_filename(src, dir, fbuf, ver, 1) == 0) return (NIL);
|
||||
if (get_version_array(dir, fbuf) == 0) return (NIL);
|
||||
if (get_version_array(dir, fbuf, varray, &VArrayInfo) == 0) return (NIL);
|
||||
|
||||
if (NoFileP(VA.files))
|
||||
if (NoFileP(varray))
|
||||
return (NIL); /*
|
||||
* If the specified file is deleted from
|
||||
* outside of Lisp during the last time
|
||||
@@ -1361,9 +1398,9 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* of it.
|
||||
*/
|
||||
ConcNameAndVersion(fbuf, ver, src);
|
||||
if (get_old(dir, VA.files, src, fbuf) == 0) return (NIL);
|
||||
if (get_old(dir, varray, src, fbuf) == 0) return (NIL);
|
||||
|
||||
if (get_versionless(VA.files, vless, dir) == 0) {
|
||||
if (get_versionless(varray, vless, dir) == 0) {
|
||||
/*
|
||||
* There is no versionless file. All we have to do is to simply
|
||||
* try to rename the specified file.
|
||||
@@ -1376,7 +1413,7 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* versionless file is linked will destroy the consistency of the
|
||||
* version status.
|
||||
*/
|
||||
if (check_vless_link(vless, VA.files, fbuf, &rval) == 0) return (NIL);
|
||||
if (check_vless_link(vless, varray, fbuf, &rval) == 0) return (NIL);
|
||||
|
||||
if (strcmp(src, vless) == 0 && *fbuf != '\0') {
|
||||
/*
|
||||
@@ -1421,9 +1458,9 @@ LispPTR DSK_renamefile(LispPTR *args)
|
||||
* is on.
|
||||
*/
|
||||
|
||||
if (maintain_version(dst, 0) == 0) return (NIL);
|
||||
if (maintain_version(dst, (FileName *)NULL, 0) == 0) return (NIL);
|
||||
if (need_maintain_flg) {
|
||||
if (maintain_version(src, 0) == 0) return (NIL);
|
||||
if (maintain_version(src, (FileName *)NULL, 0) == 0) return (NIL);
|
||||
}
|
||||
|
||||
return (ATOM_T);
|
||||
@@ -1621,9 +1658,9 @@ LispPTR COM_getfileinfo(LispPTR *args)
|
||||
*/
|
||||
strcpy(file, dir);
|
||||
} else {
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
ConcNameAndVersion(name, ver, file);
|
||||
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1810,9 +1847,9 @@ LispPTR COM_setfileinfo(LispPTR *args)
|
||||
if (dskp) {
|
||||
if (unpack_filename(file, dir, name, ver, 1) == 0) return (NIL);
|
||||
if (true_name(dir) != -1) return (0);
|
||||
if (get_version_array(dir, name) == 0) return (NIL);
|
||||
if (get_version_array(dir, name, VersionArray, &VArrayInfo) == 0) return (NIL);
|
||||
ConcNameAndVersion(name, ver, file);
|
||||
if (get_old(dir, VA.files, file, name) == 0) return (NIL);
|
||||
if (get_old(dir, VersionArray, file, name) == 0) return (NIL);
|
||||
}
|
||||
|
||||
switch (args[1]) {
|
||||
@@ -2766,26 +2803,34 @@ static int make_directory(char *dir)
|
||||
* and highest version number respectively.
|
||||
*
|
||||
* Description:
|
||||
* Finds the highest versioned entry in varray.
|
||||
*
|
||||
* Preconditions:
|
||||
* Varray must include at least one versioned file, satisfying the condition:
|
||||
* (!NoFileP(varray) && !OnlyVersionlessP(varray))
|
||||
* Varray must be sorted from highest to lowest version
|
||||
* Find the highest versioned entry in varray. Varray has to include at least
|
||||
* one versioned file, that is varray has to satisfy (!NoFileP(varray) &&
|
||||
* !OnlyVersionlessP(varray)).
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef DOS
|
||||
#define FindHighestVersion(varray, mentry, max_no) \
|
||||
do { \
|
||||
(max_no) = varray[0].version_no; \
|
||||
(mentry) = &varray[0]; \
|
||||
} while (0)
|
||||
do { \
|
||||
FileName *centry; \
|
||||
for (centry = varray, max_no = -1; centry->version_no != LASTVERSIONARRAY; centry++) { \
|
||||
if (centry->version_no > max_no) { \
|
||||
max_no = centry->version_no; \
|
||||
mentry = centry; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
#define FindHighestVersion(varray, mentry, max_no) \
|
||||
do { \
|
||||
(max_no) = varray[0].version_no; \
|
||||
(mentry) = &varray[0]; \
|
||||
} while (0)
|
||||
do { \
|
||||
FileName *centry; \
|
||||
for (centry = (varray), (max_no) = 0; centry->version_no != LASTVERSIONARRAY; centry++) { \
|
||||
if (centry->version_no > (max_no)) { \
|
||||
(max_no) = centry->version_no; \
|
||||
(mentry) = centry; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
#endif /* DOS */
|
||||
|
||||
/*
|
||||
@@ -2872,19 +2917,6 @@ static int make_directory(char *dir)
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* comparison function for qsort to sort file versions in descending order
|
||||
*/
|
||||
static int compare_file_versions(const void *a, const void *b)
|
||||
{
|
||||
unsigned a_ver = ((FileName *)a)->version_no;
|
||||
unsigned b_ver = ((FileName *)b)->version_no;
|
||||
|
||||
if (a_ver > b_ver) return (-1);
|
||||
if (a_ver < b_ver) return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
/* */
|
||||
/* g e t _ v e r s i o n _ a r r a y */
|
||||
@@ -2896,6 +2928,7 @@ static int compare_file_versions(const void *a, const void *b)
|
||||
/* guarantee that the directory exists. */
|
||||
/* file File name, optionally including a (unix) version */
|
||||
/* varray Place to put the version array entries. */
|
||||
/* cache Place to hold info about the new version array */
|
||||
/* */
|
||||
/* Read thru DIR and gather all files that match FILE into */
|
||||
/* VARRAY. DIR's case must match existing directory's, but */
|
||||
@@ -2905,15 +2938,15 @@ static int compare_file_versions(const void *a, const void *b)
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
static int get_version_array(char *dir, char *file)
|
||||
static int get_version_array(char *dir, char *file, FileName *varray, CurrentVArray *cache)
|
||||
{
|
||||
#ifdef DOS
|
||||
/* DOS version-array builder */
|
||||
|
||||
char lcased_file[MAXPATHLEN];
|
||||
char old_file[MAXPATHLEN];
|
||||
char name[MAXNAMLEN];
|
||||
char ver[VERSIONLEN];
|
||||
int varray_index = 0;
|
||||
FileName *svarray;
|
||||
struct find_t dirp;
|
||||
struct direct *dp;
|
||||
int rval, drive = 0, isslash = 0;
|
||||
@@ -2954,12 +2987,14 @@ static int get_version_array(char *dir, char *file)
|
||||
|
||||
make_old_version(old_file, lcased_file);
|
||||
|
||||
svarray = varray;
|
||||
|
||||
TIMEOUT(res = _dos_findfirst(old_file, _A_NORMAL | _A_SUBDIR, &dirp));
|
||||
if (res == 0) {
|
||||
strcpy(name, dirp.name);
|
||||
strcpy(VA.files[varray_index].name, name);
|
||||
VA.files[varray_index].version_no = 0;
|
||||
varray_index++;
|
||||
strcpy(svarray->name, name);
|
||||
svarray->version_no = 0;
|
||||
svarray++;
|
||||
}
|
||||
|
||||
/*******************************/
|
||||
@@ -2978,48 +3013,34 @@ static int get_version_array(char *dir, char *file)
|
||||
separate_version(name, ver, 1);
|
||||
DOWNCASE(name);
|
||||
|
||||
strcpy(VA.files[varray_index].name, dirp.name);
|
||||
strcpy(svarray->name, dirp.name);
|
||||
if (*ver == '\0') {
|
||||
/* Versionless file */
|
||||
VA.files[varray_index].version_no = 1;
|
||||
svarray->version_no = 1;
|
||||
} else {
|
||||
/*
|
||||
* separate_version guarantees ver is a numeric string.
|
||||
* separator_version guarantees ver is a numeric
|
||||
* string.
|
||||
*/
|
||||
VA.files[varray_index].version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
varray_index++;
|
||||
if (varray_index >= VERSIONARRAYMAXLENGTH) {
|
||||
*Lisp_errno = EIO;
|
||||
return (0);
|
||||
} else if (varray_index >= VA.allocated) {
|
||||
VA.allocated += VERSIONARRAYCHUNKLENGTH;
|
||||
VA.files = realloc(VA.files,
|
||||
sizeof(*VA.files) * VA.allocated);
|
||||
svarray->version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
svarray++;
|
||||
}
|
||||
|
||||
/*
|
||||
* The last entry of VA.files is indicated by setting LASTVERSIONARRAY into
|
||||
* The last entry of varray is indicated by setting LASTVERSIONARRAY into
|
||||
* version_no field.
|
||||
*/
|
||||
VA.files[varray_index].version_no = LASTVERSIONARRAY;
|
||||
VA.lastUsed = varray_index;
|
||||
svarray->version_no = LASTVERSIONARRAY;
|
||||
|
||||
/*
|
||||
* If any files have been stored in VA.files, we store the name
|
||||
* If more than one files have been stored in varray, we store the name
|
||||
* without version in the last marker entry.
|
||||
*
|
||||
* NOTE: sorting "varray_index" entries will leave the LASTVERSIONARRAY item
|
||||
* untouched by the sort, which is intentional.
|
||||
*/
|
||||
if (!NoFileP(VA.files)) {
|
||||
strcpy(name, VA.files[0].name);
|
||||
if (!NoFileP(varray)) {
|
||||
strcpy(name, varray->name);
|
||||
separate_version(name, ver, 1);
|
||||
strcpy(VA.files[varray_index].name, name);
|
||||
if (varray_index > 1) {
|
||||
qsort(VA.files, varray_index, sizeof(*VA.files), compare_file_versions);
|
||||
}
|
||||
strcpy(svarray->name, name);
|
||||
}
|
||||
|
||||
return (1);
|
||||
@@ -3029,7 +3050,7 @@ static int get_version_array(char *dir, char *file)
|
||||
char lcased_file[MAXNAMLEN];
|
||||
char name[MAXNAMLEN];
|
||||
char ver[VERSIONLEN];
|
||||
int varray_index = 0;
|
||||
FileName *svarray;
|
||||
DIR *dirp;
|
||||
struct dirent *dp;
|
||||
int rval;
|
||||
@@ -3043,26 +3064,29 @@ static int get_version_array(char *dir, char *file)
|
||||
separate_version(lcased_file, ver, 1);
|
||||
DOWNCASE(lcased_file);
|
||||
|
||||
/* Cache for VA.files reinstated using nanosecond timestamps which many
|
||||
* systems provide for directory modification times.
|
||||
* POSIX defines the struct stat field containing the nanosecond resolution
|
||||
* modification time as "st_mtim". See "version.h" for accomodations
|
||||
* for systems that call it something else (e.g., macOS st_mtimespec).
|
||||
*/
|
||||
|
||||
TIMEOUT(rval = stat(dir, &sbuf));
|
||||
if (rval == -1) {
|
||||
*Lisp_errno = errno;
|
||||
return(0);
|
||||
}
|
||||
if (0 == strcmp(lcased_file, VA.name) &&
|
||||
sbuf.st_mtim.tv_sec == VA.lastMTime.tv_sec &&
|
||||
sbuf.st_mtim.tv_nsec == VA.lastMTime.tv_nsec) {
|
||||
return (1);
|
||||
} else {
|
||||
VA.lastMTime = sbuf.st_mtim;
|
||||
strcpy(VA.name, lcased_file);
|
||||
}
|
||||
|
||||
/*
|
||||
* Cache mechanism was not used because of a bug in Sun OS.
|
||||
* Sometimes just after unlinking a file on a directory, the st_mtime
|
||||
* of the directory does not change. This will make Maiko believe
|
||||
* cached version array is still valid, although it is already invalid.
|
||||
* sync(2) has no effect on such case.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If the cached version array is still valid, we can return immediately.
|
||||
*/
|
||||
|
||||
#if 0
|
||||
/* there is a (different?) problem (#1661) with the caching - disable until it's solved */
|
||||
if ((sbuf.st_mtime == cache->mtime) && strcmp(dir, cache->path) == 0
|
||||
&& strcmp(lcased_file, cache->file) == 0) return(1);
|
||||
#endif
|
||||
|
||||
errno = 0;
|
||||
TIMEOUT0(dirp = opendir(dir));
|
||||
@@ -3071,13 +3095,7 @@ static int get_version_array(char *dir, char *file)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* There is no initialization call for the local file system, so we
|
||||
* must ensure there is initial storage allocated for the version array */
|
||||
if (VA.files == NULL) {
|
||||
VA.files = calloc(VERSIONARRAYCHUNKLENGTH, sizeof(*VA.files));
|
||||
VA.allocated = VERSIONARRAYCHUNKLENGTH;
|
||||
}
|
||||
for (S_TOUT(dp = readdir(dirp)); dp != NULL || errno == EINTR;
|
||||
for (S_TOUT(dp = readdir(dirp)), svarray = varray; dp != NULL || errno == EINTR;
|
||||
errno = 0, S_TOUT(dp = readdir(dirp)))
|
||||
if (dp) {
|
||||
strcpy(name, dp->d_name);
|
||||
@@ -3087,50 +3105,42 @@ static int get_version_array(char *dir, char *file)
|
||||
/*
|
||||
* This file can be regarded as a same file in Lisp sense.
|
||||
*/
|
||||
strcpy(VA.files[varray_index].name, dp->d_name);
|
||||
strcpy(svarray->name, dp->d_name);
|
||||
if (*ver == '\0') {
|
||||
/* Versionless file */
|
||||
VA.files[varray_index].version_no = 0;
|
||||
svarray->version_no = 0;
|
||||
} else {
|
||||
/*
|
||||
* separate_version guarantees ver is a numeric string.
|
||||
* separator_version guarantees ver is a numeric
|
||||
* string.
|
||||
*/
|
||||
VA.files[varray_index].version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
varray_index++;
|
||||
if (varray_index >= VERSIONARRAYMAXLENGTH) {
|
||||
*Lisp_errno = EIO;
|
||||
return (0);
|
||||
} else if (varray_index >= VA.allocated) {
|
||||
VA.allocated += VERSIONARRAYCHUNKLENGTH;
|
||||
VA.files = realloc(VA.files,
|
||||
sizeof(*VA.files) * VA.allocated);
|
||||
svarray->version_no = strtoul(ver, (char **)NULL, 10);
|
||||
}
|
||||
svarray++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* The last entry of varray is indicated by setting LASTVERSIONARRAY into
|
||||
* version_no field.
|
||||
*/
|
||||
VA.files[varray_index].version_no = LASTVERSIONARRAY;
|
||||
VA.lastUsed = varray_index;
|
||||
svarray->version_no = LASTVERSIONARRAY;
|
||||
|
||||
/*
|
||||
* If any files have been stored in VA.files, we store the name
|
||||
* If more than one files have been stored in varray, we store the name
|
||||
* without version in the last marker entry.
|
||||
*
|
||||
* NOTE: sorting "varray_index" entries will leave the LASTVERSIONARRAY item
|
||||
* untouched by the sort, which is intentional.
|
||||
*/
|
||||
if (!NoFileP(VA.files)) {
|
||||
strcpy(name, VA.files[0].name);
|
||||
if (!NoFileP(varray)) {
|
||||
strcpy(name, varray->name);
|
||||
separate_version(name, ver, 1);
|
||||
strcpy(VA.files[varray_index].name, name);
|
||||
if (varray_index > 1) {
|
||||
qsort(VA.files, varray_index, sizeof(*VA.files), compare_file_versions);
|
||||
}
|
||||
strcpy(svarray->name, name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Update cache information.
|
||||
*/
|
||||
strcpy(cache->path, dir);
|
||||
strcpy(cache->file, lcased_file);
|
||||
cache->mtime = sbuf.st_mtime;
|
||||
TIMEOUT(closedir(dirp));
|
||||
return (1);
|
||||
#endif /* DOS */
|
||||
@@ -3162,7 +3172,7 @@ static int get_version_array(char *dir, char *file)
|
||||
* to maintain the directory on which a file is being created.
|
||||
*/
|
||||
|
||||
static int maintain_version(char *file, int forcep)
|
||||
static int maintain_version(char *file, FileName *varray, int forcep)
|
||||
{
|
||||
char dir[MAXPATHLEN], fname[MAXNAMLEN], ver[VERSIONLEN];
|
||||
char old_file[MAXPATHLEN], vless[MAXPATHLEN];
|
||||
@@ -3170,14 +3180,17 @@ static int maintain_version(char *file, int forcep)
|
||||
int rval, max_no;
|
||||
FileName *entry;
|
||||
|
||||
if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0);
|
||||
/*
|
||||
* We have to make sure that dir is the existing directory.
|
||||
*/
|
||||
if (true_name(dir) != -1) return (0);
|
||||
if (get_version_array(dir, fname) == 0) return (0);
|
||||
if (varray == (FileName *)NULL) {
|
||||
if (unpack_filename(file, dir, fname, ver, 1) == 0) return (0);
|
||||
/*
|
||||
* We have to make sure that dir is the existing directory.
|
||||
*/
|
||||
if (true_name(dir) != -1) return (0);
|
||||
if (get_version_array(dir, fname, VersionArray, &VArrayInfo) == 0) return (0);
|
||||
varray = VersionArray;
|
||||
}
|
||||
|
||||
if (NoFileP(VA.files)) {
|
||||
if (NoFileP(varray)) {
|
||||
/*
|
||||
* We don't need to care about such case that there is no such file
|
||||
* or an only versionless file exists.
|
||||
@@ -3185,14 +3198,14 @@ static int maintain_version(char *file, int forcep)
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (OnlyVersionlessP(VA.files)) {
|
||||
if (OnlyVersionlessP(varray)) {
|
||||
if (forcep) {
|
||||
/*
|
||||
* If forcep, we link the versionless file to the version
|
||||
* 1 file.
|
||||
*/
|
||||
#ifndef DOS
|
||||
get_versionless(VA.files, vless, dir);
|
||||
get_versionless(varray, vless, dir);
|
||||
ConcNameAndVersion(vless, "1", fname);
|
||||
TIMEOUT(rval = link(vless, fname));
|
||||
if (rval == -1) {
|
||||
@@ -3209,13 +3222,13 @@ static int maintain_version(char *file, int forcep)
|
||||
* exists. Thus, FindHighestVersion works fine from now on.
|
||||
*/
|
||||
|
||||
if (get_versionless(VA.files, vless, dir) == 0) {
|
||||
if (get_versionless(varray, vless, dir) == 0) {
|
||||
/*
|
||||
* There is not a versionless file, but at least one versioned file.
|
||||
* Thus, the thing we have to do is to link a versionless file
|
||||
* to the existing highest versioned file.
|
||||
*/
|
||||
FindHighestVersion(VA.files, entry, max_no);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
ConcDirAndName(dir, entry->name, old_file);
|
||||
/*
|
||||
* The versionless file should have the same case name as the old
|
||||
@@ -3234,15 +3247,15 @@ static int maintain_version(char *file, int forcep)
|
||||
return (1);
|
||||
}
|
||||
|
||||
if (check_vless_link(vless, VA.files, old_file, &highest_p) == 0) return (0);
|
||||
if (check_vless_link(vless, varray, old_file, &highest_p) == 0) return (0);
|
||||
|
||||
if (*old_file == '\0') {
|
||||
/*
|
||||
* The versionless file is not linked to any file in VA.files.
|
||||
* The versionless file is not linked to any file in varray.
|
||||
* Thus, we have to link the versionless file to the file which
|
||||
* is versioned one higher than the existing highest version.
|
||||
*/
|
||||
FindHighestVersion(VA.files, entry, max_no);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
sprintf(ver, "%u", max_no + 1);
|
||||
/*
|
||||
* The old file should have the same case name as the versionless
|
||||
@@ -3267,7 +3280,7 @@ static int maintain_version(char *file, int forcep)
|
||||
return (1);
|
||||
} else {
|
||||
/*
|
||||
* Although the versionless file is linked to a file in VA.files,
|
||||
* Although the versionless file is linked to a file in varray,
|
||||
* the file is not the highest versioned file. We have to unlink
|
||||
* the wrongly linked versionless file, and link the highest versioned
|
||||
* file to a versionless file.
|
||||
@@ -3277,7 +3290,7 @@ static int maintain_version(char *file, int forcep)
|
||||
*Lisp_errno = errno;
|
||||
return (0);
|
||||
}
|
||||
FindHighestVersion(VA.files, entry, max_no);
|
||||
FindHighestVersion(varray, entry, max_no);
|
||||
ConcDirAndName(dir, entry->name, old_file);
|
||||
/*
|
||||
* The versionless file should have the same case name as the old
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "emlglob.h"
|
||||
#include "fvardefs.h" // for N_OP_fvar_, N_OP_fvarn, N_OP_stkscan, nati...
|
||||
#include "gcdata.h" // for GCLOOKUP, ADDREF, DELREF
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lispmap.h" // for ATOMS_HI, STK_HI
|
||||
#include "lspglob.h" // for Stackspace
|
||||
#include "lsptypes.h" // for DLword, LispPTR, GETBASEWORD, state, FRAME...
|
||||
|
||||
1
src/gc.c
1
src/gc.c
@@ -12,7 +12,6 @@
|
||||
#include <stdio.h> // for printf
|
||||
#include "emlglob.h"
|
||||
#include "gcdata.h" // for GCLOOKUPV
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcdefs.h" // for OP_gcref
|
||||
#include "lspglob.h"
|
||||
#include "lsptypes.h" // for state, ByteCode, PC, TopOfStack, Get_code_...
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "gccodedefs.h" // for code_block_size, reclaimcodeblock
|
||||
#include "gcdata.h" // for REC_GCLOOKUP, DELREF, ADDREF
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lspglob.h" // for Deleted_Implicit_Hash_Slot_word, UFNTable
|
||||
#include "lsptypes.h" // for LispPTR, NIL, UFN, Get_code_BYTE, POINTERMASK
|
||||
#include "stack.h" // for fnhead
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "gccodedefs.h" // for reclaimcodeblock
|
||||
#include "gcdata.h" // for DELREF, REC_GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcfinaldefs.h" // for arrayblockmerger, checkarrayblock, deleteblock
|
||||
#include "lispemul.h" // for LispPTR, NIL, T, POINTERMASK, DLword, ATOM_T
|
||||
#include "llstkdefs.h" // for decusecount68k
|
||||
@@ -552,15 +551,15 @@ void printarrayblock(LispPTR base) {
|
||||
printf(" Length: %d cells.\n\n", bbase->arlen);
|
||||
|
||||
addr = ((LispPTR *)bbase) - 20;
|
||||
for (; addr < (LispPTR *)bbase; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||
printf("%16p %8x <- array header\n", (void *)addr, *addr);
|
||||
for (; addr < (LispPTR *)bbase; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
||||
printf("%p %8x <- array header\n", (void *)addr, *addr);
|
||||
addr++;
|
||||
for (; addr < (LispPTR *)bbase + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||
for (; addr < (LispPTR *)bbase + 20; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
||||
printf(". . .\n");
|
||||
|
||||
addr = ((LispPTR *)btrailer) - 20;
|
||||
for (; addr < (LispPTR *)btrailer; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||
printf("%16p %8x <- array trailer\n", (void *)addr, *addr);
|
||||
for (; addr < (LispPTR *)btrailer; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
||||
printf("%p %8x <- array trailer\n", (void *)addr, *addr);
|
||||
addr++;
|
||||
for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%16p %8x\n", (void *)addr, *addr);
|
||||
for (; addr < (LispPTR *)btrailer + 20; addr++) printf("%p %8x\n", (void *)addr, *addr);
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ void enter_big_reference_count(LispPTR ptr) {
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
void modify_big_reference_count(GCENTRY *entry, DLword casep, LispPTR ptr) {
|
||||
void modify_big_reference_count(LispPTR *entry, DLword casep, LispPTR ptr) {
|
||||
struct gc_ovfl *oventry;
|
||||
LispPTR tmp;
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "emlglob.h"
|
||||
#include "gcdata.h" // for GCENTRY, REC_GCLOOKUP, STKREF, hashentry
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcmain3defs.h" // for gcmapscan, gcmapunscan, gcscanstack
|
||||
#include "gcrcelldefs.h" // for gcreccell
|
||||
#include "gcscandefs.h" // for gcscan1, gcscan2
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
|
||||
#include "arith.h" // for GetSmalldata
|
||||
#include "gcdata.h" // for htoverflow, REC_GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcoflowdefs.h" // for gc_handleoverflow, gcmaptable
|
||||
#include "gcrdefs.h" // for doreclaim
|
||||
#include "lispemul.h" // for NIL, DLword, LispPTR
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "gccodedefs.h" // for reclaimcodeblock
|
||||
#include "gcdata.h" // for DELREF, REC_GCLOOKUPV, ADDREF, REC_GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcfinaldefs.h" // for reclaimarrayblock, reclaimstackp, releasing...
|
||||
#include "gcrcelldefs.h" // for freelistcell, gcreccell
|
||||
#include "lispemul.h" // for LispPTR, ConsCell, NIL, POINTERMASK, DLword
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "dbprint.h" // for DEBUGGER
|
||||
#include "emlglob.h"
|
||||
#include "gcdata.h" // for FRPLPTR
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gvar2defs.h" // for N_OP_gvar_, N_OP_rplptr
|
||||
#include "lispemul.h" // for LispPTR, DLword, NEWATOM_VALUE_OFFSET, NEWAT...
|
||||
#include "lspglob.h" // for AtomSpace
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include "etherdefs.h" // for init_ifpage_ether
|
||||
#include "gcarraydefs.h" // for get_package_atom
|
||||
#include "gcdata.h" // for ADDREF, GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO
|
||||
#include "initsoutdefs.h" // for build_lisp_map, fixp_value, init_for_bitblt
|
||||
#include "iopage.h" // for IOPAGE
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "gcarraydefs.h" // for get_package_atom
|
||||
#include "gcdata.h" // for FRPLPTR
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lispemul.h" // for LispPTR, state, CurrentStackPTR, NIL_PTR, NIL
|
||||
#include "lispmap.h" // for S_POSITIVE
|
||||
#include "loopsopsdefs.h" // for lcfuncall, LCFetchMethod, LCFetchMethodOrHelp
|
||||
|
||||
49
src/main.c
49
src/main.c
@@ -243,7 +243,7 @@ int flushing = FALSE; /* see dbprint.h if set, all debug/trace printing will cal
|
||||
extern DspInterface currentdsp;
|
||||
#endif /* DOS || XWINDOW */
|
||||
#ifdef SDL
|
||||
#include "sdldefs.h" /* for init_SDL */
|
||||
extern int init_SDL(char*, int, int, int);
|
||||
#endif
|
||||
extern const time_t MDate;
|
||||
extern int nokbdflag;
|
||||
@@ -288,8 +288,6 @@ const char *helpstring =
|
||||
-info Print general info about the system\n\
|
||||
-help Print this message\n\
|
||||
-pixelscale <n> The amount of pixels to show for one Medley screen pixel.\n\
|
||||
-fg/-foreground <color> Screen foreground color, default Black. X color name or #RRBBGG hex\n\
|
||||
-bg/-background <color> Screen background color, default White. X color name or #RRBBGG hex\n\
|
||||
-sc[reen] <w>x<h>] The Medley screen geometry\n\
|
||||
-t <title> The window title\n\
|
||||
-title <title> The window title\n";
|
||||
@@ -318,21 +316,6 @@ const char *nethubHelpstring = "";
|
||||
extern int insnsCountdownForTimerAsyncEmulation;
|
||||
#endif
|
||||
|
||||
#if defined(XWINDOW) || defined(SDL)
|
||||
char foregroundColorName[64] = {0};
|
||||
extern char foregroundColorName[64];
|
||||
char backgroundColorName[64] = {0};
|
||||
extern char backgroundColorName[64];
|
||||
#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 */
|
||||
@@ -347,6 +330,9 @@ int main(int argc, char *argv[])
|
||||
extern int TIMER_INTERVAL;
|
||||
extern fd_set LispReadFds;
|
||||
long tmpint;
|
||||
int width = 1024, height = 768;
|
||||
int pixelscale = 1;
|
||||
char *windowtitle = "Medley";
|
||||
|
||||
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
|
||||
if (dld_find_executable(argv[0]) == 0) {
|
||||
@@ -371,6 +357,7 @@ int main(int argc, char *argv[])
|
||||
// arg processing changes argc/argv
|
||||
if (argc > 1 && argv[1][0] != '-') {
|
||||
strncpy(sysout_name_first_arg, argv[1], MAXPATHLEN);
|
||||
i++;
|
||||
}
|
||||
|
||||
|
||||
@@ -473,7 +460,7 @@ int main(int argc, char *argv[])
|
||||
#ifdef SDL
|
||||
else if ((strcmp(argv[i], "-sc") == 0) || (strcmp(argv[i], "-SC") == 0)) {
|
||||
if (argc > ++i) {
|
||||
int read = sscanf(argv[i], "%dx%d", &lispDisplayRequestedWidth, &lispDisplayRequestedHeight);
|
||||
int read = sscanf(argv[i], "%dx%d", &width, &height);
|
||||
if(read != 2) {
|
||||
(void)fprintf(stderr, "Could not parse -sc argument %s\n", argv[i]);
|
||||
exit(1);
|
||||
@@ -484,7 +471,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
} else if ((strcmp(argv[i], "-pixelscale") == 0) || (strcmp(argv[i], "-PIXELSCALE") == 0)) {
|
||||
if (argc > ++i) {
|
||||
int read = sscanf(argv[i], "%d", &pixelScale);
|
||||
int read = sscanf(argv[i], "%d", &pixelscale);
|
||||
if(read != 1) {
|
||||
(void)fprintf(stderr, "Could not parse -pixelscale argument %s\n", argv[i]);
|
||||
exit(1);
|
||||
@@ -496,26 +483,13 @@ int main(int argc, char *argv[])
|
||||
} else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "-T") == 0)
|
||||
|| (strcmp(argv[i], "-title") == 0) || (strcmp(argv[i], "-TITLE") == 0)) {
|
||||
if (argc > ++i) {
|
||||
strncpy(windowTitle, argv[i], sizeof(windowTitle) - 1);
|
||||
windowtitle = argv[i];
|
||||
} else {
|
||||
(void)fprintf(stderr, "Missing argument after -title\n");
|
||||
exit(1);
|
||||
}
|
||||
} else if (strcmp(argv[i], "-fg") == 0 || strcmp(argv[i], "-foreground") == 0) {
|
||||
if (argc > ++i) {
|
||||
strncpy(foregroundColorName, argv[i], sizeof(foregroundColorName) - 1);
|
||||
} else {
|
||||
(void)fprintf(stderr, "Missing argument after -fg/-foreground\n");
|
||||
exit(1);
|
||||
}
|
||||
} else if (strcmp(argv[i], "-bg") == 0 || strcmp(argv[i], "-background") == 0) {
|
||||
if (argc > ++i) {
|
||||
strncpy(backgroundColorName, argv[i], sizeof(backgroundColorName) - 1);
|
||||
} else {
|
||||
(void)fprintf(stderr, "Missing argument after -bg/-background\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* SDL */
|
||||
/* Can only do this under SUNOs, for now */
|
||||
else if (!strcmp(argv[i], "-E")) { /**** ethernet info ****/
|
||||
@@ -716,12 +690,13 @@ int main(int argc, char *argv[])
|
||||
make_dsp_instance(currentdsp, 0, 0, 0, 1); /* All defaults the first time */
|
||||
#endif /* DOS || XWINDOW */
|
||||
#if defined(SDL)
|
||||
init_SDL(windowTitle, lispDisplayRequestedWidth, lispDisplayRequestedHeight, pixelScale);
|
||||
init_SDL(windowtitle, width, height, pixelscale);
|
||||
#endif /* SDL */
|
||||
/* Load sysout to VM space and returns real sysout_size(not 0) */
|
||||
sysout_size = sysout_loader(sysout_name, sysout_size);
|
||||
|
||||
build_lisp_map(); /* build up map */
|
||||
build_lisp_map(); /* built up map */
|
||||
|
||||
init_ifpage(sysout_size); /* init interface page */
|
||||
init_iopage();
|
||||
init_miscstats();
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "emlglob.h"
|
||||
#include "gcdata.h" // for DELREF, GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "lispemul.h" // for LispPTR, DLword, NIL, POINTERMASK, state
|
||||
#include "lispmap.h" // for S_POSITIVE
|
||||
#include "lspglob.h"
|
||||
|
||||
@@ -419,7 +419,7 @@ loop:
|
||||
/* */
|
||||
/************************************************************************/
|
||||
|
||||
static void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope)
|
||||
void newColorizeFont8(PILOTBBT *pbt, u_char backcolor, u_char forecolor, LispPTR srctype, LispPTR ope)
|
||||
{
|
||||
DLword *nbase;
|
||||
u_char *dbase;
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "rplconsdefs.h" // for N_OP_rplcons
|
||||
#ifndef NEWCDRCODING
|
||||
#include "gcdata.h"
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "address.h"
|
||||
#endif
|
||||
|
||||
|
||||
848
src/sdl.c
848
src/sdl.c
@@ -40,8 +40,8 @@ static SDL_Surface *sdl_buffersurface = NULL;
|
||||
static int buffer_size = 0;
|
||||
static void *buffer = NULL;
|
||||
#endif
|
||||
static Uint32 sdl_foreground_color;
|
||||
static Uint32 sdl_background_color;
|
||||
static Uint32 sdl_white;
|
||||
static Uint32 sdl_black;
|
||||
static Uint32 sdl_foreground;
|
||||
static Uint32 sdl_background;
|
||||
static int sdl_bytesperpixel;
|
||||
@@ -167,764 +167,6 @@ int keymap[] = {
|
||||
// 111, /* (K5F SUN-OPEN) */
|
||||
-1, -1
|
||||
};
|
||||
|
||||
const struct ColorNameToRGB {
|
||||
char * name; uint8_t red; uint8_t green; uint8_t blue;
|
||||
} colornames[] = {
|
||||
{"alice blue", 240, 248, 255},
|
||||
{"AliceBlue", 240, 248, 255},
|
||||
{"antique white", 250, 235, 215},
|
||||
{"AntiqueWhite", 250, 235, 215},
|
||||
{"AntiqueWhite1", 255, 239, 219},
|
||||
{"AntiqueWhite2", 238, 223, 204},
|
||||
{"AntiqueWhite3", 205, 192, 176},
|
||||
{"AntiqueWhite4", 139, 131, 120},
|
||||
{"aquamarine", 127, 255, 212},
|
||||
{"aquamarine1", 127, 255, 212},
|
||||
{"aquamarine2", 118, 238, 198},
|
||||
{"aquamarine3", 102, 205, 170},
|
||||
{"aquamarine4", 69, 139, 116},
|
||||
{"azure", 240, 255, 255},
|
||||
{"azure1", 240, 255, 255},
|
||||
{"azure2", 224, 238, 238},
|
||||
{"azure3", 193, 205, 205},
|
||||
{"azure4", 131, 139, 139},
|
||||
{"beige", 245, 245, 220},
|
||||
{"bisque", 255, 228, 196},
|
||||
{"bisque1", 255, 228, 196},
|
||||
{"bisque2", 238, 213, 183},
|
||||
{"bisque3", 205, 183, 158},
|
||||
{"bisque4", 139, 125, 107},
|
||||
{"black", 0, 0, 0},
|
||||
{"blanched almond", 255, 235, 205},
|
||||
{"BlanchedAlmond", 255, 235, 205},
|
||||
{"blue", 0, 0, 255},
|
||||
{"blue violet", 138, 43, 226},
|
||||
{"blue1", 0, 0, 255},
|
||||
{"blue2", 0, 0, 238},
|
||||
{"blue3", 0, 0, 205},
|
||||
{"blue4", 0, 0, 139},
|
||||
{"BlueViolet", 138, 43, 226},
|
||||
{"brown", 165, 42, 42},
|
||||
{"brown1", 255, 64, 64},
|
||||
{"brown2", 238, 59, 59},
|
||||
{"brown3", 205, 51, 51},
|
||||
{"brown4", 139, 35, 35},
|
||||
{"burlywood", 222, 184, 135},
|
||||
{"burlywood1", 255, 211, 155},
|
||||
{"burlywood2", 238, 197, 145},
|
||||
{"burlywood3", 205, 170, 125},
|
||||
{"burlywood4", 139, 115, 85},
|
||||
{"cadet blue", 95, 158, 160},
|
||||
{"CadetBlue", 95, 158, 160},
|
||||
{"CadetBlue1", 152, 245, 255},
|
||||
{"CadetBlue2", 142, 229, 238},
|
||||
{"CadetBlue3", 122, 197, 205},
|
||||
{"CadetBlue4", 83, 134, 139},
|
||||
{"chartreuse", 127, 255, 0},
|
||||
{"chartreuse1", 127, 255, 0},
|
||||
{"chartreuse2", 118, 238, 0},
|
||||
{"chartreuse3", 102, 205, 0},
|
||||
{"chartreuse4", 69, 139, 0},
|
||||
{"chocolate", 210, 105, 30},
|
||||
{"chocolate1", 255, 127, 36},
|
||||
{"chocolate2", 238, 118, 33},
|
||||
{"chocolate3", 205, 102, 29},
|
||||
{"chocolate4", 139, 69, 19},
|
||||
{"coral", 255, 127, 80},
|
||||
{"coral1", 255, 114, 86},
|
||||
{"coral2", 238, 106, 80},
|
||||
{"coral3", 205, 91, 69},
|
||||
{"coral4", 139, 62, 47},
|
||||
{"cornflower blue", 100, 149, 237},
|
||||
{"CornflowerBlue", 100, 149, 237},
|
||||
{"cornsilk", 255, 248, 220},
|
||||
{"cornsilk1", 255, 248, 220},
|
||||
{"cornsilk2", 238, 232, 205},
|
||||
{"cornsilk3", 205, 200, 177},
|
||||
{"cornsilk4", 139, 136, 120},
|
||||
{"cyan", 0, 255, 255},
|
||||
{"cyan1", 0, 255, 255},
|
||||
{"cyan2", 0, 238, 238},
|
||||
{"cyan3", 0, 205, 205},
|
||||
{"cyan4", 0, 139, 139},
|
||||
{"dark blue", 0, 0, 139},
|
||||
{"dark cyan", 0, 139, 139},
|
||||
{"dark goldenrod", 184, 134, 11},
|
||||
{"dark gray", 169, 169, 169},
|
||||
{"dark green", 0, 100, 0},
|
||||
{"dark grey", 169, 169, 169},
|
||||
{"dark khaki", 189, 183, 107},
|
||||
{"dark magenta", 139, 0, 139},
|
||||
{"dark olive green", 85, 107, 47},
|
||||
{"dark orange", 255, 140, 0},
|
||||
{"dark orchid", 153, 50, 204},
|
||||
{"dark red", 139, 0, 0},
|
||||
{"dark salmon", 233, 150, 122},
|
||||
{"dark sea green", 143, 188, 143},
|
||||
{"dark slate blue", 72, 61, 139},
|
||||
{"dark slate gray", 47, 79, 79},
|
||||
{"dark slate grey", 47, 79, 79},
|
||||
{"dark turquoise", 0, 206, 209},
|
||||
{"dark violet", 148, 0, 211},
|
||||
{"DarkBlue", 0, 0, 139},
|
||||
{"DarkCyan", 0, 139, 139},
|
||||
{"DarkGoldenrod", 184, 134, 11},
|
||||
{"DarkGoldenrod1", 255, 185, 15},
|
||||
{"DarkGoldenrod2", 238, 173, 14},
|
||||
{"DarkGoldenrod3", 205, 149, 12},
|
||||
{"DarkGoldenrod4", 139, 101, 8},
|
||||
{"DarkGray", 169, 169, 169},
|
||||
{"DarkGreen", 0, 100, 0},
|
||||
{"DarkGrey", 169, 169, 169},
|
||||
{"DarkKhaki", 189, 183, 107},
|
||||
{"DarkMagenta", 139, 0, 139},
|
||||
{"DarkOliveGreen", 85, 107, 47},
|
||||
{"DarkOliveGreen1", 202, 255, 112},
|
||||
{"DarkOliveGreen2", 188, 238, 104},
|
||||
{"DarkOliveGreen3", 162, 205, 90},
|
||||
{"DarkOliveGreen4", 110, 139, 61},
|
||||
{"DarkOrange", 255, 140, 0},
|
||||
{"DarkOrange1", 255, 127, 0},
|
||||
{"DarkOrange2", 238, 118, 0},
|
||||
{"DarkOrange3", 205, 102, 0},
|
||||
{"DarkOrange4", 139, 69, 0},
|
||||
{"DarkOrchid", 153, 50, 204},
|
||||
{"DarkOrchid1", 191, 62, 255},
|
||||
{"DarkOrchid2", 178, 58, 238},
|
||||
{"DarkOrchid3", 154, 50, 205},
|
||||
{"DarkOrchid4", 104, 34, 139},
|
||||
{"DarkRed", 139, 0, 0},
|
||||
{"DarkSalmon", 233, 150, 122},
|
||||
{"DarkSeaGreen", 143, 188, 143},
|
||||
{"DarkSeaGreen1", 193, 255, 193},
|
||||
{"DarkSeaGreen2", 180, 238, 180},
|
||||
{"DarkSeaGreen3", 155, 205, 155},
|
||||
{"DarkSeaGreen4", 105, 139, 105},
|
||||
{"DarkSlateBlue", 72, 61, 139},
|
||||
{"DarkSlateGray", 47, 79, 79},
|
||||
{"DarkSlateGray1", 151, 255, 255},
|
||||
{"DarkSlateGray2", 141, 238, 238},
|
||||
{"DarkSlateGray3", 121, 205, 205},
|
||||
{"DarkSlateGray4", 82, 139, 139},
|
||||
{"DarkSlateGrey", 47, 79, 79},
|
||||
{"DarkTurquoise", 0, 206, 209},
|
||||
{"DarkViolet", 148, 0, 211},
|
||||
{"deep pink", 255, 20, 147},
|
||||
{"deep sky blue", 0, 191, 255},
|
||||
{"DeepPink", 255, 20, 147},
|
||||
{"DeepPink1", 255, 20, 147},
|
||||
{"DeepPink2", 238, 18, 137},
|
||||
{"DeepPink3", 205, 16, 118},
|
||||
{"DeepPink4", 139, 10, 80},
|
||||
{"DeepSkyBlue", 0, 191, 255},
|
||||
{"DeepSkyBlue1", 0, 191, 255},
|
||||
{"DeepSkyBlue2", 0, 178, 238},
|
||||
{"DeepSkyBlue3", 0, 154, 205},
|
||||
{"DeepSkyBlue4", 0, 104, 139},
|
||||
{"dim gray", 105, 105, 105},
|
||||
{"dim grey", 105, 105, 105},
|
||||
{"DimGray", 105, 105, 105},
|
||||
{"DimGrey", 105, 105, 105},
|
||||
{"dodger blue", 30, 144, 255},
|
||||
{"DodgerBlue", 30, 144, 255},
|
||||
{"DodgerBlue1", 30, 144, 255},
|
||||
{"DodgerBlue2", 28, 134, 238},
|
||||
{"DodgerBlue3", 24, 116, 205},
|
||||
{"DodgerBlue4", 16, 78, 139},
|
||||
{"firebrick", 178, 34, 34},
|
||||
{"firebrick1", 255, 48, 48},
|
||||
{"firebrick2", 238, 44, 44},
|
||||
{"firebrick3", 205, 38, 38},
|
||||
{"firebrick4", 139, 26, 26},
|
||||
{"floral white", 255, 250, 240},
|
||||
{"FloralWhite", 255, 250, 240},
|
||||
{"forest green", 34, 139, 34},
|
||||
{"ForestGreen", 34, 139, 34},
|
||||
{"gainsboro", 220, 220, 220},
|
||||
{"ghost white", 248, 248, 255},
|
||||
{"GhostWhite", 248, 248, 255},
|
||||
{"gold", 255, 215, 0},
|
||||
{"gold1", 255, 215, 0},
|
||||
{"gold2", 238, 201, 0},
|
||||
{"gold3", 205, 173, 0},
|
||||
{"gold4", 139, 117, 0},
|
||||
{"goldenrod", 218, 165, 32},
|
||||
{"goldenrod1", 255, 193, 37},
|
||||
{"goldenrod2", 238, 180, 34},
|
||||
{"goldenrod3", 205, 155, 29},
|
||||
{"goldenrod4", 139, 105, 20},
|
||||
{"gray", 190, 190, 190},
|
||||
{"gray0", 0, 0, 0},
|
||||
{"gray1", 3, 3, 3},
|
||||
{"gray10", 26, 26, 26},
|
||||
{"gray100", 255, 255, 255},
|
||||
{"gray11", 28, 28, 28},
|
||||
{"gray12", 31, 31, 31},
|
||||
{"gray13", 33, 33, 33},
|
||||
{"gray14", 36, 36, 36},
|
||||
{"gray15", 38, 38, 38},
|
||||
{"gray16", 41, 41, 41},
|
||||
{"gray17", 43, 43, 43},
|
||||
{"gray18", 46, 46, 46},
|
||||
{"gray19", 48, 48, 48},
|
||||
{"gray2", 5, 5, 5},
|
||||
{"gray20", 51, 51, 51},
|
||||
{"gray21", 54, 54, 54},
|
||||
{"gray22", 56, 56, 56},
|
||||
{"gray23", 59, 59, 59},
|
||||
{"gray24", 61, 61, 61},
|
||||
{"gray25", 64, 64, 64},
|
||||
{"gray26", 66, 66, 66},
|
||||
{"gray27", 69, 69, 69},
|
||||
{"gray28", 71, 71, 71},
|
||||
{"gray29", 74, 74, 74},
|
||||
{"gray3", 8, 8, 8},
|
||||
{"gray30", 77, 77, 77},
|
||||
{"gray31", 79, 79, 79},
|
||||
{"gray32", 82, 82, 82},
|
||||
{"gray33", 84, 84, 84},
|
||||
{"gray34", 87, 87, 87},
|
||||
{"gray35", 89, 89, 89},
|
||||
{"gray36", 92, 92, 92},
|
||||
{"gray37", 94, 94, 94},
|
||||
{"gray38", 97, 97, 97},
|
||||
{"gray39", 99, 99, 99},
|
||||
{"gray4", 10, 10, 10},
|
||||
{"gray40", 102, 102, 102},
|
||||
{"gray41", 105, 105, 105},
|
||||
{"gray42", 107, 107, 107},
|
||||
{"gray43", 110, 110, 110},
|
||||
{"gray44", 112, 112, 112},
|
||||
{"gray45", 115, 115, 115},
|
||||
{"gray46", 117, 117, 117},
|
||||
{"gray47", 120, 120, 120},
|
||||
{"gray48", 122, 122, 122},
|
||||
{"gray49", 125, 125, 125},
|
||||
{"gray5", 13, 13, 13},
|
||||
{"gray50", 127, 127, 127},
|
||||
{"gray51", 130, 130, 130},
|
||||
{"gray52", 133, 133, 133},
|
||||
{"gray53", 135, 135, 135},
|
||||
{"gray54", 138, 138, 138},
|
||||
{"gray55", 140, 140, 140},
|
||||
{"gray56", 143, 143, 143},
|
||||
{"gray57", 145, 145, 145},
|
||||
{"gray58", 148, 148, 148},
|
||||
{"gray59", 150, 150, 150},
|
||||
{"gray6", 15, 15, 15},
|
||||
{"gray60", 153, 153, 153},
|
||||
{"gray61", 156, 156, 156},
|
||||
{"gray62", 158, 158, 158},
|
||||
{"gray63", 161, 161, 161},
|
||||
{"gray64", 163, 163, 163},
|
||||
{"gray65", 166, 166, 166},
|
||||
{"gray66", 168, 168, 168},
|
||||
{"gray67", 171, 171, 171},
|
||||
{"gray68", 173, 173, 173},
|
||||
{"gray69", 176, 176, 176},
|
||||
{"gray7", 18, 18, 18},
|
||||
{"gray70", 179, 179, 179},
|
||||
{"gray71", 181, 181, 181},
|
||||
{"gray72", 184, 184, 184},
|
||||
{"gray73", 186, 186, 186},
|
||||
{"gray74", 189, 189, 189},
|
||||
{"gray75", 191, 191, 191},
|
||||
{"gray76", 194, 194, 194},
|
||||
{"gray77", 196, 196, 196},
|
||||
{"gray78", 199, 199, 199},
|
||||
{"gray79", 201, 201, 201},
|
||||
{"gray8", 20, 20, 20},
|
||||
{"gray80", 204, 204, 204},
|
||||
{"gray81", 207, 207, 207},
|
||||
{"gray82", 209, 209, 209},
|
||||
{"gray83", 212, 212, 212},
|
||||
{"gray84", 214, 214, 214},
|
||||
{"gray85", 217, 217, 217},
|
||||
{"gray86", 219, 219, 219},
|
||||
{"gray87", 222, 222, 222},
|
||||
{"gray88", 224, 224, 224},
|
||||
{"gray89", 227, 227, 227},
|
||||
{"gray9", 23, 23, 23},
|
||||
{"gray90", 229, 229, 229},
|
||||
{"gray91", 232, 232, 232},
|
||||
{"gray92", 235, 235, 235},
|
||||
{"gray93", 237, 237, 237},
|
||||
{"gray94", 240, 240, 240},
|
||||
{"gray95", 242, 242, 242},
|
||||
{"gray96", 245, 245, 245},
|
||||
{"gray97", 247, 247, 247},
|
||||
{"gray98", 250, 250, 250},
|
||||
{"gray99", 252, 252, 252},
|
||||
{"green", 0, 255, 0},
|
||||
{"green yellow", 173, 255, 47},
|
||||
{"green1", 0, 255, 0},
|
||||
{"green2", 0, 238, 0},
|
||||
{"green3", 0, 205, 0},
|
||||
{"green4", 0, 139, 0},
|
||||
{"GreenYellow", 173, 255, 47},
|
||||
{"grey", 190, 190, 190},
|
||||
{"grey0", 0, 0, 0},
|
||||
{"grey1", 3, 3, 3},
|
||||
{"grey10", 26, 26, 26},
|
||||
{"grey100", 255, 255, 255},
|
||||
{"grey11", 28, 28, 28},
|
||||
{"grey12", 31, 31, 31},
|
||||
{"grey13", 33, 33, 33},
|
||||
{"grey14", 36, 36, 36},
|
||||
{"grey15", 38, 38, 38},
|
||||
{"grey16", 41, 41, 41},
|
||||
{"grey17", 43, 43, 43},
|
||||
{"grey18", 46, 46, 46},
|
||||
{"grey19", 48, 48, 48},
|
||||
{"grey2", 5, 5, 5},
|
||||
{"grey20", 51, 51, 51},
|
||||
{"grey21", 54, 54, 54},
|
||||
{"grey22", 56, 56, 56},
|
||||
{"grey23", 59, 59, 59},
|
||||
{"grey24", 61, 61, 61},
|
||||
{"grey25", 64, 64, 64},
|
||||
{"grey26", 66, 66, 66},
|
||||
{"grey27", 69, 69, 69},
|
||||
{"grey28", 71, 71, 71},
|
||||
{"grey29", 74, 74, 74},
|
||||
{"grey3", 8, 8, 8},
|
||||
{"grey30", 77, 77, 77},
|
||||
{"grey31", 79, 79, 79},
|
||||
{"grey32", 82, 82, 82},
|
||||
{"grey33", 84, 84, 84},
|
||||
{"grey34", 87, 87, 87},
|
||||
{"grey35", 89, 89, 89},
|
||||
{"grey36", 92, 92, 92},
|
||||
{"grey37", 94, 94, 94},
|
||||
{"grey38", 97, 97, 97},
|
||||
{"grey39", 99, 99, 99},
|
||||
{"grey4", 10, 10, 10},
|
||||
{"grey40", 102, 102, 102},
|
||||
{"grey41", 105, 105, 105},
|
||||
{"grey42", 107, 107, 107},
|
||||
{"grey43", 110, 110, 110},
|
||||
{"grey44", 112, 112, 112},
|
||||
{"grey45", 115, 115, 115},
|
||||
{"grey46", 117, 117, 117},
|
||||
{"grey47", 120, 120, 120},
|
||||
{"grey48", 122, 122, 122},
|
||||
{"grey49", 125, 125, 125},
|
||||
{"grey5", 13, 13, 13},
|
||||
{"grey50", 127, 127, 127},
|
||||
{"grey51", 130, 130, 130},
|
||||
{"grey52", 133, 133, 133},
|
||||
{"grey53", 135, 135, 135},
|
||||
{"grey54", 138, 138, 138},
|
||||
{"grey55", 140, 140, 140},
|
||||
{"grey56", 143, 143, 143},
|
||||
{"grey57", 145, 145, 145},
|
||||
{"grey58", 148, 148, 148},
|
||||
{"grey59", 150, 150, 150},
|
||||
{"grey6", 15, 15, 15},
|
||||
{"grey60", 153, 153, 153},
|
||||
{"grey61", 156, 156, 156},
|
||||
{"grey62", 158, 158, 158},
|
||||
{"grey63", 161, 161, 161},
|
||||
{"grey64", 163, 163, 163},
|
||||
{"grey65", 166, 166, 166},
|
||||
{"grey66", 168, 168, 168},
|
||||
{"grey67", 171, 171, 171},
|
||||
{"grey68", 173, 173, 173},
|
||||
{"grey69", 176, 176, 176},
|
||||
{"grey7", 18, 18, 18},
|
||||
{"grey70", 179, 179, 179},
|
||||
{"grey71", 181, 181, 181},
|
||||
{"grey72", 184, 184, 184},
|
||||
{"grey73", 186, 186, 186},
|
||||
{"grey74", 189, 189, 189},
|
||||
{"grey75", 191, 191, 191},
|
||||
{"grey76", 194, 194, 194},
|
||||
{"grey77", 196, 196, 196},
|
||||
{"grey78", 199, 199, 199},
|
||||
{"grey79", 201, 201, 201},
|
||||
{"grey8", 20, 20, 20},
|
||||
{"grey80", 204, 204, 204},
|
||||
{"grey81", 207, 207, 207},
|
||||
{"grey82", 209, 209, 209},
|
||||
{"grey83", 212, 212, 212},
|
||||
{"grey84", 214, 214, 214},
|
||||
{"grey85", 217, 217, 217},
|
||||
{"grey86", 219, 219, 219},
|
||||
{"grey87", 222, 222, 222},
|
||||
{"grey88", 224, 224, 224},
|
||||
{"grey89", 227, 227, 227},
|
||||
{"grey9", 23, 23, 23},
|
||||
{"grey90", 229, 229, 229},
|
||||
{"grey91", 232, 232, 232},
|
||||
{"grey92", 235, 235, 235},
|
||||
{"grey93", 237, 237, 237},
|
||||
{"grey94", 240, 240, 240},
|
||||
{"grey95", 242, 242, 242},
|
||||
{"grey96", 245, 245, 245},
|
||||
{"grey97", 247, 247, 247},
|
||||
{"grey98", 250, 250, 250},
|
||||
{"grey99", 252, 252, 252},
|
||||
{"honeydew", 240, 255, 240},
|
||||
{"honeydew1", 240, 255, 240},
|
||||
{"honeydew2", 224, 238, 224},
|
||||
{"honeydew3", 193, 205, 193},
|
||||
{"honeydew4", 131, 139, 131},
|
||||
{"hot pink", 255, 105, 180},
|
||||
{"HotPink", 255, 105, 180},
|
||||
{"HotPink1", 255, 110, 180},
|
||||
{"HotPink2", 238, 106, 167},
|
||||
{"HotPink3", 205, 96, 144},
|
||||
{"HotPink4", 139, 58, 98},
|
||||
{"indian red", 205, 92, 92},
|
||||
{"IndianRed", 205, 92, 92},
|
||||
{"IndianRed1", 255, 106, 106},
|
||||
{"IndianRed2", 238, 99, 99},
|
||||
{"IndianRed3", 205, 85, 85},
|
||||
{"IndianRed4", 139, 58, 58},
|
||||
{"ivory", 255, 255, 240},
|
||||
{"ivory1", 255, 255, 240},
|
||||
{"ivory2", 238, 238, 224},
|
||||
{"ivory3", 205, 205, 193},
|
||||
{"ivory4", 139, 139, 131},
|
||||
{"khaki", 240, 230, 140},
|
||||
{"khaki1", 255, 246, 143},
|
||||
{"khaki2", 238, 230, 133},
|
||||
{"khaki3", 205, 198, 115},
|
||||
{"khaki4", 139, 134, 78},
|
||||
{"lavender", 230, 230, 250},
|
||||
{"lavender blush", 255, 240, 245},
|
||||
{"LavenderBlush", 255, 240, 245},
|
||||
{"LavenderBlush1", 255, 240, 245},
|
||||
{"LavenderBlush2", 238, 224, 229},
|
||||
{"LavenderBlush3", 205, 193, 197},
|
||||
{"LavenderBlush4", 139, 131, 134},
|
||||
{"lawn green", 124, 252, 0},
|
||||
{"LawnGreen", 124, 252, 0},
|
||||
{"lemon chiffon", 255, 250, 205},
|
||||
{"LemonChiffon", 255, 250, 205},
|
||||
{"LemonChiffon1", 255, 250, 205},
|
||||
{"LemonChiffon2", 238, 233, 191},
|
||||
{"LemonChiffon3", 205, 201, 165},
|
||||
{"LemonChiffon4", 139, 137, 112},
|
||||
{"light blue", 173, 216, 230},
|
||||
{"light coral", 240, 128, 128},
|
||||
{"light cyan", 224, 255, 255},
|
||||
{"light goldenrod", 238, 221, 130},
|
||||
{"light goldenrod yellow", 250, 250, 210},
|
||||
{"light gray", 211, 211, 211},
|
||||
{"light green", 144, 238, 144},
|
||||
{"light grey", 211, 211, 211},
|
||||
{"light pink", 255, 182, 193},
|
||||
{"light salmon", 255, 160, 122},
|
||||
{"light sea green", 32, 178, 170},
|
||||
{"light sky blue", 135, 206, 250},
|
||||
{"light slate blue", 132, 112, 255},
|
||||
{"light slate gray", 119, 136, 153},
|
||||
{"light slate grey", 119, 136, 153},
|
||||
{"light steel blue", 176, 196, 222},
|
||||
{"light yellow", 255, 255, 224},
|
||||
{"LightBlue", 173, 216, 230},
|
||||
{"LightBlue1", 191, 239, 255},
|
||||
{"LightBlue2", 178, 223, 238},
|
||||
{"LightBlue3", 154, 192, 205},
|
||||
{"LightBlue4", 104, 131, 139},
|
||||
{"LightCoral", 240, 128, 128},
|
||||
{"LightCyan", 224, 255, 255},
|
||||
{"LightCyan1", 224, 255, 255},
|
||||
{"LightCyan2", 209, 238, 238},
|
||||
{"LightCyan3", 180, 205, 205},
|
||||
{"LightCyan4", 122, 139, 139},
|
||||
{"LightGoldenrod", 238, 221, 130},
|
||||
{"LightGoldenrod1", 255, 236, 139},
|
||||
{"LightGoldenrod2", 238, 220, 130},
|
||||
{"LightGoldenrod3", 205, 190, 112},
|
||||
{"LightGoldenrod4", 139, 129, 76},
|
||||
{"LightGoldenrodYellow", 250, 250, 210},
|
||||
{"LightGray", 211, 211, 211},
|
||||
{"LightGreen", 144, 238, 144},
|
||||
{"LightGrey", 211, 211, 211},
|
||||
{"LightPink", 255, 182, 193},
|
||||
{"LightPink1", 255, 174, 185},
|
||||
{"LightPink2", 238, 162, 173},
|
||||
{"LightPink3", 205, 140, 149},
|
||||
{"LightPink4", 139, 95, 101},
|
||||
{"LightSalmon", 255, 160, 122},
|
||||
{"LightSalmon1", 255, 160, 122},
|
||||
{"LightSalmon2", 238, 149, 114},
|
||||
{"LightSalmon3", 205, 129, 98},
|
||||
{"LightSalmon4", 139, 87, 66},
|
||||
{"LightSeaGreen", 32, 178, 170},
|
||||
{"LightSkyBlue", 135, 206, 250},
|
||||
{"LightSkyBlue1", 176, 226, 255},
|
||||
{"LightSkyBlue2", 164, 211, 238},
|
||||
{"LightSkyBlue3", 141, 182, 205},
|
||||
{"LightSkyBlue4", 96, 123, 139},
|
||||
{"LightSlateBlue", 132, 112, 255},
|
||||
{"LightSlateGray", 119, 136, 153},
|
||||
{"LightSlateGrey", 119, 136, 153},
|
||||
{"LightSteelBlue", 176, 196, 222},
|
||||
{"LightSteelBlue1", 202, 225, 255},
|
||||
{"LightSteelBlue2", 188, 210, 238},
|
||||
{"LightSteelBlue3", 162, 181, 205},
|
||||
{"LightSteelBlue4", 110, 123, 139},
|
||||
{"LightYellow", 255, 255, 224},
|
||||
{"LightYellow1", 255, 255, 224},
|
||||
{"LightYellow2", 238, 238, 209},
|
||||
{"LightYellow3", 205, 205, 180},
|
||||
{"LightYellow4", 139, 139, 122},
|
||||
{"lime green", 50, 205, 50},
|
||||
{"LimeGreen", 50, 205, 50},
|
||||
{"linen", 250, 240, 230},
|
||||
{"magenta", 255, 0, 255},
|
||||
{"magenta1", 255, 0, 255},
|
||||
{"magenta2", 238, 0, 238},
|
||||
{"magenta3", 205, 0, 205},
|
||||
{"magenta4", 139, 0, 139},
|
||||
{"maroon", 176, 48, 96},
|
||||
{"maroon1", 255, 52, 179},
|
||||
{"maroon2", 238, 48, 167},
|
||||
{"maroon3", 205, 41, 144},
|
||||
{"maroon4", 139, 28, 98},
|
||||
{"medium aquamarine", 102, 205, 170},
|
||||
{"medium blue", 0, 0, 205},
|
||||
{"medium orchid", 186, 85, 211},
|
||||
{"medium purple", 147, 112, 219},
|
||||
{"medium sea green", 60, 179, 113},
|
||||
{"medium slate blue", 123, 104, 238},
|
||||
{"medium spring green", 0, 250, 154},
|
||||
{"medium turquoise", 72, 209, 204},
|
||||
{"medium violet red", 199, 21, 133},
|
||||
{"MediumAquamarine", 102, 205, 170},
|
||||
{"MediumBlue", 0, 0, 205},
|
||||
{"MediumOrchid", 186, 85, 211},
|
||||
{"MediumOrchid1", 224, 102, 255},
|
||||
{"MediumOrchid2", 209, 95, 238},
|
||||
{"MediumOrchid3", 180, 82, 205},
|
||||
{"MediumOrchid4", 122, 55, 139},
|
||||
{"MediumPurple", 147, 112, 219},
|
||||
{"MediumPurple1", 171, 130, 255},
|
||||
{"MediumPurple2", 159, 121, 238},
|
||||
{"MediumPurple3", 137, 104, 205},
|
||||
{"MediumPurple4", 93, 71, 139},
|
||||
{"MediumSeaGreen", 60, 179, 113},
|
||||
{"MediumSlateBlue", 123, 104, 238},
|
||||
{"MediumSpringGreen", 0, 250, 154},
|
||||
{"MediumTurquoise", 72, 209, 204},
|
||||
{"MediumVioletRed", 199, 21, 133},
|
||||
{"midnight blue", 25, 25, 112},
|
||||
{"MidnightBlue", 25, 25, 112},
|
||||
{"mint cream", 245, 255, 250},
|
||||
{"MintCream", 245, 255, 250},
|
||||
{"misty rose", 255, 228, 225},
|
||||
{"MistyRose", 255, 228, 225},
|
||||
{"MistyRose1", 255, 228, 225},
|
||||
{"MistyRose2", 238, 213, 210},
|
||||
{"MistyRose3", 205, 183, 181},
|
||||
{"MistyRose4", 139, 125, 123},
|
||||
{"moccasin", 255, 228, 181},
|
||||
{"navajo white", 255, 222, 173},
|
||||
{"NavajoWhite", 255, 222, 173},
|
||||
{"NavajoWhite1", 255, 222, 173},
|
||||
{"NavajoWhite2", 238, 207, 161},
|
||||
{"NavajoWhite3", 205, 179, 139},
|
||||
{"NavajoWhite4", 139, 121, 94},
|
||||
{"navy", 0, 0, 128},
|
||||
{"navy blue", 0, 0, 128},
|
||||
{"NavyBlue", 0, 0, 128},
|
||||
{"old lace", 253, 245, 230},
|
||||
{"OldLace", 253, 245, 230},
|
||||
{"olive drab", 107, 142, 35},
|
||||
{"OliveDrab", 107, 142, 35},
|
||||
{"OliveDrab1", 192, 255, 62},
|
||||
{"OliveDrab2", 179, 238, 58},
|
||||
{"OliveDrab3", 154, 205, 50},
|
||||
{"OliveDrab4", 105, 139, 34},
|
||||
{"orange", 255, 165, 0},
|
||||
{"orange red", 255, 69, 0},
|
||||
{"orange1", 255, 165, 0},
|
||||
{"orange2", 238, 154, 0},
|
||||
{"orange3", 205, 133, 0},
|
||||
{"orange4", 139, 90, 0},
|
||||
{"OrangeRed", 255, 69, 0},
|
||||
{"OrangeRed1", 255, 69, 0},
|
||||
{"OrangeRed2", 238, 64, 0},
|
||||
{"OrangeRed3", 205, 55, 0},
|
||||
{"OrangeRed4", 139, 37, 0},
|
||||
{"orchid", 218, 112, 214},
|
||||
{"orchid1", 255, 131, 250},
|
||||
{"orchid2", 238, 122, 233},
|
||||
{"orchid3", 205, 105, 201},
|
||||
{"orchid4", 139, 71, 137},
|
||||
{"pale goldenrod", 238, 232, 170},
|
||||
{"pale green", 152, 251, 152},
|
||||
{"pale turquoise", 175, 238, 238},
|
||||
{"pale violet red", 219, 112, 147},
|
||||
{"PaleGoldenrod", 238, 232, 170},
|
||||
{"PaleGreen", 152, 251, 152},
|
||||
{"PaleGreen1", 154, 255, 154},
|
||||
{"PaleGreen2", 144, 238, 144},
|
||||
{"PaleGreen3", 124, 205, 124},
|
||||
{"PaleGreen4", 84, 139, 84},
|
||||
{"PaleTurquoise", 175, 238, 238},
|
||||
{"PaleTurquoise1", 187, 255, 255},
|
||||
{"PaleTurquoise2", 174, 238, 238},
|
||||
{"PaleTurquoise3", 150, 205, 205},
|
||||
{"PaleTurquoise4", 102, 139, 139},
|
||||
{"PaleVioletRed", 219, 112, 147},
|
||||
{"PaleVioletRed1", 255, 130, 171},
|
||||
{"PaleVioletRed2", 238, 121, 159},
|
||||
{"PaleVioletRed3", 205, 104, 137},
|
||||
{"PaleVioletRed4", 139, 71, 93},
|
||||
{"papaya whip", 255, 239, 213},
|
||||
{"PapayaWhip", 255, 239, 213},
|
||||
{"peach puff", 255, 218, 185},
|
||||
{"PeachPuff", 255, 218, 185},
|
||||
{"PeachPuff1", 255, 218, 185},
|
||||
{"PeachPuff2", 238, 203, 173},
|
||||
{"PeachPuff3", 205, 175, 149},
|
||||
{"PeachPuff4", 139, 119, 101},
|
||||
{"peru", 205, 133, 63},
|
||||
{"pink", 255, 192, 203},
|
||||
{"pink1", 255, 181, 197},
|
||||
{"pink2", 238, 169, 184},
|
||||
{"pink3", 205, 145, 158},
|
||||
{"pink4", 139, 99, 108},
|
||||
{"plum", 221, 160, 221},
|
||||
{"plum1", 255, 187, 255},
|
||||
{"plum2", 238, 174, 238},
|
||||
{"plum3", 205, 150, 205},
|
||||
{"plum4", 139, 102, 139},
|
||||
{"powder blue", 176, 224, 230},
|
||||
{"PowderBlue", 176, 224, 230},
|
||||
{"purple", 160, 32, 240},
|
||||
{"purple1", 155, 48, 255},
|
||||
{"purple2", 145, 44, 238},
|
||||
{"purple3", 125, 38, 205},
|
||||
{"purple4", 85, 26, 139},
|
||||
{"red", 255, 0, 0},
|
||||
{"red1", 255, 0, 0},
|
||||
{"red2", 238, 0, 0},
|
||||
{"red3", 205, 0, 0},
|
||||
{"red4", 139, 0, 0},
|
||||
{"rosy brown", 188, 143, 143},
|
||||
{"RosyBrown", 188, 143, 143},
|
||||
{"RosyBrown1", 255, 193, 193},
|
||||
{"RosyBrown2", 238, 180, 180},
|
||||
{"RosyBrown3", 205, 155, 155},
|
||||
{"RosyBrown4", 139, 105, 105},
|
||||
{"royal blue", 65, 105, 225},
|
||||
{"RoyalBlue", 65, 105, 225},
|
||||
{"RoyalBlue1", 72, 118, 255},
|
||||
{"RoyalBlue2", 67, 110, 238},
|
||||
{"RoyalBlue3", 58, 95, 205},
|
||||
{"RoyalBlue4", 39, 64, 139},
|
||||
{"saddle brown", 139, 69, 19},
|
||||
{"SaddleBrown", 139, 69, 19},
|
||||
{"salmon", 250, 128, 114},
|
||||
{"salmon1", 255, 140, 105},
|
||||
{"salmon2", 238, 130, 98},
|
||||
{"salmon3", 205, 112, 84},
|
||||
{"salmon4", 139, 76, 57},
|
||||
{"sandy brown", 244, 164, 96},
|
||||
{"SandyBrown", 244, 164, 96},
|
||||
{"sea green", 46, 139, 87},
|
||||
{"SeaGreen", 46, 139, 87},
|
||||
{"SeaGreen1", 84, 255, 159},
|
||||
{"SeaGreen2", 78, 238, 148},
|
||||
{"SeaGreen3", 67, 205, 128},
|
||||
{"SeaGreen4", 46, 139, 87},
|
||||
{"seashell", 255, 245, 238},
|
||||
{"seashell1", 255, 245, 238},
|
||||
{"seashell2", 238, 229, 222},
|
||||
{"seashell3", 205, 197, 191},
|
||||
{"seashell4", 139, 134, 130},
|
||||
{"sienna", 160, 82, 45},
|
||||
{"sienna1", 255, 130, 71},
|
||||
{"sienna2", 238, 121, 66},
|
||||
{"sienna3", 205, 104, 57},
|
||||
{"sienna4", 139, 71, 38},
|
||||
{"sky blue", 135, 206, 235},
|
||||
{"SkyBlue", 135, 206, 235},
|
||||
{"SkyBlue1", 135, 206, 255},
|
||||
{"SkyBlue2", 126, 192, 238},
|
||||
{"SkyBlue3", 108, 166, 205},
|
||||
{"SkyBlue4", 74, 112, 139},
|
||||
{"slate blue", 106, 90, 205},
|
||||
{"slate gray", 112, 128, 144},
|
||||
{"slate grey", 112, 128, 144},
|
||||
{"SlateBlue", 106, 90, 205},
|
||||
{"SlateBlue1", 131, 111, 255},
|
||||
{"SlateBlue2", 122, 103, 238},
|
||||
{"SlateBlue3", 105, 89, 205},
|
||||
{"SlateBlue4", 71, 60, 139},
|
||||
{"SlateGray", 112, 128, 144},
|
||||
{"SlateGray1", 198, 226, 255},
|
||||
{"SlateGray2", 185, 211, 238},
|
||||
{"SlateGray3", 159, 182, 205},
|
||||
{"SlateGray4", 108, 123, 139},
|
||||
{"SlateGrey", 112, 128, 144},
|
||||
{"snow", 255, 250, 250},
|
||||
{"snow1", 255, 250, 250},
|
||||
{"snow2", 238, 233, 233},
|
||||
{"snow3", 205, 201, 201},
|
||||
{"snow4", 139, 137, 137},
|
||||
{"spring green", 0, 255, 127},
|
||||
{"SpringGreen", 0, 255, 127},
|
||||
{"SpringGreen1", 0, 255, 127},
|
||||
{"SpringGreen2", 0, 238, 118},
|
||||
{"SpringGreen3", 0, 205, 102},
|
||||
{"SpringGreen4", 0, 139, 69},
|
||||
{"steel blue", 70, 130, 180},
|
||||
{"SteelBlue", 70, 130, 180},
|
||||
{"SteelBlue1", 99, 184, 255},
|
||||
{"SteelBlue2", 92, 172, 238},
|
||||
{"SteelBlue3", 79, 148, 205},
|
||||
{"SteelBlue4", 54, 100, 139},
|
||||
{"tan", 210, 180, 140},
|
||||
{"tan1", 255, 165, 79},
|
||||
{"tan2", 238, 154, 73},
|
||||
{"tan3", 205, 133, 63},
|
||||
{"tan4", 139, 90, 43},
|
||||
{"thistle", 216, 191, 216},
|
||||
{"thistle1", 255, 225, 255},
|
||||
{"thistle2", 238, 210, 238},
|
||||
{"thistle3", 205, 181, 205},
|
||||
{"thistle4", 139, 123, 139},
|
||||
{"tomato", 255, 99, 71},
|
||||
{"tomato1", 255, 99, 71},
|
||||
{"tomato2", 238, 92, 66},
|
||||
{"tomato3", 205, 79, 57},
|
||||
{"tomato4", 139, 54, 38},
|
||||
{"turquoise", 64, 224, 208},
|
||||
{"turquoise1", 0, 245, 255},
|
||||
{"turquoise2", 0, 229, 238},
|
||||
{"turquoise3", 0, 197, 205},
|
||||
{"turquoise4", 0, 134, 139},
|
||||
{"violet", 238, 130, 238},
|
||||
{"violet red", 208, 32, 144},
|
||||
{"VioletRed", 208, 32, 144},
|
||||
{"VioletRed1", 255, 62, 150},
|
||||
{"VioletRed2", 238, 58, 140},
|
||||
{"VioletRed3", 205, 50, 120},
|
||||
{"VioletRed4", 139, 34, 82},
|
||||
{"wheat", 245, 222, 179},
|
||||
{"wheat1", 255, 231, 186},
|
||||
{"wheat2", 238, 216, 174},
|
||||
{"wheat3", 205, 186, 150},
|
||||
{"wheat4", 139, 126, 102},
|
||||
{"white", 255, 255, 255},
|
||||
{"white smoke", 245, 245, 245},
|
||||
{"WhiteSmoke", 245, 245, 245},
|
||||
{"yellow", 255, 255, 0},
|
||||
{"yellow green", 154, 205, 50},
|
||||
{"yellow1", 255, 255, 0},
|
||||
{"yellow2", 238, 238, 0},
|
||||
{"yellow3", 205, 205, 0},
|
||||
{"yellow4", 139, 139, 0},
|
||||
{"YellowGreen", 154, 205, 50},
|
||||
};
|
||||
|
||||
/* clang-format on */
|
||||
static const DLword bitmask[16] = {1 << 15, 1 << 14, 1 << 13, 1 << 12, 1 << 11, 1 << 10,
|
||||
1 << 9, 1 << 8, 1 << 7, 1 << 6, 1 << 5, 1 << 4,
|
||||
@@ -944,38 +186,7 @@ extern DLword *EmCursorBitMap68K;
|
||||
extern DLword *CTopKeyevent;
|
||||
extern int URaid_req;
|
||||
extern LispPTR *KEYBUFFERING68k;
|
||||
extern char foregroundColorName[64];
|
||||
extern char backgroundColorName[64];
|
||||
|
||||
/*
|
||||
* sdl_MapColorName approximates the X11 color parsing,
|
||||
* taking either a #RRGGBB hex value, or a name that is mapped
|
||||
* through the X11 color names table, returning an SDL pixel
|
||||
* according to the given pixel format
|
||||
*/
|
||||
static Uint32 sdl_MapColorName(const SDL_PixelFormat * format, char *name) {
|
||||
/* check for #RRBBGG format */
|
||||
if (name[0]=='#' && strlen(name) == 7 && strspn(&name[1], "0123456789abcdefABCDEF") == 6) {
|
||||
unsigned long pixval = strtoul(&name[1], NULL, 16);
|
||||
#if SDL_MAJOR_VERSION == 2
|
||||
return SDL_MapRGB(format, (pixval >> 16) & 0xFF, (pixval >> 8) & 0xFF, pixval & 0xFF);
|
||||
#else
|
||||
return SDL_MapRGB(format, NULL, (pixval >> 16) & 0xFF, (pixval >> 8) & 0xFF, pixval & 0xFF);
|
||||
#endif
|
||||
}
|
||||
/* then try for a named color */
|
||||
for (int i = 0; i < sizeof(colornames)/sizeof(colornames[0]); i++) {
|
||||
if (0 == strcasecmp(name, colornames[i].name)) {
|
||||
#if SDL_MAJOR_VERSION == 2
|
||||
return SDL_MapRGB(format, colornames[i].red, colornames[i].green, colornames[i].blue);
|
||||
#else
|
||||
return SDL_MapRGB(format, NULL, colornames[i].red, colornames[i].green, colornames[i].blue);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
/* fail */
|
||||
return(0);
|
||||
}
|
||||
void DoRing() {
|
||||
DLword w, r;
|
||||
KBEVENT *kbevent;
|
||||
@@ -1345,11 +556,11 @@ static void sdl_update_viewport(int width, int height) {
|
||||
static int last_keystate[512] = {0};
|
||||
void sdl_set_invert(int flag) {
|
||||
if (flag) {
|
||||
sdl_foreground = sdl_background_color;
|
||||
sdl_background = sdl_foreground_color;
|
||||
sdl_foreground = sdl_white;
|
||||
sdl_background = sdl_black;
|
||||
} else {
|
||||
sdl_foreground = sdl_foreground_color;
|
||||
sdl_background = sdl_background_color;
|
||||
sdl_foreground = sdl_black;
|
||||
sdl_background = sdl_white;
|
||||
}
|
||||
sdl_notify_damage(0, 0, sdl_displaywidth, sdl_displayheight);
|
||||
}
|
||||
@@ -1414,14 +625,22 @@ void process_SDLevents() {
|
||||
sdl_windowheight = event.window.data2;
|
||||
sdl_update_viewport(sdl_windowwidth, sdl_windowheight);
|
||||
break;
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_SHOWN:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_HIDDEN:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
sdl_window_focusp = 1;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
sdl_window_focusp = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
#else
|
||||
@@ -1431,12 +650,6 @@ void process_SDLevents() {
|
||||
sdl_windowheight = event.window.data2;
|
||||
sdl_update_viewport(sdl_windowwidth, sdl_windowheight);
|
||||
break;
|
||||
case SDL_EVENT_WINDOW_FOCUS_GAINED:
|
||||
sdl_window_focusp = 1;
|
||||
break;
|
||||
case SDL_EVENT_WINDOW_FOCUS_LOST:
|
||||
sdl_window_focusp = 0;
|
||||
break;
|
||||
#endif
|
||||
#if SDL_MAJOR_VERSION == 2
|
||||
case SDL_KEYDOWN:
|
||||
@@ -1531,6 +744,8 @@ void process_SDLevents() {
|
||||
printf("mousewheel mouse %d x %d y %d direction %s\n", event.wheel.which, event.wheel.x,
|
||||
event.wheel.y,
|
||||
event.wheel.direction == SDL_MOUSEWHEEL_NORMAL ? "normal" : "flipped");
|
||||
*/
|
||||
/*
|
||||
|
||||
these are the 4 key bits for mouse wheel/trackpad scrolling - which unlike X11 are
|
||||
*not* presented as mouse button down/up events for each scroll action
|
||||
@@ -1565,7 +780,9 @@ int init_SDL(char *windowtitle, int w, int h, int s) {
|
||||
sdl_displayheight = h;
|
||||
sdl_windowwidth = w * s;
|
||||
sdl_windowheight = h * s;
|
||||
printf("requested width: %d, height: %d\n", sdl_displaywidth, sdl_displayheight);
|
||||
int width = sdl_displaywidth;
|
||||
int height = sdl_displayheight;
|
||||
printf("requested width: %d, height: %d\n", width, height);
|
||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
||||
printf("SDL could not be initialized. SDL_Error: %s\n", SDL_GetError());
|
||||
return 1;
|
||||
@@ -1606,14 +823,11 @@ int init_SDL(char *windowtitle, int w, int h, int s) {
|
||||
#endif
|
||||
printf("Creating texture...\n");
|
||||
sdl_texture = SDL_CreateTexture(sdl_renderer, sdl_pixelformat->format,
|
||||
SDL_TEXTUREACCESS_STREAMING,
|
||||
sdl_displaywidth, sdl_displayheight);
|
||||
sdl_foreground_color = sdl_MapColorName(sdl_pixelformat,
|
||||
foregroundColorName[0] ? foregroundColorName : "black");
|
||||
sdl_background_color = sdl_MapColorName(sdl_pixelformat,
|
||||
backgroundColorName[0] ? backgroundColorName : "white");
|
||||
sdl_foreground = sdl_foreground_color;
|
||||
sdl_background = sdl_background_color;
|
||||
SDL_TEXTUREACCESS_STREAMING, width, height);
|
||||
sdl_black = SDL_MapRGB(sdl_pixelformat, 0, 0, 0);
|
||||
sdl_white = SDL_MapRGB(sdl_pixelformat, 255, 255, 255);
|
||||
sdl_foreground = sdl_black;
|
||||
sdl_background = sdl_white;
|
||||
#if SDL_MAJOR_VERSION == 2
|
||||
sdl_bytesperpixel = sdl_pixelformat->BytesPerPixel;
|
||||
#else
|
||||
@@ -1623,12 +837,10 @@ int init_SDL(char *windowtitle, int w, int h, int s) {
|
||||
printf("Creating window surface and buffer surface\n");
|
||||
sdl_windowsurface = SDL_GetWindowSurface(sdl_window);
|
||||
sdl_pixelformat = sdl_windowsurface->format;
|
||||
sdl_foreground_color = sdl_MapColorName(sdl_pixelformat,
|
||||
foregroundColorName[0] ? foregroundColorName : "black");
|
||||
sdl_background_color = sdl_MapColorName(sdl_pixelformat,
|
||||
backgroundColorName[0] ? backgroundColorName : "white");
|
||||
sdl_foreground = sdl_foreground_color;
|
||||
sdl_background = sdl_background_color;
|
||||
sdl_black = SDL_MapRGB(sdl_pixelformat, 0, 0, 0);
|
||||
sdl_white = SDL_MapRGB(sdl_pixelformat, 255, 255, 255);
|
||||
sdl_foreground = sdl_black;
|
||||
sdl_background = sdl_white;
|
||||
#if SDL_MAJOR_VERSION == 2
|
||||
sdl_bytesperpixel = sdl_pixelformat->BytesPerPixel;
|
||||
#else
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "commondefs.h" // for error
|
||||
#include "conspagedefs.h" // for cons
|
||||
#include "gcdata.h" // for ADDREF, GCLOOKUP
|
||||
#include "gchtfinddefs.h" // for htfind, rec_htfind
|
||||
#include "gcfinaldefs.h" // for makefreearrayblock, mergebackward
|
||||
#include "ifpage.h" // for IFPAGE, MACHINETYPE_MAIKO
|
||||
#include "lispemul.h" // for LispPTR, NIL, GETFPTOVP, INTSTAT, ATOM_T
|
||||
|
||||
@@ -64,11 +64,6 @@
|
||||
#include "uutilsdefs.h" // for suspend_lisp, check_unix_password, unix_fu...
|
||||
#include "vmemsavedefs.h" // for lisp_finish, vmem_save0
|
||||
|
||||
#ifdef COLOR
|
||||
#include "rawcolordefs.h"
|
||||
#include "llcolordefs.h"
|
||||
#endif
|
||||
|
||||
extern LispPTR *PENDINGINTERRUPT68k;
|
||||
|
||||
/***********************************************************/
|
||||
|
||||
@@ -683,10 +683,9 @@ int print_opcode(int pc, DLbyte *addr, struct fnhead *fnobj) {
|
||||
extern unsigned int oplength[256];
|
||||
int len = oplength[op] + 1;
|
||||
|
||||
printf(" 0%04o (0x%04x) ", pc, pc);
|
||||
for (i = 0; i < len; i++) printf("%4o", 0xFF & GETBYTE(addr + i));
|
||||
for (; i < 9; i++) printf(" ");
|
||||
printf("%s", opcode_table[op]);
|
||||
printf(" 0%o (0x%x) ", pc, pc);
|
||||
for (i = 0; i < len; i++) printf("%o ", 0xFF & GETBYTE(addr + i));
|
||||
printf(" %s", opcode_table[op]);
|
||||
|
||||
switch (op) {
|
||||
case 0:
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <X11/Xlib.h> // for XCreateSimpleWindow, XMapWindow, XChangeWin...
|
||||
#include <X11/Xutil.h> // for XSizeHints, XStringListToTextProperty, XWMH...
|
||||
#include <stdio.h> // for NULL
|
||||
#include <stdlib.h> // for exit
|
||||
#include "commondefs.h" // for error
|
||||
#include "dbprint.h" // for TPRINT
|
||||
#include "devif.h" // for (anonymous), MRegion, OUTER_SB_WIDTH, Defin...
|
||||
@@ -39,8 +38,8 @@ extern DLword *DisplayRegion68k;
|
||||
|
||||
extern int Current_Hot_X, Current_Hot_Y; /* X Cursor hotspots */
|
||||
|
||||
extern char windowTitle[255];
|
||||
extern char iconTitle[255];
|
||||
extern char Window_Title[255];
|
||||
extern char Icon_Title[255];
|
||||
|
||||
extern int save_argc;
|
||||
extern char **save_argv;
|
||||
@@ -51,7 +50,6 @@ extern int LispWindowRequestedX, LispWindowRequestedY;
|
||||
extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight;
|
||||
extern int noscroll;
|
||||
|
||||
extern Colormap Colors;
|
||||
/*
|
||||
* globals defined in this module
|
||||
*/
|
||||
@@ -68,16 +66,9 @@ Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCur
|
||||
/* */
|
||||
/* */
|
||||
/************************************************************************/
|
||||
static unsigned long foregroundPixel;
|
||||
static unsigned long backgroundPixel;
|
||||
|
||||
void Create_LispWindow(DspInterface dsp)
|
||||
{
|
||||
extern char foregroundColorName[];
|
||||
extern char backgroundColorName[];
|
||||
XColor foregroundColor_xcsd;
|
||||
XColor backgroundColor_xcsd;
|
||||
Status status;
|
||||
XSizeHints szhint = {0};
|
||||
XWMHints Lisp_WMhints = {0};
|
||||
XClassHint xclasshint = {0};
|
||||
@@ -91,8 +82,8 @@ void Create_LispWindow(DspInterface dsp)
|
||||
unsigned int GravSize;
|
||||
char *WT, *IT;
|
||||
|
||||
WT = windowTitle;
|
||||
IT = iconTitle;
|
||||
WT = Window_Title;
|
||||
IT = Icon_Title;
|
||||
|
||||
GravSize = (dsp->ScrollBarWidth / 2) - dsp->InternalBorderWidth;
|
||||
Col2 = dsp->Visible.width;
|
||||
@@ -101,33 +92,13 @@ void Create_LispWindow(DspInterface dsp)
|
||||
Row3 = dsp->Visible.height + (OUTER_SB_WIDTH(dsp) / 2);
|
||||
|
||||
screen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id));
|
||||
/* set up default display as black on white */
|
||||
foregroundPixel = BlackPixelOfScreen(screen);
|
||||
backgroundPixel = WhitePixelOfScreen(screen);
|
||||
/* parse and record non-default color specs for foreground and background */
|
||||
if (foregroundColorName[0]) {
|
||||
status = XAllocNamedColor(dsp->display_id, Colors, foregroundColorName, &foregroundColor_xcsd, &foregroundColor_xcsd);
|
||||
if (status == 0) {
|
||||
fprintf(stderr, "Color allocation failed for foreground color: %s\n", foregroundColorName);
|
||||
exit(1);
|
||||
}
|
||||
foregroundPixel = foregroundColor_xcsd.pixel;
|
||||
}
|
||||
if (backgroundColorName[0]) {
|
||||
status = XAllocNamedColor(dsp->display_id, Colors, backgroundColorName, &backgroundColor_xcsd, &backgroundColor_xcsd);
|
||||
if (status == 0) {
|
||||
fprintf(stderr, "Color allocation failed for background color: %s\n", backgroundColorName);
|
||||
exit(1);
|
||||
}
|
||||
backgroundPixel = backgroundColor_xcsd.pixel;
|
||||
}
|
||||
dsp->LispWindow = XCreateSimpleWindow(
|
||||
dsp->display_id, RootWindowOfScreen(screen), LispWindowRequestedX, /* Default upper left */
|
||||
LispWindowRequestedY, /* Default upper left */
|
||||
dsp->Visible.width + OUTER_SB_WIDTH(dsp), /* Default width */
|
||||
dsp->Visible.height + OUTER_SB_WIDTH(dsp), /* Default height */
|
||||
0, /* Default border */
|
||||
foregroundPixel, backgroundPixel);
|
||||
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
||||
|
||||
Lisp_SetWinAttributes.bit_gravity = dsp->BitGravity;
|
||||
Lisp_SetWinAttributes.override_redirect = False;
|
||||
@@ -143,8 +114,10 @@ void Create_LispWindow(DspInterface dsp)
|
||||
|
||||
/* Have to make the GC before we make the icon. */
|
||||
gcv.function = GXcopy;
|
||||
gcv.foreground = foregroundPixel;
|
||||
gcv.background = backgroundPixel;
|
||||
gcv.foreground =
|
||||
BlackPixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
|
||||
gcv.background =
|
||||
WhitePixelOfScreen(ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id)));
|
||||
dsp->Copy_GC =
|
||||
XCreateGC(dsp->display_id, dsp->LispWindow, GCForeground | GCBackground | GCFunction, &gcv);
|
||||
|
||||
@@ -173,7 +146,7 @@ void Create_LispWindow(DspInterface dsp)
|
||||
|
||||
dsp->DisplayWindow = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, 0, 0,
|
||||
dsp->Visible.width, dsp->Visible.height, 0,
|
||||
foregroundPixel, backgroundPixel);
|
||||
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->DisplayWindow,
|
||||
CWBitGravity | CWOverrideRedirect | CWBackingStore,
|
||||
&Lisp_SetWinAttributes);
|
||||
@@ -186,14 +159,14 @@ void Create_LispWindow(DspInterface dsp)
|
||||
|
||||
dsp->ScrollBarPixmap = XCreatePixmapFromBitmapData(
|
||||
dsp->display_id, dsp->LispWindow, (char *)check_bits, check_width, check_height,
|
||||
foregroundPixel, backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
|
||||
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
|
||||
dsp->GravityOnPixmap = XCreatePixmapFromBitmapData(
|
||||
dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, foregroundPixel,
|
||||
backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
|
||||
dsp->display_id, dsp->LispWindow, (char *)check_bits, 16, 16, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
|
||||
|
||||
dsp->GravityOffPixmap = XCreatePixmapFromBitmapData(
|
||||
dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, foregroundPixel,
|
||||
backgroundPixel, (unsigned)DefaultDepthOfScreen(screen));
|
||||
dsp->display_id, dsp->LispWindow, (char *)plain_bits, 16, 16, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen), (unsigned)DefaultDepthOfScreen(screen));
|
||||
|
||||
set_Xcursor(dsp, default_cursor.cuimage, (int)default_cursor.cuhotspotx,
|
||||
(int)(15 - default_cursor.cuhotspoty), &DefaultCursor, 0);
|
||||
@@ -224,7 +197,7 @@ void Create_LispWindow(DspInterface dsp)
|
||||
0 - (int)dsp->InternalBorderWidth, /* y */
|
||||
dsp->ScrollBarWidth, /* width */
|
||||
dsp->Visible.height, dsp->InternalBorderWidth,
|
||||
foregroundPixel, backgroundPixel);
|
||||
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
||||
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
|
||||
XMapWindow(dsp->display_id, dsp->VerScrollBar);
|
||||
|
||||
@@ -232,7 +205,7 @@ void Create_LispWindow(DspInterface dsp)
|
||||
0 - (int)dsp->InternalBorderWidth, (int)Row2, /* y */
|
||||
dsp->Visible.width, /* width */
|
||||
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
|
||||
foregroundPixel, backgroundPixel);
|
||||
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
||||
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
|
||||
&Lisp_SetWinAttributes);
|
||||
@@ -243,7 +216,7 @@ void Create_LispWindow(DspInterface dsp)
|
||||
(dsp->Visible.y * (int)dsp->Visible.height) / (int)dsp->Display.height, /* y */
|
||||
dsp->ScrollBarWidth, /* width */
|
||||
((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
|
||||
dsp->InternalBorderWidth, foregroundPixel, backgroundPixel);
|
||||
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
|
||||
&Lisp_SetWinAttributes);
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
|
||||
@@ -255,8 +228,8 @@ void Create_LispWindow(DspInterface dsp)
|
||||
(dsp->Visible.x * (int)dsp->Visible.width) / (int)dsp->Display.width,
|
||||
0 - (int)dsp->InternalBorderWidth, /* y */
|
||||
((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
|
||||
dsp->ScrollBarWidth, dsp->InternalBorderWidth, foregroundPixel,
|
||||
backgroundPixel);
|
||||
dsp->ScrollBarWidth, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen));
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollButton, CWOverrideRedirect,
|
||||
&Lisp_SetWinAttributes);
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->HorScrollButton, dsp->ScrollBarPixmap);
|
||||
@@ -264,8 +237,8 @@ void Create_LispWindow(DspInterface dsp)
|
||||
XMapWindow(dsp->display_id, dsp->HorScrollButton);
|
||||
|
||||
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row2, GravSize,
|
||||
GravSize, dsp->InternalBorderWidth, foregroundPixel,
|
||||
backgroundPixel);
|
||||
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen));
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NWGrav, dsp->GravityOnPixmap);
|
||||
DefineCursor(dsp, dsp->NWGrav, &DefaultCursor);
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->NWGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
|
||||
@@ -273,8 +246,8 @@ void Create_LispWindow(DspInterface dsp)
|
||||
XMapWindow(dsp->display_id, dsp->NWGrav);
|
||||
|
||||
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col3, (int)Row3, GravSize,
|
||||
GravSize, dsp->InternalBorderWidth, foregroundPixel,
|
||||
backgroundPixel);
|
||||
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen));
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SEGrav, dsp->GravityOffPixmap);
|
||||
DefineCursor(dsp, dsp->SEGrav, &DefaultCursor);
|
||||
XChangeWindowAttributes(dsp->display_id, dsp->SEGrav, CWOverrideRedirect, &Lisp_SetWinAttributes);
|
||||
@@ -282,16 +255,16 @@ void Create_LispWindow(DspInterface dsp)
|
||||
XMapWindow(dsp->display_id, dsp->SEGrav);
|
||||
|
||||
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col2, (int)Row3, GravSize,
|
||||
GravSize, dsp->InternalBorderWidth, foregroundPixel,
|
||||
backgroundPixel);
|
||||
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen));
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->SWGrav, dsp->GravityOffPixmap);
|
||||
DefineCursor(dsp, dsp->SWGrav, &DefaultCursor);
|
||||
XClearWindow(dsp->display_id, dsp->NWGrav);
|
||||
XMapWindow(dsp->display_id, dsp->SWGrav);
|
||||
|
||||
dsp->NEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, (int)Col3, (int)Row2, GravSize,
|
||||
GravSize, dsp->InternalBorderWidth, foregroundPixel,
|
||||
backgroundPixel);
|
||||
GravSize, dsp->InternalBorderWidth, BlackPixelOfScreen(screen),
|
||||
WhitePixelOfScreen(screen));
|
||||
XSetWindowBackgroundPixmap(dsp->display_id, dsp->NEGrav, dsp->GravityOffPixmap);
|
||||
DefineCursor(dsp, dsp->NEGrav, &DefaultCursor);
|
||||
XClearWindow(dsp->display_id, dsp->NWGrav);
|
||||
@@ -307,12 +280,14 @@ void Create_LispWindow(DspInterface dsp)
|
||||
|
||||
void lisp_Xvideocolor(int flag)
|
||||
{
|
||||
Screen *screen;
|
||||
XEvent event = {0};
|
||||
XGCValues gcv = {0};
|
||||
unsigned long newForeground;
|
||||
|
||||
XLOCK;
|
||||
newForeground = flag ? backgroundPixel : foregroundPixel;
|
||||
screen = ScreenOfDisplay(currentdsp->display_id, DefaultScreen(currentdsp->display_id));
|
||||
newForeground = flag ? WhitePixelOfScreen(screen) : BlackPixelOfScreen(screen);
|
||||
|
||||
/* window -- are we making a change? */
|
||||
XGetGCValues(currentdsp->display_id, currentdsp->Copy_GC, GCForeground | GCBackground, &gcv);
|
||||
|
||||
30
src/xrdopt.c
30
src/xrdopt.c
@@ -81,14 +81,12 @@ extern char Display_Name[128];
|
||||
char Display_Name[128];
|
||||
extern char iconpixmapfile[1024];
|
||||
char iconpixmapfile[1024];
|
||||
extern char iconTitle[255];
|
||||
char iconTitle[255];
|
||||
extern char Window_Title[255];
|
||||
char Window_Title[255];
|
||||
extern char Icon_Title[255];
|
||||
char Icon_Title[255];
|
||||
extern char cursorColor[255];
|
||||
char cursorColor[255] = {0};
|
||||
extern char foregroundColorName[64];
|
||||
extern char backgroundColorName[64];
|
||||
extern char windowTitle[255];
|
||||
|
||||
|
||||
extern char sysout_name_cl[];
|
||||
extern char sysout_name_xrm[];
|
||||
@@ -120,9 +118,7 @@ void print_Xusage(const char *prog)
|
||||
(void)fprintf(stderr, " [-sysout] [<sysout>] -path to the Medley image\n");
|
||||
(void)fprintf(stderr, " -h[elp] -prints this text\n");
|
||||
(void)fprintf(stderr, " -info -prints configuration info\n");
|
||||
(void)fprintf(stderr, " -cursorColor X11-color-spec -sets foreground cursor color\n");
|
||||
(void)fprintf(stderr, " -fg|-foreground X11-color-spec -sets foreground display color\n");
|
||||
(void)fprintf(stderr, " -bg|-background X11-color-spec -sets background display color\n");
|
||||
(void)fprintf(stderr, " -cursorColor X11-color-spec -sets foreground cursor color\n");
|
||||
(void)fprintf(stderr, " -d[isplay] <host>:<display>.<screen>\n");
|
||||
(void)fprintf(stderr,
|
||||
" -g[eometry] <geom> -size & placement for the medley window on your X "
|
||||
@@ -247,14 +243,14 @@ void read_Xoption(int *argc, char *argv[])
|
||||
}
|
||||
|
||||
if (XrmGetResource(rDB, "ldex.title", "Ldex.Title", str_type, &value) == True) {
|
||||
(void)strncpy(windowTitle, value.addr, sizeof(windowTitle) - 1);
|
||||
(void)strncpy(Window_Title, value.addr, value.size);
|
||||
} else {
|
||||
(void)strncpy(windowTitle, WINDOW_NAME, sizeof(windowTitle) - 1);
|
||||
(void)strcpy(Window_Title, WINDOW_NAME);
|
||||
}
|
||||
if (XrmGetResource(rDB, "ldex.icontitle", "Ldex.icontitle", str_type, &value) == True) {
|
||||
(void)strncpy(iconTitle, value.addr, value.size);
|
||||
(void)strncpy(Icon_Title, value.addr, value.size);
|
||||
} else {
|
||||
(void)strcpy(iconTitle, "Medley");
|
||||
(void)strcpy(Icon_Title, "Medley");
|
||||
}
|
||||
|
||||
if (XrmGetResource(rDB, "ldex.iconbitmap", "Ldex.Iconbitmap", str_type, &value) == True) {
|
||||
@@ -281,14 +277,6 @@ void read_Xoption(int *argc, char *argv[])
|
||||
(void)strncpy(cursorColor, value.addr, sizeof(cursorColor) - 1);
|
||||
}
|
||||
|
||||
if (XrmGetResource(rDB, "ldex.foreground", "Ldex.foreground", str_type, &value) == True) {
|
||||
(void)strncpy(foregroundColorName, value.addr, sizeof(foregroundColorName) - 1);
|
||||
}
|
||||
|
||||
if (XrmGetResource(rDB, "ldex.background", "Ldex.background", str_type, &value) == True) {
|
||||
(void)strncpy(backgroundColorName, value.addr, sizeof(backgroundColorName) - 1);
|
||||
}
|
||||
|
||||
if (XrmGetResource(rDB, "ldex.NoFork", "Ldex.NoFork", str_type, &value) == True) {
|
||||
please_fork = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user