1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-03-15 14:27:19 +00:00

Compare commits

...

19 Commits

Author SHA1 Message Date
Nick Briggs
65bbcb7d9d Remove makepathname() (#410)
makepathname() is only ever called with one of two constant string
arguments, in one case (DOS) such that it only does a strncpy(...),
and the other case (non-DOS) expanding "~" to the current user's home
directory. Additional code duplicates realpath() functionality but is
never used.
2021-11-26 19:53:26 -08:00
Nick Briggs
987cf4c7c6 Correct error for missing byteswap macros in tosfns.h EVAL implementation (#407)
Commit c46fcce307 fixed a warning for
incompatible pointers to nnewframe() but did not consider that the
order of the DLwords is swapped depending on the endianness of the
system it is running on.  Add the necessary GETBASEWORD() macros to
access the items when constructing the pointer.
2021-11-06 18:36:25 -07:00
Nick Briggs
c46fcce307 Fix "warning: incompatible pointer types" in EVAL implementation (#406)
nnewframe() as called from the EVAL implementation expects to be passed
the address of an array of two DLwords.  Do that, and compose the 32-bit
result correctly rather than passing the address of a (32-bit) LispPTR
and then having to swapx() that result to get the expected value.
2021-11-04 20:18:27 -07:00
Nick Briggs
de5ea2110f Correct integer type warnings (#405)
* Correct warning: cast to smaller integer type -- X_init/lispbitmap

* Fixes to INTRSAFE, INTRSAFE0 and ensure TIMEOUT, TIMEOUT0 used appropriately

INTRSAFE and INTRSAFE0 must clear errno before executing the library or system
call because not all library calls set errno on success.
Avoid casting pointers or larger integer values down to smaller ints before
comparing to 0 or -1, and use NULL (a pointer) rather than 0.

Fix cases where the result of the library call is a pointer rather than an int
to use TIMEOUT0 instead of TIMEOUT, testing for NULL rather than -1
on timeout (errno == EINTR)

* Remove useless validity check of LASTVMEMFILEPAGE_word pointer

* Convert pointer arithmetic type in drawline from int to ptrdiff_t

* Add NOTE warning about a 32-bit vs 64-bit issue affecting currently unused GET_NATIVE_ADDR_FROM_LISP_PTR
2021-11-04 09:08:55 -07:00
Nick Briggs
6c241f1eaa Make opcode_table (names of opcodes) visible as useful debug aid. 2021-10-29 10:02:47 -07:00
Nick Briggs
19688bc314 Drop setuid privilege correctly. (#401) 2021-10-29 09:52:51 -07:00
Nick Briggs
c39b751f42 Rework make_atom() to allow removal of parse_number() (#404)
No calls to make_atom() depend on the ability to parse the atom's
pname as a number.  Additionally, the parse_number() implementation
used here was non-functional.

We remove parse_number() and adjust the parameter list of make_atom()
to remove the non_numericp flag.
2021-10-29 09:51:32 -07:00
Nick Briggs
75c668f1cd The pointers Atomspace, Spospspace, Snegspace, Arrayspace can be removed (#402)
These pointers are neither initialized nor referenced anywhere in the code.
2021-10-10 16:55:33 -07:00
Nick Briggs
a25368714f Use SHELL rather than /bin/csh when forking shells. Issue Interlisp/medley#384 (#400)
As long as $(SHELL) names an executable that appears in /etc/shells (as determined
by the getusershell() function) use that.  It used to always use /bin/csh, but some
modern distros do not ship with csh installed.  Using the user's preferred shell
seems like a better choice, while allowing the choice from /etc/shells gives some
additional flexibility.
2021-10-08 17:58:29 -07:00
Nick Briggs
3cdbccd0c7 Implement -noscroll option to ldex to disable X window scroll bars (#399)
Adds a -noscroll option, parsed as an X option, also accessible via
resource ldex*noscroll, which avoids adding the bottom and side scroll
bars and the bit-gravity control buttons to the main Lisp display window.

Unless the geometry given for the X window in which the Lisp screen is
displayed is at least as big as the Lisp screen part of the Lisp screen
(bottom, right) will not be visible.

On macOS with XQuartz, maximizing the X window will bring it to
the size of the Lisp screen (or the size of the display, whichever is smaller)
2021-09-30 10:44:37 -07:00
Nick Briggs
4d2bf13347 Add description for ethernet related flags to compile-flags 2021-09-25 15:01:21 -07:00
Nick Briggs
f7e40d1ed5 Use symbolic constants for COLOR related subrs rather than numbers
cases for subrs UNCOLORIZE-BITMAP, COLORIZE-BITMAP, COLOR-8BPPDRAWLINE (which
are not compiled into current code) can have the numbers replaced by the
symbolic constants that are now defined in subrs.h
2021-09-19 14:19:42 -07:00
Nick Briggs
9bb5a4298c Use symbolic constant for subr CAUSE-INTERRUPT switch/case rather than number (0222) 2021-09-19 14:12:47 -07:00
Nick Briggs
533c935e72 Fix various bugprone warnings (#397)
* Fix some warnings in main.c

main.c:678: narrowing conversion from 'unsigned long' to signed type 'int' is implementation-defined
main.c:493: The return value from the call to 'seteuid' is not checked.

* Fix some warnings in array operations

Instead of extracting typenumbers to an 'int', use the unsigned typenumber directly

array3.c:49: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array4.c:61: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array5.c:63: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined
array6.c:50: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined

* Resolve type mismatches for version numbers and propp flag

dir.c:1849: narrowing conversion from 'unsigned int' to signed type 'int'
dir.c:1850: narrowing conversion from 'unsigned int' to signed type 'int'
dir.c:2114: narrowing conversion from 'unsigned long' to signed type 'int'
dir.c:2207: narrowing conversion from 'unsigned int' to signed type 'int'

* Resolve type mismatches for version numbers and strlen result type

dsk.c:1072: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1108: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1549: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1712: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:1751: narrowing conversion from 'unsigned long' to signed type 'int'
dsk.c:3426: narrowing conversion from 'unsigned int' to signed type 'int'

* Resolve type mismatches for strlen result type

ufs.c:213: narrowing conversion from 'unsigned long' to signed type 'int'
ufs.c:404: narrowing conversion from 'unsigned long' to signed type 'int'

* Resolve type error

uutils.c:117: 'signed char' to 'int' conversion [bugprone-signed-char-misuse,cert-str34-c]
2021-09-16 17:24:25 -07:00
Nick Briggs
6fedd97d21 add yield subr (#398)
* Add experimental SUBR to call nanosleep() for experiments in reducing CPU load

This adds a SUBR, sb_YIELD, value (octal) 0322 which takes a single number
0..999999999 which is the number of nanoseconds to pass to nanosleep().

The return value is T if the call to nanosleep() was executed or NIL
if it was not (argument out-of-range, or other error in getting the
number from the argument).

To use this experimental SUBR in a sysout you should:

   (SETQ \INITSUBRS (CONS '(YIELD #o322) \INITSUBRS))

then you can define functions that use that SUBR:

   (DEFINEQ (BACKGROUND-YIELD () (SUBRCALL YIELD 833333)))
   (COMPILE 'BACKGROUND-YIELD)
   (SETQ BACKGROUNDFNS (CONS 'BACKGROUND-YIELD BACKGROUNDFNS))

* Update to use subrs.h newly generated from LLSUBRS

The subrs.h include file is generated by WRITECALLSUBRS based on the \INITSUBRS
list.  This update provides for the new YIELD subr in the generated file,
and makes some necessary updates to the C code implementations for some subr
names which have changed.
2021-09-15 10:30:04 -07:00
Nick Briggs
a70b18d444 Avoid use of sscanf() for parsing simple integer values (#396)
There is no reason to use sscanf() rather than strtol()/strtoul()
for parsing simple integer values from a string.
Resolves a number of cert-str34-c warnings from clang-tidy.
2021-09-12 14:24:05 -07:00
Larry Masinter
c7adb3c4ba Add scripts to aid in constructing github releases of the maiko artifacts (#395)
Until these are superceded by github actions, if the github CLI tool "gh"
is installed, a github release of the maiko code can be created by running
   ./start-release
from the maiko/bin directory, and then running
   ./release-one
for each combination of OS/architecture that should be included in the
release.

The scripts assume that the maiko code is checked out in a directory
named "maiko" (and may produce unexpected results if run from somewhere else)

Co-authored-by: Nick Briggs <nicholas.h.briggs@gmail.com>
2021-09-10 13:33:54 -07:00
Nick Briggs
b1545e4ccc fix 'signed char' to 'int' conversion [cert-str34-c]
Fortunately here we don't need to convert to unsigned char then int,
we can do the only comparisons we need staying in the char domain.
2021-09-09 18:01:02 -07:00
Nick Briggs
4f79f55c20 Replace uses of atoi() with strtol() or stroul() as appropriate (#394)
As a side-effect of this change, we also resolve a a problem with
signed file version numbers, so that instead of version 2147483647
wrapping to -2147483648 we can go as far as 4294967296 before we
have issues.  Various sprintf() formats get changed from %d to %u.
The DOS version code is left behind as int versions.
2021-09-08 09:58:01 -07:00
41 changed files with 737 additions and 754 deletions

View File

@@ -124,6 +124,17 @@ BIGATOMS True if this emulator will support 3-byte symbols, instead of
NEWBITBLT True if we want to use assembler BITBLT code, rather than
have code created inline by macro calls.
USE_DLPI True if the ethernet API is via the SysV Data Link Provider
Interface. Solaris uses DLPI.
USE_NIT True if the ethernet API is via the Network Interface Tap.
SunOS uses NIT.
PKTFILTER True if the ethernet packets are to be filtered before being
passed to the Lisp ethernet handler. Available on Sun systems
for both the NIT and DLPI cases.
bitbltsub.c:#ifdef GETBASE
testdisplay.c:#ifdef NOTUSED
uraid.c:#ifdef ETHERINT

44
bin/release-one Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/sh
# Make and release maiko for one os / arch
# Hopefully to be replaced by GitHub Action
if [ ! -x ../../maiko/bin/machinetype ] ; then
echo ERROR: Must be run from maiko/bin
exit 1
fi
tag=$1
if [ -z "$tag" ] ; then
tag=maiko-`date +%y%m%d`
fi
export PATH=.:"$PATH"
osarch=`osversion`.`machinetype`
./makeright x
./makeright init
cd ../..
mkdir -p maiko/build
echo making $tag-$osarch.tgz
tar cfz maiko/build/$tag-$osarch.tgz \
maiko/bin/osversion \
maiko/bin/machinetype \
maiko/bin/config.guess \
maiko/bin/config.sub \
maiko/$osarch/lde*
if ! command -v gh >/dev/null ; then
echo
echo The GitHub Command Line Interface, gh
echo does not seem to be installed.
echo Please upload maiko/build/$tag-$osarch.tgz
echo to https://github.com/Interlisp/maiko/releases $tag
exit 0
fi
echo uploading
cd maiko
gh release upload --clobber $tag build/$tag-$osarch.tgz

36
bin/start-release Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh
# This script is just a placeholder until we get GitHub
# Actions to do releases
# Start Maiko release from maiko/bin
# startrelease [tag]
# tag defaults to maiko-YYMMDD
tag=$1
if [ -z "$tag" ] ; then
tag=maiko-`date +%y%m%d`
fi
if ! command -v gh >/dev/null ; then
echo "It seems like 'gh', the GitHub Command Line Interface is"
echo "not installed. You can start a release using the"
echo "web interface at"
echo "https://github.com/Interlisp/maiko/releases/new"
echo "Make up a tag (or use $tag)"
echo "and run './release-one tag' (or manually upload if"
echo "no 'gh' is installed) on every os/machine you want"
echo "this release to work for"
exit 0
fi
# Now for the only thing this script is actually doing
gh release create $tag -p -t $tag -n "See release notes in medley repo"
echo "Now run "
echo ./release-one $tag
echo "in maiko/bin on every os/machine you want this release"
echo "to work for. When done, edit the release in your"
echo "browser and uncheck the prerelease box "

View File

@@ -39,7 +39,7 @@
NumericStringP(vp, YES, NO); \
NO: *vp = 0; \
YES: \
if ((*vp)) ver = atoi(vp); \
if ((*vp)) ver = strtol(vp, (char **)NULL, 10); \
else ver = -1; \
} \
else ver = -1; \

View File

@@ -8,7 +8,7 @@
\
register char *lv_cp; \
register char *lv_vp; \
register int lv_ver; \
register unsigned lv_ver; \
char lv_ver_buf[VERSIONLEN]; \
\
lv_cp = pathname; \
@@ -48,12 +48,12 @@
/* \
* Convert the remaining field to digit. \
*/ \
lv_ver = atoi(lv_vp + 1); \
if (lv_ver == 0) { \
lv_ver = strtoul(lv_vp + 1, (char **)NULL, 10); \
if (lv_ver == 0) { \
/* versionless */ \
*lv_vp = 0; \
} else { \
sprintf(lv_ver_buf, ".~%d~", lv_ver); \
sprintf(lv_ver_buf, ".~%u~", lv_ver); \
*lv_vp = 0; \
strcat(pathname, lv_ver_buf); \
} \
@@ -61,7 +61,7 @@
\
NO: \
strcpy(lv_ver_buf, lv_vp + 1); \
strcat(lv_ver_buf, "~"); \
strcat(lv_ver_buf, "~"); \
*lv_vp++ = '.'; \
*lv_vp++ = '~'; \
*lv_vp = 0; \

View File

@@ -385,9 +385,9 @@ extern DLword *Lisp_world; /* To access LispSysout area */
*(start - 1) = ';'; \
*start = '\0'; \
*end = '\0'; \
/* call ato i to eliminate leading 0s. */ \
ver_no = atoi(start + 1); \
sprintf(ver_buf, "%d", ver_no); \
/* call strtoul() to eliminate leading 0s. */ \
ver_no = strtoul(start + 1, (char **)NULL, 10); \
sprintf(ver_buf, "%u", ver_no); \
strcat(pathname, ver_buf); \
goto CONT; \
\
@@ -494,7 +494,7 @@ extern DLword *Lisp_world; /* To access LispSysout area */
#define MAXVERSION 999999999
#define LASTVERSIONARRAY (-1)
#define LASTVERSIONARRAY ((unsigned) -1)
#define VERSIONARRAYLENGTH 200
#define NoFileP(varray) \

View File

@@ -31,7 +31,6 @@
#include "lispemul.h" /* for LispPTR, DLword */
#include "miscstat.h" /* for MISCSTAT */
extern DLword *Atomspace; /* ATOMSPACE */
extern DLword *Stackspace; /* STACKSPACE*/
extern DLword *Plistspace; /* PLISTSPACE */
extern DLword *DTDspace; /* DTDSPACE */
@@ -41,8 +40,6 @@
extern DLword *AtomSpace; /* New atoms, initial set */
extern DLword *Defspace; /* DEFSPACE */
extern DLword *Valspace; /* VALSPACE */
extern DLword *Spospspace; /* POSITIVE Smallp */
extern DLword *Snegspace; /* NEGATIVE Smallp */
/* For Virtual Mem Management */
#ifdef BIGVM
@@ -82,7 +79,6 @@ extern DLword *UFNTable ;
/* FLEX STORAGES */
extern DLword *Arrayspace; /* Start of ARRAYSPACE */
extern DLword *MDS_space_bottom; /* Start of MDS (pre -2) */
extern DLword *PnCharspace ; /* Space for PN char codes (Thin only) */

View File

@@ -1,6 +1,5 @@
#ifndef MAINDEFS_H
#define MAINDEFS_H 1
int makepathname(char *src, char *dst);
void start_lisp(void);
void print_info_lines(void);
#endif

View File

@@ -5,6 +5,5 @@ DLword compute_hash(const char *char_base, DLword offset, DLword length);
DLword compute_lisp_hash(const char *char_base, DLword offset, DLword length, DLword fatp);
LispPTR compare_chars(register const char *char1, register const char *char2, register DLword length);
LispPTR compare_lisp_chars(register const char *char1, register const char *char2, register DLword length, DLword fat1, DLword fat2);
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp);
LispPTR parse_number(const char *char_base, short int length);
LispPTR make_atom(const char *char_base, DLword offset, DLword length);
#endif

View File

@@ -71,7 +71,7 @@
}
static inline LispPTR
aref_switch(int type, LispPTR tos, LispPTR baseL, int index)
aref_switch(unsigned type, LispPTR tos, LispPTR baseL, int index)
{
LispPTR result;
DLword *wordp;

View File

@@ -1,194 +1,150 @@
#ifndef SUBRS_H
#define SUBRS_H 1
/* $Id: subrs.h,v 1.2 1999/01/03 02:06:24 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/* This file written from LLSUBRS on 13-Sep-2021 15:19:22 */
/* Do not edit this file! Instead, edit the list \initsubrs */
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
/* generate a new version. */
#define sb_BACKGROUNDSUBR 06
#define sb_CHECKBCPLPASSWORD 07
#define sb_DISKPARTITION 010
#define sb_DSPBOUT 011
#define sb_DSPRATE 012
#define sb_GATHERSTATS 013
#define sb_GETPACKETBUFFER 014
#define sb_LISPFINISH 015
#define sb_MOREVMEMFILE 016
#define sb_RAID 017
#define sb_READRAWPBI 020
#define sb_WRITERAWPBI 021
#define sb_SETSCREENCOLOR 022
#define sb_SHOWDISPLAY 023
#define sb_PUPLEVEL1STATE 024
#define sb_WRITESTATS 025
#define sb_CONTEXTSWITCH 026
#define sb_COPYSYS0SUBR 027
#define sb_WRITEMAP 030
#define sb_UFS_GETFILENAME 042
#define sb_UFS_DELETEFILE 043
#define sb_UFS_RENAMEFILE 044
#define sb_COM_READPAGES 045
#define sb_COM_WRITEPAGES 046
#define sb_COM_TRUNCATEFILE 047
#define sb_UFS_DIRECTORYNAMEP 051
#define sb_COM_GETFREEBLOCK 055
#define sb_SETUNIXTIME 060
#define sb_GETUNIXTIME 061
#define sb_COPYTIMESTATS 062
#define sb_UNIX_USERNAME 063
#define sb_UNIX_FULLNAME 064
#define sb_UNIX_GETENV 065
#define sb_UNIX_GETPARM 066
#define sb_CHECK_SUM 067
#define sb_ETHER_SUSPEND 070
#define sb_ETHER_RESUME 071
#define sb_ETHER_AVAILABLE 072
#define sb_ETHER_RESET 073
#define sb_ETHER_GET 074
#define sb_ETHER_SEND 075
#define sb_ETHER_SETFILTER 076
#define sb_ETHER_CHECK 077
#define sb_DSPCURSOR 0100
#define sb_SETMOUSEXY 0101
#define sb_DSP_VIDEOCOLOR 0102
#define sb_DSP_SCREENWIDTH 0103
#define sb_DSP_SCREENHEIGHT 0104
#define sb_BITBLTSUB 0105
#define sb_BLTCHAR 0106
#define sb_TEDIT_BLTCHAR 0107
#define sb_BITBLT_BITMAP 0110
#define sb_BLTSHADE_BITMAP 0111
#define sb_RS232C_CMD 0112
#define sb_RS232C_READ_INIT 0113
#define sb_RS232C_WRITE 0114
#define sb_KEYBOARDBEEP 0120
#define sb_KEYBOARDMAP 0121
#define sb_KEYBOARDSTATE 0122
#define sb_VMEMSAVE 0131
#define sb_LISP_FINISH 0132
#define sb_NEWPAGE 0133
#define sb_DORECLAIM 0134
#define sb_DUMMY_135Q 0135
#define sb_NATIVE_MEMORY_REFERENCE 0136
#define sb_OLD_COMPILE_LOAD_NATIVE 0137 /* obsolete */
#define sb_DISABLEGC 0140
#define sb_COM_SETFILEINFO 0147
#define sb_COM_OPENFILE 0150
#define sb_COM_CLOSEFILE 0151
#define sb_DSK_GETFILENAME 0152
#define sb_DSK_DELETEFILE 0153
#define sb_DSK_RENAMEFILE 0154
#define sb_COM_NEXT_FILE 0156
#define sb_COM_FINISH_FINFO 0157
#define sb_COM_GEN_FILES 0160
#define sb_DSK_DIRECTORYNAMEP 0161
#define sb_COM_GETFILEINFO 0162
#define sb_COM_CHANGEDIR 0164
#define sb_UNIX_HANDLECOMM 0165
#define sb_OCR_COMM 0166
#define sb_RPC_CALL 0167
#define sb_MESSAGE_READP 0170
#define sb_MESSAGE_READ 0171
#define sb_MONITOR_CONTROL 0200
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
#define sb_LOAD_NATIVE_FILE 0205 /* obsolete */
#define sb_SUSPEND_LISP 0206
#define sb_NEW_BLTCHAR 0207
#define sb_COLOR_INIT 0210
#define sb_COLOR_SCREENMODE 0211
#define sb_COLOR_MAP 0212
#define sb_COLOR_BASE 0213
#define sb_C_SlowBltChar 0214
#define sb_TCP_OP 0220
#define sb_WITH_SYMBOL 0221
/* For linear-programming interface */
#define sb_LP_SETUP 0230
#define sb_LP_RUN 0231
/* For Native Windows */
#define sb_MNW_OP 0244
#define sb_QUERY_WINDOWS 0245
#define sb_FILL_IN 0246
/* DLD codes */
#define sb_CALL_C_FN 0247
#define sb_DLD_LINK 0250
#define sb_DLD_UNLINK_BY_FILE 0251
#define sb_DLD_UNLINK_BY_SYMBOL 0252
#define sb_DLD_GET_SYMBOL 0253
#define sb_DLD_GET_FUNC 0254
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
#define sb_DLD_LIST_UNDEFINED_SYM 0256
#define sb_MALLOC 0257
#define sb_FREE 0260
#define sb_PUT_C_BASEBYTE 0261
#define sb_GET_C_BASEBYTE 0262
#define sb_SMASHING_APPLY 0263
#ifdef TRUECOLOR
#define sb_PICTURE_OP 0250
#define sb_TRUE_COLOR_OP 0251
#ifdef VIDEO
#define sb_VIDEO_OP 0252
#endif /* VIDEO */
#endif /* TRUECOLOR */
#define sb_CHAR_OPENFILE 0310
#define sb_CHAR_BIN 0311
#define sb_CHAR_BOUT 0312
#define sb_CHAR_IOCTL 0313
#define sb_CHAR_CLOSEFILE 0314
#define sb_CHAR_EOFP 0315
#define sb_CHAR_READP 0316
#define sb_CHAR_BINS 0317
#define sb_CHAR_BOUTS 0320
#define sb_CHAR_FILLBUFFER 0321
/* on the lisp file LLSUBRS and then call WRITECALLSUBRS to */
/* generate a new version. */
#define sb_BACKGROUNDSUBR 06
#define sb_CHECKBCPLPASSWORD 07
#define sb_DISKPARTITION 010
#define sb_DSPBOUT 011
#define sb_DSPRATE 012
#define sb_GATHERSTATS 013
#define sb_GETPACKETBUFFER 014
#define sb_LISPFINISH 015
#define sb_MOREVMEMFILE 016
#define sb_RAID 017
#define sb_READRAWPBI 020
#define sb_WRITERAWPBI 021
#define sb_SETSCREENCOLOR 022
#define sb_SHOWDISPLAY 023
#define sb_PUPLEVEL1STATE 024
#define sb_WRITESTATS 025
#define sb_CONTEXTSWITCH 026
#define sb_COPYSYS0SUBR 027
#define sb_WRITEMAP 030
#define sb_UFS_GETFILENAME 042
#define sb_UFS_DELETEFILE 043
#define sb_UFS_RENAMEFILE 044
#define sb_COM_READPAGES 045
#define sb_COM_WRITEPAGES 046
#define sb_COM_TRUNCATEFILE 047
#define sb_UFS_DIRECTORYNAMEP 051
#define sb_COM_GETFREEBLOCK 055
#define sb_SETUNIXTIME 060
#define sb_GETUNIXTIME 061
#define sb_COPYTIMESTATS 062
#define sb_UNIX_USERNAME 063
#define sb_UNIX_FULLNAME 064
#define sb_UNIX_GETENV 065
#define sb_UNIX_GETPARM 066
#define sb_CHECK_SUM 067
#define sb_ETHER_SUSPEND 070
#define sb_ETHER_RESUME 071
#define sb_ETHER_AVAILABLE 072
#define sb_ETHER_RESET 073
#define sb_ETHER_GET 074
#define sb_ETHER_SEND 075
#define sb_ETHER_SETFILTER 076
#define sb_ETHER_CHECK 077
#define sb_DSPCURSOR 0100
#define sb_SETMOUSEXY 0101
#define sb_DSP_VIDEOCOLOR 0102
#define sb_DSP_SCREENWIDTH 0103
#define sb_DSP_SCREENHEIGHT 0104
#define sb_BITBLTSUB 0105
#define sb_BLTCHAR 0106
#define sb_TEDIT_BLTCHAR 0107
#define sb_BITBLT_BITMAP 0110
#define sb_BLTSHADE_BITMAP 0111
#define sb_RS232C_CMD 0112
#define sb_RS232C_READ_INIT 0113
#define sb_RS232C_WRITE 0114
#define sb_KEYBOARDBEEP 0120
#define sb_KEYBOARDMAP 0121
#define sb_KEYBOARDSTATE 0122
#define sb_VMEMSAVE 0131
#define sb_LISP_FINISH 0132
#define sb_NEWPAGE 0133
#define sb_DORECLAIM 0134
#define sb_DUMMY_135Q 0135
#define sb_NATIVE_MEMORY_REFERENCE 0136
#define sb_OLD_COMPILE_LOAD_NATIVE 0137
#define sb_DISABLEGC 0140
#define sb_COM_SETFILEINFO 0147
#define sb_COM_OPENFILE 0150
#define sb_COM_CLOSEFILE 0151
#define sb_DSK_GETFILENAME 0152
#define sb_DSK_DELETEFILE 0153
#define sb_DSK_RENAMEFILE 0154
#define sb_COM_NEXT_FILE 0156
#define sb_COM_FINISH_FINFO 0157
#define sb_COM_GEN_FILES 0160
#define sb_DSK_DIRECTORYNAMEP 0161
#define sb_COM_GETFILEINFO 0162
#define sb_COM_CHANGEDIR 0164
#define sb_UNIX_HANDLECOMM 0165
#define sb_RPC_CALL 0167
#define sb_MESSAGE_READP 0170
#define sb_MESSAGE_READ 0171
#define sb_MONITOR_CONTROL 0200
#define sb_GET_NATIVE_ADDR_FROM_LISP_PTR 0203
#define sb_GET_LISP_PTR_FROM_NATIVE_ADDR 0204
#define sb_LOAD_NATIVE_FILE 0205
#define sb_SUSPEND_LISP 0206
#define sb_NEW_BLTCHAR 0207
#define sb_COLOR_INIT 0210
#define sb_COLOR_SCREENMODE 0211
#define sb_COLOR_MAP 0212
#define sb_COLOR_BASE 0213
#define sb_C_SlowBltChar 0214
#define sb_UNCOLORIZE_BITMAP 0215
#define sb_COLORIZE_BITMAP 0216
#define sb_COLOR_8BPPDRAWLINE 0217
#define sb_TCP_OP 0220
#define sb_WITH_SYMBOL 0221
#define sb_CAUSE_INTERRUPT 0222
#define sb_OPEN_SOCKET 0240
#define sb_CLOSE_SOCKET 0241
#define sb_READ_SOCKET 0242
#define sb_WRITE_SOCKET 0243
#define sb_CALL_C_FUNCTION 0247
#define sb_DLD_LINK 0250
#define sb_DLD_UNLINK_BY_FILE 0251
#define sb_DLD_UNLINK_BY_SYMBOL 0252
#define sb_DLD_GET_SYMBOL 0253
#define sb_DLD_GET_FUNC 0254
#define sb_DLD_FUNCTION_EXECUTABLE_P 0255
#define sb_DLD_LIST_UNDEFINED_SYMBOLS 0256
#define sb_C_MALLOC 0257
#define sb_C_FREE 0260
#define sb_C_PUTBASEBYTE 0261
#define sb_C_GETBASEBYTE 0262
#define sb_CHAR_OPENFILE 0310
#define sb_CHAR_BIN 0311
#define sb_CHAR_BOUT 0312
#define sb_CHAR_IOCTL 0313
#define sb_CHAR_CLOSEFILE 0314
#define sb_CHAR_EOFP 0315
#define sb_CHAR_READP 0316
#define sb_CHAR_BINS 0317
#define sb_CHAR_BOUTS 0320
#define sb_CHAR_FILLBUFFER 0321
#define sb_YIELD 0322
/* MISCN opcodes */
#define miscn_USER_SUBR 00
#define miscn_VALUES 01
#define miscn_SXHASH 02
#define miscn_EQLHASHBITSFN 03
#define miscn_STRINGHASHBITS 04
#define miscn_STRING_EQUAL_HASHBITS 05
#define miscn_VALUES_LIST 06
#define miscn_LCFetchMethod 07
#define miscn_LCFetchMethodOrHelp 010
#define miscn_LCFindVarIndex 011
#define miscn_LCGetIVValue 012
#define miscn_LCPutIVValue 013
/* for accessing RAW RS232C port */
#define miscn_RAW_RS232C_OPEN 050
#define miscn_RAW_RS232C_CLOSE 051
#define miscn_RAW_RS232C_SETPARAM 052
#define miscn_RAW_RS232C_GETPARAM 053
#define miscn_RAW_RS232C_READ 054
#define miscn_RAW_RS232C_WRITE 055
#define miscn_RAW_RS232C_SETINT 056
/* for CHATTER */
#define miscn_CHATTER 040
/* for EJLISP */
#define miscn_EJLISP 060
#define miscn_USER_SUBR 00
#define miscn_VALUES 01
#define miscn_SXHASH 02
#define miscn_EQLHASHBITSFN 03
#define miscn_STRINGHASHBITS 04
#define miscn_STRING_EQUAL_HASHBITS 05
#define miscn_VALUES_LIST 06
#define miscn_LCFetchMethod 07
#define miscn_LCFetchMethodOrHelp 010
#define miscn_LCFindVarIndex 011
#define miscn_LCGetIVValue 012
#define miscn_LCPutIVValue 013
/* Assigned USER SUBR numbers */
#define user_subr_DUMMY 012
#define user_subr_SAMPLE_USER_SUBR 00
#define user_subr_DUMMY 012
#define user_subr_SAMPLE_USER_SUBR 00
#endif

View File

@@ -61,8 +61,8 @@ extern int TIMEOUT_TIME;
/************************************************************************/
#define INTRSAFE(exp) \
do {} while ((int)(exp) == -1 && errno == EINTR)
do {errno = 0; } while ((exp) == -1 && errno == EINTR)
#define INTRSAFE0(exp) \
do {} while ((int)(exp) == 0 && errno == EINTR)
do {errno = 0; } while ((exp) == NULL && errno == EINTR)
#endif /* TIMEOUT_H */

View File

@@ -513,7 +513,8 @@
#ifndef BIGATOMS
#define EVAL \
do { \
LispPTR scratch, work, lookuped; \
LispPTR work, lookuped; \
DLword scratch[2]; \
switch (TOPOFSTACK & SEGMASK) { \
case S_POSITIVE: \
case S_NEGATIVE: \
@@ -521,8 +522,8 @@
case ATOM_OFFSET: \
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
goto Hack_Label; \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \
@@ -552,7 +553,8 @@
#else
#define EVAL \
do { \
LispPTR scratch, work, lookuped; \
LispPTR work, lookuped; \
DLword scratch[2]; \
switch (TOPOFSTACK & SEGMASK) { \
case S_POSITIVE: \
case S_NEGATIVE: \
@@ -560,8 +562,8 @@
case ATOM_OFFSET: \
if ((TOPOFSTACK == NIL_PTR) || (TOPOFSTACK == ATOM_T)) \
goto Hack_Label; \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK & 0xffff); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \
@@ -584,8 +586,8 @@
fn_apply = 0; \
goto op_fn_common; \
case TYPE_NEWATOM: \
nnewframe(CURRENTFX, &scratch, TOPOFSTACK); \
work = POINTERMASK & swapx(scratch); \
nnewframe(CURRENTFX, scratch, TOPOFSTACK); \
work = POINTERMASK & ((GETBASEWORD(scratch,1) << 16) | GETBASEWORD(scratch,0)); \
lookuped = *((LispPTR *)(Addr68k_from_LADDR(work))); \
if (lookuped == NOBIND_PTR) \
goto op_ufn; \

View File

@@ -6,5 +6,5 @@ void lisp_Xexit(DspInterface dsp);
void Xevent_before_raid(DspInterface dsp);
void Xevent_after_raid(DspInterface dsp);
void Open_Display(DspInterface dsp);
DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint, int depth_hint);
DspInterface X_init(DspInterface dsp, LispPTR lispbitmap, int width_hint, int height_hint, int depth_hint);
#endif

View File

@@ -33,7 +33,7 @@
/*** N_OP_aref1 -- op 266 (array index) ***/
LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
register LispPTR baseL;
register int type, index;
register int index;
register OneDArray *arrayblk;
/* verify array */
@@ -45,12 +45,9 @@ LispPTR N_OP_aref1(register LispPTR arrayarg, register LispPTR inx) {
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
index += arrayblk->offset;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* setup base */
baseL = arrayblk->base;
/* disp on type */
return (aref_switch(type, inx, baseL, index));
return (aref_switch(arrayblk->typenumber, inx, baseL, index));
} /* end N_OP_aref1() */

View File

@@ -42,7 +42,6 @@
/************************************************************************/
LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
register int type;
register OneDArray *arrayblk;
register LispPTR base;
register int new;
@@ -57,14 +56,11 @@ LispPTR N_OP_aset1(register LispPTR data, LispPTR arrayarg, register int inx) {
if (index >= arrayblk->totalsize) ERROR_EXIT(inx);
index += arrayblk->offset;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* setup base */
base = arrayblk->base;
/* disp on type */
aset_switch(type, inx);
aset_switch(arrayblk->typenumber, inx);
doufn:
ERROR_EXIT(inx);

View File

@@ -41,7 +41,6 @@
LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
#define REG
LispPTR baseL;
int type;
int arindex, temp;
LispArray *arrayblk;
int j;
@@ -59,9 +58,6 @@ LispPTR N_OP_aref2(LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
arindex *= j;
arindex += temp;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* disp on type */
return (aref_switch(type, inx1, baseL, arindex));
return (aref_switch(arrayblk->typenumber, inx1, baseL, arindex));
} /* end N_OP_aref2() */

View File

@@ -26,7 +26,6 @@
/*** N_OP_aset2 -- op 357 (new-value array index0 index1) ***/
LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPTR inx1) {
register int type;
register LispArray *arrayblk;
register LispPTR base;
register int new;
@@ -46,11 +45,8 @@ LispPTR N_OP_aset2(register LispPTR data, LispPTR arrayarg, LispPTR inx0, LispPT
index *= j;
index += temp;
/* setup typenumber */
type = 0xFF & arrayblk->typenumber;
/* disp on type */
aset_switch(type, inx1);
aset_switch(arrayblk->typenumber, inx1);
doufn:
ERROR_EXIT(inx1);

View File

@@ -329,7 +329,7 @@ void print_finfo(FINFO *fp)
if (fp != (FINFO *)NULL) {
do {
printf("%s -> ", fp->lname);
printf("%d\n", fp->version);
printf("%u\n", fp->version);
fp = fp->next;
} while (fp != (FINFO *)NULL && fp != sp);
@@ -685,13 +685,13 @@ static int enum_dsk_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
if (*fver == '\0')
nextp->version = 0;
else
nextp->version = atoi(fver);
nextp->version = strtoul(fver, (char **)NULL, 10);
nextp->ino = sbuf.st_ino;
nextp->prop->length = (unsigned)sbuf.st_size;
nextp->prop->wdate = (unsigned)ToLispTime(sbuf.st_mtime);
nextp->prop->rdate = (unsigned)ToLispTime(sbuf.st_atime);
nextp->prop->protect = (unsigned)sbuf.st_mode;
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) {
nextp->prop->au_len = 0;
} else {
@@ -948,7 +948,7 @@ static int enum_dsk(char *dir, char *name, char *ver, FINFO **finfo_buf)
if (*fver == '\0')
nextp->version = 0;
else
nextp->version = atoi(fver);
nextp->version = strtoul(fver, (char **)NULL, 10);
nextp->ino = sbuf.st_ino;
n++;
}
@@ -1080,7 +1080,7 @@ static int enum_ufs_prop(char *dir, char *name, char *ver, FINFO **finfo_buf)
char namebuf[MAXPATHLEN];
errno = 0;
TIMEOUT(dirp = opendir(dir));
TIMEOUT0(dirp = opendir(dir));
if (dirp == NULL) {
*Lisp_errno = errno;
return (-1);
@@ -1263,7 +1263,7 @@ static int enum_ufs(char *dir, char *name, char *ver, FINFO **finfo_buf)
char namebuf[MAXPATHLEN];
errno = 0;
TIMEOUT(dirp = opendir(dir));
TIMEOUT0(dirp = opendir(dir));
if (dirp == NULL) {
*Lisp_errno = errno;
return (-1);
@@ -1399,7 +1399,7 @@ static int trim_finfo(FINFO **fp)
* Versionless is not linked to any versioned
* file.
*/
sprintf(ver, ";%d", mp->version + 1);
sprintf(ver, ";%u", mp->version + 1);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
pnum = ++num;
@@ -1527,7 +1527,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* Versionless is not linked to any versioned
* file.
*/
sprintf(ver, ";%d", mp->version + 1);
sprintf(ver, ";%u", mp->version + 1);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
/*
@@ -1602,7 +1602,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* Name: trim_finfo_version
*
* Argument: FINFO **fp Linked list of the numerated FINFO structures.
* int rver Requested version number.
* unsigned rver Requested version number.
*
* Value: Returns the total number of files still remaining in **fp.
*
@@ -1614,7 +1614,7 @@ static int trim_finfo_highest(FINFO **fp, int highestp)
* are got rid of.
*/
static int trim_finfo_version(FINFO **fp, int rver)
static int trim_finfo_version(FINFO **fp, unsigned rver)
{
register FINFO *tp, *sp, *mp, *cp, *pp, *vp;
register int num, pnum;
@@ -1709,7 +1709,7 @@ static int trim_finfo_version(FINFO **fp, int rver)
* file.
*/
if (mp->version + 1 == rver) {
sprintf(ver, ";%d", rver);
sprintf(ver, ";%u", rver);
strcat(sp->lname, ver);
sp->lname_len = strlen(sp->lname);
/*
@@ -1840,7 +1840,8 @@ static FINFO **prepare_sort_buf(register FINFO *fp, register int n)
static int dsk_filecmp(FINFO **fp1, FINFO **fp2)
{
register int res, v1, v2;
register int res;
unsigned v1, v2;
if ((res = strcmp((*fp1)->no_ver_name, (*fp2)->no_ver_name)) != 0) return (res);
@@ -2032,7 +2033,8 @@ LispPTR COM_gen_files(register LispPTR *args)
#ifdef DOS
char drive[1];
#endif
int dskp, count, highestp, propp, fid, version;
int dskp, count, highestp, fid;
unsigned propp, version;
register char *cp;
FINFO *fp;
int dsk_filecmp(), unix_filecmp();
@@ -2111,7 +2113,7 @@ LispPTR COM_gen_files(register LispPTR *args)
if (*ver != '\0') {
highestp = 0;
version = atoi(ver);
version = strtoul(ver, (char **)NULL, 10);
if (version > 0) strcpy(ver, "*");
} else {
version = 0;
@@ -2193,7 +2195,8 @@ LispPTR COM_next_file(register LispPTR *args)
register char *base;
register DFINFO *dfp;
register UFSGFS *gfsp;
int finfoid, propp;
int finfoid;
unsigned propp;
ERRSETJMP(-1);
Lisp_errno = &Dummy_errno;

View File

@@ -17,10 +17,10 @@
#include "version.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include "lispemul.h"
#include "lspglob.h"
#include "lispmap.h"
@@ -268,21 +268,21 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
#endif /* COLOR */
{
DLword *start_addr, *temp_s, *temp_e;
DLword *start_addr;
start_addr = (DLword *)Addr68k_from_LADDR(ptr);
if (((int)(temp_s = (DLword *)(start_addr - DisplayRegion68k)) >= 0) &&
(start_addr < DisplayRegion68k_end_addr) &&
((int)(temp_e = (DLword *)(dataptr - DisplayRegion68k)) >= 0) &&
((DLword *)dataptr < DisplayRegion68k_end_addr)) {
if (in_display_segment(start_addr) && in_display_segment(dataptr)) {
int start_x, start_y, end_x, end_y, w, h;
ptrdiff_t temp_s, temp_e;
start_y = (int)temp_s / DisplayRasterWidth;
start_x = ((int)temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
temp_s = start_addr - DisplayRegion68k;
temp_e = dataptr - DisplayRegion68k;
end_y = (int)temp_e / DisplayRasterWidth;
end_x = ((int)temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
start_y = temp_s / DisplayRasterWidth;
start_x = (temp_s % DisplayRasterWidth) * BITSPER_DLWORD;
end_y = temp_e / DisplayRasterWidth;
end_x = (temp_e % DisplayRasterWidth) * BITSPER_DLWORD + (BITSPER_DLWORD - 1);
w = abs(start_x - end_x) + 1;
h = abs(start_y - end_y) + 1;
@@ -290,10 +290,8 @@ int N_OP_drawline(LispPTR ptr, int curbit, int xsize, int width, int ysize, int
if (start_x > end_x) start_x = end_x;
if (start_y > end_y) start_y = end_y;
#if defined(XWINDOW) || defined(BYTESWAP)
flush_display_region(start_x, start_y, w, h);
#endif /* XWINDOW */
}
}

101
src/dsk.c
View File

@@ -59,7 +59,7 @@ extern int Dummy_errno;
typedef struct filename_entry {
char name[MAXPATHLEN]; /* With version, foo.~3~ or foo */
int version_no;
unsigned version_no;
} FileName;
typedef struct current_varray {
@@ -851,7 +851,8 @@ LispPTR COM_closefile(register LispPTR *args)
LispPTR DSK_getfilename(register LispPTR *args)
{
register char *base;
register int len, dirp, rval;
size_t len, rval;
register int dirp;
int fatp;
char lfname[MAXPATHLEN];
char aname[MAXNAMLEN];
@@ -1510,7 +1511,8 @@ LispPTR DSK_directorynamep(register LispPTR *args)
{
char dirname[MAXPATHLEN];
char fullname[MAXPATHLEN];
register int len, fatp;
size_t len;
register int fatp;
register char *base;
#ifdef DOS
char drive[1], rawname[MAXNAMLEN];
@@ -1697,9 +1699,10 @@ LispPTR COM_getfileinfo(register LispPTR *args)
*bufp = sbuf.st_mode;
return (ATOM_T);
case AUTHOR:
case AUTHOR: {
size_t rval;
#ifndef DOS
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) {
/*
* Returns Lisp 0. Lisp code handles this case as author
@@ -1717,8 +1720,9 @@ LispPTR COM_getfileinfo(register LispPTR *args)
#endif /* BYTESWAP */
#endif /* DOS */
return (GetSmallp(rval));
case ALL:
}
case ALL: {
size_t rval;
/*
* The format of the buffer which has been allocated by Lisp
* is as follows.
@@ -1744,7 +1748,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
bufp = (unsigned *)(Addr68k_from_LADDR(laddr));
*bufp = sbuf.st_mode;
#ifndef DOS
TIMEOUT(pwd = getpwuid(sbuf.st_uid));
TIMEOUT0(pwd = getpwuid(sbuf.st_uid));
if (pwd == (struct passwd *)NULL) { return (GetSmallp(0)); }
laddr = cdr(car(cdr(cdr(cdr(cdr(args[2]))))));
STRING_BASE(laddr, base);
@@ -1756,7 +1760,7 @@ LispPTR COM_getfileinfo(register LispPTR *args)
#endif /* BYTESWAP */
#endif /* DOS */
return (GetSmallp(rval));
}
default: return (NIL);
}
}
@@ -2365,7 +2369,7 @@ LispPTR COM_getfreeblock(register LispPTR *args)
void separate_version(char *name, char *ver, int checkp)
{
register char *start, *end, *cp;
register int ver_no;
register unsigned ver_no;
size_t len;
char ver_buf[VERSIONLEN];
@@ -2397,10 +2401,10 @@ void separate_version(char *name, char *ver, int checkp)
*(start - 1) = '\0';
*end = '\0';
/*
* Use atoi to eliminate leading 0s.
* Use strtoul() to eliminate leading 0s.
*/
ver_no = atoi(start + 1);
sprintf(ver_buf, "%d", ver_no);
ver_no = strtoul(start + 1, (char **)NULL, 10);
sprintf(ver_buf, "%u", ver_no);
strcpy(ver, ver_buf);
return;
} else {
@@ -2502,8 +2506,8 @@ int true_name(register char *path)
#ifdef DOS
char drive[1];
#endif
register char *sp, *cp;
register int type, c;
register char c, *sp, *cp;
register int type;
if (strcmp(path, "/") == 0) return (-1);
@@ -3025,7 +3029,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
* separator_version guarantees ver is a numeric
* string.
*/
svarray->version_no = atoi(ver);
svarray->version_no = strtoul(ver, (char **)NULL, 10);
}
svarray++;
}
@@ -3119,7 +3123,7 @@ static int get_version_array(char *dir, char *file, FileName *varray, CurrentVAr
* separator_version guarantees ver is a numeric
* string.
*/
svarray->version_no = atoi(ver);
svarray->version_no = strtoul(ver, (char **)NULL, 10);
}
svarray++;
}
@@ -3263,7 +3267,7 @@ static int maintain_version(char *file, FileName *varray, int forcep)
* is versioned one higher than the existing highest version.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(ver, "%d", max_no + 1);
sprintf(ver, "%u", max_no + 1);
/*
* The old file should have the same case name as the versionless
* file.
@@ -3395,7 +3399,8 @@ 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)
{
register int rval, max_no, found;
register int rval, found;
unsigned max_no;
ino_t vless_ino;
struct stat sbuf;
char dir[MAXPATHLEN], name[MAXNAMLEN], ver[VERSIONLEN];
@@ -3498,7 +3503,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -3528,7 +3533,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3552,7 +3557,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -3586,13 +3591,13 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* link missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -3601,7 +3606,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -3640,7 +3645,7 @@ static int get_old(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3697,7 +3702,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, min_no;
register unsigned ver_no, min_no;
int highest_p;
register FileName *entry;
@@ -3727,7 +3732,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3751,7 +3756,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -3788,7 +3793,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, min_no);
if (ver_no == min_no + 1) {
/*
@@ -3797,7 +3802,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -3836,7 +3841,7 @@ static int get_oldest(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3894,7 +3899,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -3942,7 +3947,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* the existing highest version.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
/*
* We will use the file name of the existing highest
* versioned file as the name of the new file, so that
@@ -3960,7 +3965,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -3998,7 +4003,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vfile);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -4034,13 +4039,13 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 2);
sprintf(vbuf, "%u", max_no + 2);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vfile);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -4049,7 +4054,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -4097,7 +4102,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* new file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
/*
* We will use the name of the highest versioned file
* as the name of the new file.
@@ -4114,7 +4119,7 @@ static int get_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -4188,7 +4193,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
{
char name[MAXPATHLEN], vless[MAXPATHLEN], to_file[MAXPATHLEN];
char ver[VERSIONLEN], vbuf[VERSIONLEN];
register int ver_no, max_no;
register unsigned ver_no, max_no;
int highest_p;
register FileName *entry;
@@ -4240,7 +4245,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);
@@ -4278,7 +4283,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
strcpy(afile, vless);
return (1);
} else {
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
if (ver_no == 1) {
/*
* Version 1 is specified. The versionless file is
@@ -4313,13 +4318,13 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* link missing versionless file.
*/
FindHighestVersion(varray, entry, max_no);
sprintf(vbuf, "%d", max_no + 1);
sprintf(vbuf, "%u", max_no + 1);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
} else {
/* A version is specified. */
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindHighestVersion(varray, entry, max_no);
if (ver_no == max_no + 1) {
/*
@@ -4328,7 +4333,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* is dealt with as a version of the link
* missing versionless file.
*/
sprintf(vbuf, "%d", ver_no);
sprintf(vbuf, "%u", ver_no);
ConcNameAndVersion(vless, vbuf, vfile);
strcpy(afile, vless);
return (1);
@@ -4384,7 +4389,7 @@ static int get_old_new(char *dir, FileName *varray, char *afile, char *vfile)
* varray and try to find the file with the specified
* version.
*/
ver_no = atoi(ver);
ver_no = strtoul(ver, (char **)NULL, 10);
FindSpecifiedVersion(varray, entry, ver_no);
if (entry != NULL) {
ConcDirAndName(dir, entry->name, afile);

View File

@@ -27,9 +27,6 @@ DspInterface currentdsp = &curdsp;
#ifdef XWINDOW
extern int LispDisplayRequestedWidth;
extern int LispDisplayRequestedHeight;
extern DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
int depth_hint);
#endif /* XWINDOW */
#ifdef DOS

View File

@@ -742,7 +742,7 @@ static int check_filter(u_char *buffer)
static void init_uid() {
int rid;
rid = getuid();
seteuid(rid);
setuid(rid);
}
#endif /* MAIKO_ENABLE_ETHERNET */
@@ -830,7 +830,7 @@ void init_ether() {
/* JDS 991228 remove perror("Can't open network; XNS unavailable.\n"); */
ether_fd = -1;
}
seteuid(getuid());
setuid(getuid());
}
#elif defined(USE_NIT)
#ifndef OS4
@@ -952,7 +952,7 @@ void init_ether() {
perror("Can't open network; XNS unavailable.\n");
ether_fd = -1;
}
seteuid(getuid());
setuid(getuid());
}
#endif /* OS4 */

View File

@@ -139,8 +139,7 @@ void init_ifpage(int sysout_size) {
#ifdef BIGVM
/* For BIGVM system, save the value in \LASTVMEMFILEPAGE for lisp's use */
if ((LispPTR)LASTVMEMFILEPAGE_word != 0xFFFFFFFF)
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
*LASTVMEMFILEPAGE_word = InterfacePage->dllastvmempage;
#endif /* BIGVM */
/* unfortunately, Lisp only looks at a 16 bit serial number */

View File

@@ -214,7 +214,7 @@ int main(int argc, char *argv[]) {
ether_fd = -1;
/* exit(); */
}
seteuid(getuid());
setuid(getuid());
}
/* OK, right here do other stuff like scan args */

View File

@@ -75,7 +75,6 @@
DLword *Lisp_world; /* lispworld */
/********** 68k address for Lisp Space **********/
DLword *Atomspace;
DLword *Stackspace;
DLword *Plistspace;
DLword *DTDspace;
@@ -85,8 +84,6 @@ DLword *Pnamespace;
DLword *AtomSpace;
DLword *Defspace;
DLword *Valspace;
DLword *Spospspace;
DLword *Snegspace;
/********** For Virtual Memory Management **********/
#ifdef BIGVM
@@ -124,7 +121,6 @@ DLword *HTcoll;
DLword *DisplayRegion;
int DisplayInitialized = NIL;
DLword *Arrayspace;
DLword *MDS_space_bottom;
DLword *PnCharspace;
struct dtd *ListpDTD;
@@ -210,7 +206,8 @@ int UnixPipeIn;
int UnixPipeOut;
int UnixPID;
int please_fork = 1;
/* disable X11 scroll bars if requested */
int noscroll = 0;
/*** STACK handle staff(Takeshi) **/
LispPTR *STACKOVERFLOW_word;
LispPTR *GuardStackAddr_word;
@@ -239,10 +236,6 @@ int display_max = 65536 * 16 * 2;
/* diagnostic flag for sysout dumping */
extern int maxpages;
/** For call makepathname inside main() **/
extern int *Lisp_errno;
extern int Dummy_errno; /* If errno cell is not provided by Lisp, dummy_errno is used. */
char sysout_name[MAXPATHLEN]; /* Set by read_Xoption, in the X version. */
int sysout_size = 0; /* ditto */
@@ -312,6 +305,7 @@ int main(int argc, char *argv[])
char *envname;
extern int TIMER_INTERVAL;
extern fd_set LispReadFds;
int tmpint;
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
if (dld_find_executable(argv[0]) == 0) {
perror("Name of executable not found.");
@@ -338,9 +332,6 @@ int main(int argc, char *argv[])
Barf and print the command line if tha fails
*/
/* For call makepathname */
Lisp_errno = &Dummy_errno;
i = 1;
if (argv[i] && ((strcmp(argv[i], "-info") == 0) || (strcmp(argv[i], "-INFO") == 0))) {
@@ -360,13 +351,18 @@ int main(int argc, char *argv[])
strncpy(sysout_name, envname, MAXPATHLEN);
} else if ((envname = getenv("LDESOURCESYSOUT")) != NULL)
strncpy(sysout_name, envname, MAXPATHLEN);
else {
#ifdef DOS
else if (!makepathname("lisp.vm", sysout_name)
strncpy(sysout_name, "lisp.vm", MAXPATHLEN);
#else
else if (!makepathname("~/lisp.virtualmem", sysout_name)
if ((envname = getenv("HOME")) != NULL) {
strncpy(sysout_name, envname, MAXPATHLEN);
strncat(sysout_name, "/lisp.virtualmem", MAXPATHLEN - 17);
}
#endif /* DOS */
|| access(sysout_name, R_OK)) {
fprintf(stderr, "Couldn't find a sysout to run;\n");
}
if (access(sysout_name, R_OK)) {
perror("Couldn't find a sysout to run");
fprintf(stderr, "%s", helpstring);
exit(1);
}
@@ -377,18 +373,32 @@ int main(int argc, char *argv[])
/* -t and -m are undocumented and somewhat dangerous... */
if (!strcmp(argv[i], "-t")) { /**** timer interval ****/
if (argc > ++i)
TIMER_INTERVAL = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
TIMER_INTERVAL = tmpint;
} else {
fprintf(stderr, "Bad value for -t (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -t\n");
exit(1);
}
}
else if (!strcmp(argv[i], "-m")) { /**** sysout size ****/
if (argc > ++i)
sysout_size = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
sysout_size = tmpint;
} else {
fprintf(stderr, "Bad value for -m (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -m\n");
exit(1);
}
@@ -453,9 +463,16 @@ int main(int argc, char *argv[])
}
/* diagnostic flag for big vmem write() calls */
else if (!strcmp(argv[i], "-xpages")) {
if (argc > ++i)
maxpages = atoi(argv[i]);
else {
if (argc > ++i) {
errno = 0;
tmpint = strtol(argv[i], (char **)NULL, 10);
if (errno == 0 && tmpint > 0) {
maxpages = tmpint;
} else {
fprintf(stderr, "Bad value for -xpages (integer > 0)\n");
exit(1);
}
} else {
fprintf(stderr, "Missing argument after -xpages\n");
exit(1);
}
@@ -467,8 +484,11 @@ int main(int argc, char *argv[])
probemouse(); /* See if the mouse is connected. */
#else
if (getuid() != geteuid()) {
fprintf(stderr, "Effective user is not real user. Setting euid to uid.\n");
seteuid(getuid());
fprintf(stderr, "Effective user is not real user. Resetting uid\n");
if (setuid(getuid()) == -1) {
fprintf(stderr, "Unable to reset user id to real user id\n");
exit(1);
}
}
#endif /* DOS */
@@ -592,87 +612,6 @@ void start_lisp() {
dispatch();
}
/************************************************************************/
/* */
/* m a k e p a t h n a m e */
/* */
/* */
/* */
/************************************************************************/
int makepathname(char *src, char *dst)
{
register int len;
register char *base, *cp;
register struct passwd *pwd;
char name[MAXPATHLEN];
base = src;
switch (*base) {
case '.':
if (getcwd(dst, MAXPATHLEN) == 0)
{ /* set working directory */
*Lisp_errno = errno;
return (0);
}
switch (*(base + 1)) {
case '.':
if (*(base + 2) == '/') { /* Now, base == "../xxxx" */
cp = (char *)strrchr(dst, '/');
if (cp == 0) return (0);
*cp = '\0';
strcat(dst, base + 2);
return (1);
} else
return (0);
case '/':
/* Now, base == "./xxx" */
strcat(dst, base + 1);
return (1);
default: return (0);
}
case '~':
ERRSETJMP(0);
if (*(base + 1) == '/') {
/* path is "~/foo" */
#ifdef DOS
pwd = 0;
#else
TIMEOUT(pwd = getpwuid(getuid()));
#endif /* DOS */
if (pwd == NULL) {
*Lisp_errno = errno;
return (0);
}
#ifndef DOS
sprintf(dst, "%s%s", pwd->pw_dir, base + 1);
#endif
return (1);
} else {
/* path is "~foo/" */
if ((cp = (char *)strchr(base + 1, '/')) == 0)
return (0);
else {
len = (UNSIGNED)cp - (UNSIGNED)base - 1;
strncpy(name, base + 1, len);
name[len] = '\0';
#ifndef DOS
TIMEOUT(pwd = getpwnam(name));
#endif /* DOS */
if (pwd == NULL) {
*Lisp_errno = errno;
return (0);
}
#ifndef DOS
sprintf(dst, "%s%s", pwd->pw_dir, cp);
#endif /* DOS */
return (1);
}
}
default: strcpy(dst, src); return (1);
}
}
void print_info_lines() {
#if (RELEASE == 200)
printf("Emulator for Medley release 2.0\n");

View File

@@ -27,7 +27,6 @@
compute_hash
create_symbol
compare_chars
parse_number
*/
/**********************************************************************/
@@ -248,10 +247,11 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
/*
Func name : make_atom
If the atom already existed then return
else create new atom . Returns the Atom's index.
Look up the atom index of an existing atom, or return 0xFFFFFFFF
This function does not handle FAT pname's.
This function is a subset of \MKATOM (in LLBASIC), but only handles
thin text atom names (no numbers, no 2-byte pnames).
It MUST return the same atom index number as \MKATOM
Date : January 29, 1987
Edited by : Takeshi Shimizu
@@ -264,10 +264,8 @@ LispPTR compare_lisp_chars(register const char *char1, register const char *char
*/
/**********************************************************************/
LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int non_numericp)
/* if it is NIL then these chars are treated as NUMBER */
LispPTR make_atom(const char *char_base, DLword offset, DLword length)
{
extern DLword *Spospspace;
extern DLword *AtomHT;
extern DLword *Pnamespace;
extern DLword *AtomSpace;
@@ -282,41 +280,34 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
unsigned short first_char;
#ifdef TRACE2
printf("TRACE: make_atom( %s , offset= %d, len= %d, non_numericp = %d)\n", char_base, offset,
length, non_numericp);
printf("TRACE: make_atom( %s , offset= %d, len= %d)\n", char_base, offset, length);
#endif
first_char = (*(char_base + offset)) & 0xff;
if (length != 0) {
if (length == 1) /* one char. atoms */
{
if (first_char > 57) /* greater than '9 */
return ((LispPTR)(ATOMoffset + (first_char - 10)));
else if (first_char > 47) /* between '0 to '9 */
return ((LispPTR)(S_POSITIVE + (first_char - 48)));
/* fixed S_... mar-27-87 take */
else /* other one char. atoms */
return ((LispPTR)(ATOMoffset + first_char));
} /* if(length==1.. end */
else if ((non_numericp == NIL) && (first_char <= '9'))
/* more than 10 arithmetic aon + - mixed atom process */
{
if ((hash_entry = parse_number(char_base + offset, length)) != 0)
return ((LispPTR)hash_entry); /* if NIL that means THE ATOM is +- mixed litatom */
/* 15 may 87 take */
}
hash = compute_hash(char_base, offset, length);
} /* if(lengt.. end */
else {
switch (length) {
case 0:
/* the zero-length atom has hashcode 0 */
hash = 0;
first_char = 255;
break;
case 1:
/* One-character atoms live in well known places, no need to hash */
if (first_char > '9')
return ((LispPTR)(ATOMoffset + (first_char - 10)));
if (first_char >= '0' ) /* 0..9 */
return ((LispPTR)(S_POSITIVE + (first_char - '0')));
/* other one character atoms */
return ((LispPTR)(ATOMoffset + first_char));
default:
hash = compute_hash(char_base, offset, length);
break;
}
/* This point corresponds with LP in Lisp source */
/* following for loop never exits until it finds new hash entry or same atom */
/* following for loop does not exit until it finds new hash entry or same atom */
for (reprobe = Atom_reprobe(hash, first_char); (hash_entry = GETWORD(AtomHT + hash)) != 0;
hash = ((hash + reprobe) & 0xffff)) {
atom_index = hash_entry - 1;
@@ -327,7 +318,7 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
if ((length == GETBYTE(pname_base)) &&
(compare_chars(++pname_base, char_base + offset, length) == T)) {
DBPRINT(("FOUND the atom. \n"));
return (atom_index); /* find already existed atom */
return (atom_index); /* found existing atom */
}
DBPRINT(("HASH doesn't hit. reprobe!\n"));
@@ -338,65 +329,3 @@ LispPTR make_atom(const char *char_base, DLword offset, DLword length, short int
return (0xffffffff);
/** Don't create newatom now **/
} /* make_atom end */
/*********************************************************************/
/*
Func name : parse_number
Desc : It can treat -65534 to 65535 integer
Returns SMALLP PTR
Date : 1,May 1987 Take
15 May 87 take
*/
/*********************************************************************/
/* Assume this func. should be called with C string in "char_base" */
LispPTR parse_number(const char *char_base, short int length) {
register LispPTR sign_mask;
register LispPTR val;
register int radix;
register int *cell68k;
#ifdef TRACE2
printf("TRACE: parse_number()\n");
#endif
/* Check for Radix 8(Q) postfixed ?? */
if ((*(char_base + (length - 1))) == 'Q') {
radix = 8;
length--;
} else
radix = 10;
/* Check for Sign */
sign_mask = S_POSITIVE;
if ((*(char_base) == '+') || (*(char_base) == '-')) {
sign_mask = ((*char_base++) == '+') ? S_POSITIVE : S_NEGATIVE;
length--;
}
for (val = 0; length > 0; length--) {
if ((((*char_base)) < '0') || ('9' < ((*char_base)))) return (NIL);
val = radix * val + (*char_base++) - '0';
}
if (val > 0xffffffff) error("parse_number : Overflow ...exceeded range of FIXP");
if ((sign_mask == S_POSITIVE) && (val > 0xffff)) {
cell68k = (int *)createcell68k(TYPE_FIXP);
*cell68k = val;
return (LADDR_from_68k(cell68k));
} else if ((sign_mask == S_NEGATIVE) && (val > 0xffff)) {
cell68k = (int *)createcell68k(TYPE_FIXP);
*cell68k = ~val + 1;
return (LADDR_from_68k(cell68k));
}
else if (sign_mask == S_NEGATIVE)
return (sign_mask | (~((DLword)val) + 1));
else {
return (sign_mask | val);
}
}
/* end parse_number */

View File

@@ -99,7 +99,9 @@ int main(int argc, char **argv) {
printf("setsysout version sysout-name\n");
return (-1);
}
if ((version = atoi(argv[1])) == 0) {
errno = 0;
version = (int)strtol(argv[1], (char **)NULL, 10);
if (errno || version <= 0) {
printf("version must be an integer > 0.\n");
return (-1);
}

View File

@@ -35,7 +35,7 @@
#include "conspagedefs.h"
#include "gcfinaldefs.h"
#include "gchtfinddefs.h"
#include "mkatomdefs.h"
#include "testtooldefs.h"
#define MINARRAYBLOCKSIZE 4
#define GUARDVMEMFULL 500
@@ -374,7 +374,7 @@ LispPTR newpage(LispPTR base) {
} else if (InterfacePage->key == IFPVALID_KEY) {
*VMEM_FULL_STATE_word = ATOM_T;
} else
*VMEM_FULL_STATE_word = make_atom("DIRTY", 0, 5, 0);
*VMEM_FULL_STATE_word = MAKEATOM("DIRTY");
}
return (base);

View File

@@ -29,6 +29,7 @@
/***********************************************************/
#include <stdio.h>
#include <time.h>
#include "lispemul.h"
#include "address.h"
#include "adr68k.h"
@@ -62,6 +63,9 @@
#include "unixcommdefs.h"
#include "uutilsdefs.h"
#include "vmemsavedefs.h"
#ifdef MAIKO_ENABLE_FOREIGN_FUNCTION_INTERFACE
#include "foreigndefs.h"
#endif
extern LispPTR *PENDINGINTERRUPT68k;
@@ -336,17 +340,17 @@ void OP_subrcall(int subr_no, int argnum) {
C_slowbltchar(args);
break;
case 0215:
case sb_UNCOLORIZE_BITMAP:
POP_SUBR_ARGS;
Uncolorize_Bitmap(args);
break;
case 0216:
case sb_COLORIZE_BITMAP:
POP_SUBR_ARGS;
Colorize_Bitmap(args);
break;
case 0217:
case sb_COLOR_8BPPDRAWLINE:
POP_SUBR_ARGS;
Draw_8BppColorLine(args);
break;
@@ -480,6 +484,7 @@ void OP_subrcall(int subr_no, int argnum) {
case sb_GET_NATIVE_ADDR_FROM_LISP_PTR:
POP_SUBR_ARGS;
/* XXX: this WILL NOT WORK if Lisp memory is allocated outside the low 4GB */
ARITH_SWITCH(Addr68k_from_LADDR(args[0]), TopOfStack);
break;
@@ -669,7 +674,7 @@ void OP_subrcall(int subr_no, int argnum) {
TopOfStack = with_symbol(args[0], args[1], args[2], args[3], args[4], args[5]);
break;
case 0222: /* Cause an interrupt to occur. Used by */
case sb_CAUSE_INTERRUPT: /* Cause an interrupt to occur. Used by */
/* Lisp INTERRUPTED to re-set an interrupt */
/* when it's uninterruptible. */
POP_SUBR_ARGS;
@@ -682,7 +687,7 @@ void OP_subrcall(int subr_no, int argnum) {
/*****************************************/
/* foreign-function-call support subrs */
/*****************************************/
case sb_CALL_C_FN: {
case sb_CALL_C_FUNCTION: {
POP_SUBR_ARGS;
TopOfStack = call_c_fn(args); /* args[0]=fnaddr, args[1]=fn type */
break;
@@ -717,27 +722,27 @@ void OP_subrcall(int subr_no, int argnum) {
TopOfStack = Mdld_function_executable_p(args);
break;
}
case sb_DLD_LIST_UNDEFINED_SYM: {
case sb_DLD_LIST_UNDEFINED_SYMBOLS: {
POP_SUBR_ARGS;
TopOfStack = Mdld_list_undefined_sym();
break;
}
case sb_MALLOC: {
case sb_C_MALLOC: {
POP_SUBR_ARGS;
TopOfStack = c_malloc(args);
break;
}
case sb_FREE: {
case sb_C_FREE: {
POP_SUBR_ARGS;
TopOfStack = c_free(args);
break;
}
case sb_PUT_C_BASEBYTE: {
case sb_C_PUTBASEBYTE: {
POP_SUBR_ARGS;
TopOfStack = put_c_basebyte(args);
break;
}
case sb_GET_C_BASEBYTE: {
case sb_C_GETBASEBYTE: {
POP_SUBR_ARGS;
TopOfStack = get_c_basebyte(args);
break;
@@ -779,6 +784,20 @@ void OP_subrcall(int subr_no, int argnum) {
break;
}
#endif /* LPSOLVE */
case sb_YIELD: {
struct timespec rqts = {0, 833333};
unsigned sleepnanos;
POP_SUBR_ARGS;
N_GETNUMBER(args[0], sleepnanos, ret_nil);
if (sleepnanos > 999999999) {
TopOfStack = NIL;
break;
}
rqts.tv_nsec = sleepnanos;
nanosleep(&rqts, NULL);
TopOfStack = ATOM_T;
break;
}
default: {
char errtext[200];
sprintf(errtext, "OP_subrcall: Invalid alpha byte 0%o", ((*(PC + 1)) & 0xff));

View File

@@ -424,7 +424,7 @@ void dump_fnobj(LispPTR index)
/************************************************************************/
/* Opcode names, by opcode */
static const char *opcode_table[256] = {
const char *opcode_table[256] = {
"-X-",
"CAR",
"CDR",
@@ -1018,7 +1018,7 @@ FX *get_nextFX(FX *fx) {
} /* get_nextFX end */
LispPTR MAKEATOM(char *string) {
return (make_atom(string, 0, strlen(string), 0));
return (make_atom(string, 0, strlen(string)));
}
/************************************************************************/
@@ -1032,7 +1032,7 @@ LispPTR MAKEATOM(char *string) {
LispPTR *MakeAtom68k(char *string) {
LispPTR index;
index = make_atom(string, 0, strlen(string), 0);
index = make_atom(string, 0, strlen(string));
if (index == 0xffffffff) {
error("MakeAtom68k: no such atom found");
}

View File

@@ -18,6 +18,7 @@
#include "version.h"
#include <errno.h>
#include <fcntl.h>
#include <setjmp.h>
#include <signal.h>
@@ -85,7 +86,7 @@ extern DspInterface currentdsp;
* to get Alto time.
*/
int TIMEOUT_TIME; /* For file system timeout */
int TIMEOUT_TIME = 10; /* For file system timeout, seconds, default 10 */
volatile sig_atomic_t IO_Signalled = FALSE;
@@ -710,13 +711,12 @@ static void int_file_init() {
}
/* Set Timeout period */
if ((envtime = getenv("LDEFILETIMEOUT")) == NULL) {
TIMEOUT_TIME = 10;
} else {
if ((timeout_time = atoi(envtime)) > 0)
envtime = getenv("LDEFILETIMEOUT");
if (envtime != NULL) {
errno = 0;
timeout_time = (int)strtol(envtime, (char **)NULL, 10);
if (errno == 0 && timeout_time > 0)
TIMEOUT_TIME = timeout_time;
else
TIMEOUT_TIME = 10;
}
DBPRINT(("File timeout interrupts enabled\n"));
}

View File

@@ -156,7 +156,8 @@ exit_host_filesystem() {
LispPTR UFS_getfilename(LispPTR *args)
{
register char *base;
register int len, rval;
size_t len;
register int rval;
char lfname[MAXPATHLEN], file[MAXPATHLEN];
ERRSETJMP(NIL);
@@ -369,7 +370,8 @@ LispPTR UFS_directorynamep(LispPTR *args)
{
char dirname[MAXPATHLEN];
char fullname[MAXPATHLEN];
register int len, rval;
size_t len;
register int rval;
register char *base;
struct stat sbuf;
@@ -564,7 +566,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
case '~':
if (*(cp + 1) == '>' || *(cp + 1) == '\0') {
/* "~>" or "~" means the user's home directory. */
TIMEOUT(pwd = getpwuid(getuid()));
TIMEOUT0(pwd = getpwuid(getuid()));
if (pwd == NULL) return (0);
strcpy(dst, pwd->pw_dir);
@@ -588,7 +590,7 @@ int unixpathname(char *src, char *dst, int versionp, int genp)
*/
for (++cp, np = name; *cp != '\0' && *cp != '>';) *np++ = *cp++;
*np = '\0';
TIMEOUT(pwd = getpwnam(name));
TIMEOUT0(pwd = getpwnam(name));
if (pwd == NULL) return (0);
strcpy(dst, pwd->pw_dir);

View File

@@ -247,14 +247,35 @@ void close_unix_descriptors(void) /* Get ready to shut Maiko down */
int FindUnixPipes(void) {
char *envtmp;
int inttmp;
struct unixjob cleareduj;
DBPRINT(("Entering FindUnixPipes\n"));
UnixPipeIn = UnixPipeOut = StartTime = UnixPID = -1;
if ((envtmp = getenv("LDEPIPEIN"))) UnixPipeIn = atoi(envtmp);
if ((envtmp = getenv("LDEPIPEOUT"))) UnixPipeOut = atoi(envtmp);
if ((envtmp = getenv("LDESTARTTIME"))) StartTime = atoi(envtmp);
if ((envtmp = getenv("LDEUNIXPID"))) UnixPID = atoi(envtmp);
if ((envtmp = getenv("LDEPIPEIN"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPipeIn = inttmp;
}
if ((envtmp = getenv("LDEPIPEOUT"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPipeOut = inttmp;
}
if ((envtmp = getenv("LDESTARTTIME"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
StartTime = inttmp;
}
if ((envtmp = getenv("LDEUNIXPID"))) {
errno = 0;
inttmp = (int)strtol(envtmp, (char **)NULL, 10);
if (errno == 0)
UnixPID = inttmp;
}
/* This is a good place to initialize stuff like the UJ table */
NPROCS = sysconf(_SC_OPEN_MAX);
@@ -330,7 +351,7 @@ static int FindAvailablePty(char *Slave) {
/* => byte count (<= 512), NIL (no data), or T (EOF) */
/* 10 Set Window Size, Arg2 = rows, Arg3 = columns */
/* 11 Fork PTY to Shell (obsoletes command 4) */
/* Arg1 = termtype, Arg2 = csh command string */
/* Arg1 = termtype, Arg2 = shell command string */
/* => Job # or NIL */
/* 12 Create Unix Socket */
/* Arg1 = pathname to bind socket to (string) */

View File

@@ -75,76 +75,78 @@ static inline ssize_t SAFEREAD(int f, char *b, int c)
/* */
/************************************************************************/
/* Creates a PTY connection to a csh */
/* Creates a PTY connection to a shell */
static int ForkUnixShell(int slot, char *PtySlave, char *termtype, char *shellarg)
{
int PID, SlaveFD;
struct termios tio;
char *argvec[4] = {NULL, NULL, NULL, NULL};
char *shell = NULL;
char *userShell = NULL;
PID = fork();
if (PID == 0) {
char *argvec[4];
if (0 > setsid()) /* create us a new session for tty purposes */
perror("setsid");
/* Open the slave side */
SlaveFD = open(PtySlave, O_RDWR);
if (SlaveFD == -1) {
perror("Slave Open");
perror(PtySlave);
exit(0);
}
#ifdef OS5
ioctl(SlaveFD, I_PUSH, "ptem");
ioctl(SlaveFD, I_PUSH, "ldterm");
#endif /* OS5 */
/* Set up as basic display terminal: canonical erase,
kill processing, echo, backspace to erase, echo ctrl
chars as ^x, kill line by backspacing */
tcgetattr(SlaveFD, &tio);
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
tcsetattr(SlaveFD, TCSANOW, &tio);
(void)dup2(SlaveFD, 0);
(void)dup2(SlaveFD, 1);
(void)dup2(SlaveFD, 2);
(void)close(SlaveFD);
/* set the LDESHELL variable so the underlying .cshrc can see it and
configure the shell appropriately, though this may not be so important any more */
setenv("LDESHELL", "YES", 1);
if (termtype[0] != 0) { /* set the TERM environment var */
setenv("TERM", termtype, 1);
}
/* Start up csh */
argvec[0] = "csh";
if (shellarg[0] != 0) { /* setup to run command */
argvec[1] = "-c"; /* read commands from next arg */
argvec[2] = shellarg;
argvec[3] = (char *)0;
} else
argvec[1] = (char *)0;
execv("/bin/csh", argvec);
/* Should never get here */
perror("execv");
exit(0);
} else { /* not the forked process. */
if (PID != 0) {
if (shellarg != shcom) free(shellarg);
return (PID);
}
/* Set the process group so all the kids get the bullet too
if (setpgrp(PID, PID) != 0)
perror("setpgrp"); */
if (0 > setsid()) /* create us a new session for tty purposes */
perror("setsid");
return (PID);
/* Open the slave side */
SlaveFD = open(PtySlave, O_RDWR);
if (SlaveFD == -1) {
perror("Slave Open");
perror(PtySlave);
exit(0);
}
#ifdef OS5
ioctl(SlaveFD, I_PUSH, "ptem");
ioctl(SlaveFD, I_PUSH, "ldterm");
#endif /* OS5 */
/* Set up as basic display terminal: canonical erase,
kill processing, echo, backspace to erase, echo ctrl
chars as ^x, kill line by backspacing */
tcgetattr(SlaveFD, &tio);
tio.c_lflag |= ICANON | ECHO | ECHOE | ECHOCTL | ECHOKE;
tcsetattr(SlaveFD, TCSANOW, &tio);
(void)dup2(SlaveFD, 0);
(void)dup2(SlaveFD, 1);
(void)dup2(SlaveFD, 2);
(void)close(SlaveFD);
/* set the LDESHELL variable so the underlying shell initialization can see it and
configure the shell appropriately, though this may not be so important any more */
setenv("LDESHELL", "YES", 1);
if (termtype[0] != 0) { /* set the TERM environment var */
setenv("TERM", termtype, 1);
}
/* Start up shell -- use SHELL environment variable as long as it's in /etc/shells */
shell = getenv("SHELL");
for (userShell = getusershell(); userShell != NULL && strcmp(shell, userShell) != 0; userShell = getusershell());
if (userShell == NULL) {
perror("$(SHELL) not found in /etc/shells");
exit(0);
}
/* argvec entries initialized to NULL */
argvec[0] = strrchr(userShell, '/') + 1;
if (shellarg[0] != 0) { /* setup to run command */
argvec[1] = "-c"; /* read commands from next arg */
argvec[2] = shellarg;
}
execv(userShell, argvec);
/* Should never get here */
perror("execv");
exit(0);
}
/* fork_Unix is the secondary process spawned right after LISP is

View File

@@ -19,6 +19,7 @@
/************************************************************************/
/************************************************************************/
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
@@ -285,7 +286,7 @@ LispPTR parse_atomstring(char *string)
namelen = cnt - 1;
if ((packagelen == 0) || (strncmp(packageptr, "IL", packagelen) == 0)) { /* default IL: */
aindex = make_atom(nameptr, 0, namelen, T);
aindex = make_atom(nameptr, 0, namelen);
if (aindex == 0xffffffff) {
printf("trying IL:\n");
aindex = get_package_atom(nameptr, namelen, "INTERLISP", 9, 0);
@@ -349,6 +350,7 @@ unsigned int uGetTN(unsigned int address) {
LispPTR uraid_commands() {
int num, address, val;
char *endpointer;
LispPTR index;
DefCell *defcell68k;
#ifndef DOS
@@ -383,7 +385,9 @@ LispPTR uraid_commands() {
printf("DUMP-STACK: f decimal-FXnumber\n");
return (T);
}
if (sscanf(URaid_arg1, "%d", &num) <= 0) { /* com read fails */
errno = 0;
num = strtoul(URaid_arg1, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') { /* com read fails */
printf("Illegal argument, not decimal number\n");
return (T);
}
@@ -511,7 +515,9 @@ LispPTR uraid_commands() {
printf("PRINT-INSTANCE: O HEX-LispAddress\n");
return (T);
}
if (sscanf(URaid_arg1, "%x", &objaddr) <= 0) {
errno = 0;
objaddr = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg not HEX number\n");
return (T);
}
@@ -524,7 +530,9 @@ LispPTR uraid_commands() {
}
/**HEXNUMP(URaid_arg1,"Not Address");**/
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
errno = 0;
address = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg not HEX number\n");
return (T);
}
@@ -609,17 +617,21 @@ LispPTR uraid_commands() {
printf("HEX-DUMP: x Xaddress [Xnum]\n");
return (T);
}
if (sscanf(URaid_arg1, "%x", &address) <= 0) { /* arg1 not HEX */
errno = 0;
address = strtoul(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xaddress) not Xaddress\n");
return (T);
}
switch (sscanf(URaid_arg2, "%x", &num)) {
case -1: /* Use defaultval for word-num */ num = XDUMPW; break;
case 0: /* Illegal number */
if (URaid_arg2[0] == '\0') {
num = XDUMPW;
} else {
errno = 0;
num = strtol(URaid_arg2, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xnum) not Xnum\n");
return (T);
/* break; */
default: break;
}
}
if (num < 0) {
printf("Dump words num should be positive\n");
@@ -657,7 +669,9 @@ LispPTR uraid_commands() {
} else if (*URaid_arg2 == 'T')
val = ATOM_T;
else {
if (sscanf(URaid_arg2, "%d", &val) == -1) {
errno = 0;
val = strtol(URaid_arg2, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') {
printf(" Bad value\n");
return (T);
} else {
@@ -691,11 +705,15 @@ LispPTR uraid_commands() {
HEXNUMP(URaid_arg2,"Not Proper Value");
***/
if (sscanf(URaid_arg1, "%x", &address) <= 0) {
errno = 0;
address = strtol(URaid_arg1, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xaddress) not Xaddress\n");
return (T);
}
if (sscanf(URaid_arg2, "%x", &val) <= 0) {
errno = 0;
val = strtol(URaid_arg2, &endpointer, 16);
if (errno != 0 || *endpointer != '\0') {
printf("Arg(Xval) not Xaddress\n");
return (T);
}
@@ -791,13 +809,14 @@ LispPTR uraid_commands() {
case '(':
if (URaid_argnum == 1)
num = 2;
else if ((URaid_arg1[0] < '0') || (URaid_arg1[0] > '9')) {
printf("Illegal argument, not number\n");
return (T);
} else
sscanf(URaid_arg1, "%d", &num);
else {
errno = 0;
num = strtoul(URaid_arg1, &endpointer, 10);
if (errno != 0 || *endpointer != '\0') {
printf("Illegal argument, not number\n");
return (T);
}
}
PrintMaxLevel = num;
printf("PrintLevel is set to %d.", num);
break;

View File

@@ -114,7 +114,7 @@ int c_string_to_lisp_string(char *C, LispPTR Lisp) {
register size_t i;
register char *dp;
for (i = 0, dp = C; i < length + 1; i++) {
int ch = *dp++;
char ch = *dp++;
#ifdef DOS
if (ch == '\\') dp++; /* skip 2nd \ in \\ in C strings */
#endif /* DOS */

View File

@@ -51,6 +51,7 @@
extern DLword *Lisp_world;
extern char Display_Name[128];
extern DLword *DisplayRegion68k;
extern int noscroll;
bool Lisp_Xinitialized = false;
int xsync = False;
@@ -86,15 +87,16 @@ void init_Xevent(DspInterface dsp)
XSelectInput(dsp->display_id, dsp->LispWindow, dsp->EnableEventMask);
XSelectInput(dsp->display_id, dsp->DisplayWindow, dsp->EnableEventMask);
XSelectInput(dsp->display_id, dsp->HorScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->VerScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->HorScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->VerScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->NEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SWGrav, GravMask);
XSelectInput(dsp->display_id, dsp->NWGrav, GravMask);
if (noscroll == 0) {
XSelectInput(dsp->display_id, dsp->HorScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->VerScrollBar, BarMask);
XSelectInput(dsp->display_id, dsp->HorScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->VerScrollButton, NoEventMask);
XSelectInput(dsp->display_id, dsp->NEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SEGrav, GravMask);
XSelectInput(dsp->display_id, dsp->SWGrav, GravMask);
XSelectInput(dsp->display_id, dsp->NWGrav, GravMask);
}
} /*end init_Xevent */
/************************************************************************/
@@ -220,7 +222,7 @@ void Open_Display(DspInterface dsp)
/* */
/*********************************************************************/
DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int height_hint,
DspInterface X_init(DspInterface dsp, LispPTR lispbitmap, int width_hint, int height_hint,
int depth_hint)
{
Screen *Xscreen;
@@ -237,8 +239,13 @@ DspInterface X_init(DspInterface dsp, char *lispbitmap, int width_hint, int heig
Xscreen = ScreenOfDisplay(dsp->display_id, DefaultScreen(dsp->display_id));
/* Set the scrollbar and border widths */
dsp->ScrollBarWidth = SCROLL_WIDTH;
dsp->InternalBorderWidth = DEF_BDRWIDE;
if (noscroll == 0) {
dsp->ScrollBarWidth = SCROLL_WIDTH;
dsp->InternalBorderWidth = DEF_BDRWIDE;
} else {
dsp->ScrollBarWidth = 0;
dsp->InternalBorderWidth = 0;
}
dsp->Visible.x = LispDisplayRequestedX;
dsp->Visible.y = LispDisplayRequestedY;

View File

@@ -58,6 +58,7 @@ Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCur
extern int LispWindowRequestedX, LispWindowRequestedY;
extern unsigned LispWindowRequestedWidth, LispWindowRequestedHeight;
extern int noscroll;
/************************************************************************/
/* */
@@ -187,86 +188,87 @@ void Create_LispWindow(DspInterface dsp)
set_Xcursor(dsp, scrollup_cursor.cuimage, (int)scrollup_cursor.cuhotspotx,
(int)(15 - scrollup_cursor.cuhotspoty), &ScrollUpCursor, 0);
/********************************/
/* Make all the toolkit windows */
/********************************/
dsp->VerScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2,
0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
XMapWindow(dsp->display_id, dsp->VerScrollBar);
if (noscroll == 0) {
/********************************/
/* Make all the toolkit windows */
/********************************/
dsp->VerScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2,
0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->VerScrollBar, &VertScrollCursor);
XMapWindow(dsp->display_id, dsp->VerScrollBar);
dsp->HorScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow,
0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XMapWindow(dsp->display_id, dsp->HorScrollBar);
dsp->HorScrollBar = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow,
0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth, dsp->InternalBorderWidth,
BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
DefineCursor(dsp, dsp->HorScrollBar, &HorizScrollCursor);
XChangeWindowAttributes(dsp->display_id, dsp->HorScrollBar, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XMapWindow(dsp->display_id, dsp->HorScrollBar);
dsp->VerScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->VerScrollBar, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->VerScrollButton);
XMapWindow(dsp->display_id, dsp->VerScrollButton);
dsp->VerScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->VerScrollBar, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1,
dsp->InternalBorderWidth, BlackPixelOfScreen(screen), WhitePixelOfScreen(screen));
XChangeWindowAttributes(dsp->display_id, dsp->VerScrollButton, CWOverrideRedirect,
&Lisp_SetWinAttributes);
XSetWindowBackgroundPixmap(dsp->display_id, dsp->VerScrollButton, dsp->ScrollBarPixmap);
XClearWindow(dsp->display_id, dsp->VerScrollButton);
XMapWindow(dsp->display_id, dsp->VerScrollButton);
dsp->HorScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->HorScrollBar,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width),
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
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);
XClearWindow(dsp->display_id, dsp->HorScrollButton);
XMapWindow(dsp->display_id, dsp->HorScrollButton);
dsp->HorScrollButton = XCreateSimpleWindow(
dsp->display_id, dsp->HorScrollBar,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width),
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1,
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);
XClearWindow(dsp->display_id, dsp->HorScrollButton);
XMapWindow(dsp->display_id, dsp->HorScrollButton);
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row2, GravSize,
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);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NWGrav);
dsp->NWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row2, GravSize,
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);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->NWGrav);
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row3, GravSize,
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);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SEGrav);
dsp->SEGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col3, Row3, GravSize,
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);
XClearWindow(dsp->display_id, dsp->NWGrav);
XMapWindow(dsp->display_id, dsp->SEGrav);
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row3, GravSize,
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, Col3, Row2, GravSize,
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);
XMapWindow(dsp->display_id, dsp->NEGrav);
dsp->SWGrav = XCreateSimpleWindow(dsp->display_id, dsp->LispWindow, Col2, Row3, GravSize,
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, Col3, Row2, GravSize,
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);
XMapWindow(dsp->display_id, dsp->NEGrav);
}
/* DefineCursor( dsp, dsp->DisplayWindow, &WaitCursor ); */
XLOCK;

View File

@@ -11,6 +11,7 @@
#include "version.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -67,6 +68,7 @@ static XrmOptionDescRec opTable[] = {
{"-m", "*memory", XrmoptionSepArg, (XPointer)NULL},
{"-NF", "*NoFork", XrmoptionIsArg, (XPointer)NULL},
{"-NoFork", "*NoFork", XrmoptionIsArg, (XPointer)NULL},
{"-noscroll", "*noscroll", XrmoptionIsArg, (XPointer) NULL},
{"-INIT", "*Init", XrmoptionIsArg, (XPointer)NULL},
{"-EtherNet", "*EtherNet", XrmoptionSepArg, (XPointer)NULL},
{"-E", "*EtherNet", XrmoptionSepArg, (XPointer)NULL},
@@ -84,7 +86,7 @@ char Window_Title[255];
char Icon_Title[255];
extern char sysout_name[];
extern int sysout_size, for_makeinit, please_fork;
extern int sysout_size, for_makeinit, please_fork, noscroll;
/* diagnostic flag for sysout dumping */
/* extern int maxpages; */
@@ -172,8 +174,7 @@ void read_Xoption(int *argc, char *argv[])
}
sysout_name[0] = '\0';
if (*argc == 2) /* There was probably a sysoutarg */
{
if (*argc == 2) { /* There was probably a sysoutarg */
(void)strncpy(sysout_name, argv[1], PATH_MAX - 1);
} else if ((envname = getenv("LDESRCESYSOUT")) != NULL) {
strncpy(sysout_name, envname, PATH_MAX - 1);
@@ -183,8 +184,9 @@ void read_Xoption(int *argc, char *argv[])
envname = getenv("HOME");
(void)strcat(sysout_name, envname);
(void)strcat(sysout_name, "/lisp.virtualmem");
if (access(sysout_name, R_OK) != 0) { (void)strcat(sysout_name, ""); }
}
if (access(sysout_name, R_OK) != 0) {
sysout_name[0] = '\0';
}
/* In order to access other DB's we have to open the main display now */
@@ -277,6 +279,10 @@ void read_Xoption(int *argc, char *argv[])
please_fork = 0;
}
if (XrmGetResource(rDB, "ldex.noscroll", "Ldex.noscroll", str_type, &value) == True) {
noscroll = 1;
}
/* if (XrmGetResource(rDB,
"ldex.maxpages",
"Ldex.maxpages",
@@ -287,7 +293,10 @@ void read_Xoption(int *argc, char *argv[])
*/
if (XrmGetResource(rDB, "ldex.memory", "Ldex.memory", str_type, &value) == True) {
(void)strncpy(tmp, value.addr, (int)value.size);
sysout_size = atoi(tmp);
errno = 0;
i = (int)strtol(tmp, (char **)NULL, 10);
if (errno == 0 && i > 0)
sysout_size = i;
}
if (XrmGetResource(rDB, "ldex.Init", "Ldex.Init", str_type, &value) == True) { for_makeinit = 1; }

View File

@@ -30,7 +30,7 @@ int Mouse_Included = FALSE;
extern Cursor WaitCursor, DefaultCursor, VertScrollCursor, VertThumbCursor, ScrollUpCursor,
ScrollDownCursor, HorizScrollCursor, HorizThumbCursor, ScrollLeftCursor, ScrollRightCursor;
extern int noscroll;
extern DspInterface currentdsp;
extern DLword *EmCursorX68K, *EmCursorY68K;
@@ -109,33 +109,35 @@ static void lisp_Xconfigure(DspInterface dsp, int x, int y, int lspWinWidth, int
XLOCK;
XMoveResizeWindow(dsp->display_id, dsp->DisplayWindow, 0, 0, dsp->Visible.width,
dsp->Visible.height);
/* Scroll bars */
XMoveResizeWindow(dsp->display_id, dsp->VerScrollBar, Col2, 0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height); /* height */
XMoveResizeWindow(dsp->display_id, dsp->HorScrollBar, 0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth); /* height */
if (noscroll == 0) {
/* Scroll bars */
XMoveResizeWindow(dsp->display_id, dsp->VerScrollBar, Col2, 0 - dsp->InternalBorderWidth, /* y */
dsp->ScrollBarWidth, /* width */
dsp->Visible.height); /* height */
XMoveResizeWindow(dsp->display_id, dsp->HorScrollBar, 0 - dsp->InternalBorderWidth, Row2, /* y */
dsp->Visible.width, /* width */
dsp->ScrollBarWidth); /* height */
/* Scroll buttons */
XMoveResizeWindow(
dsp->display_id, dsp->HorScrollButton,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width), /* x */
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1, /* width */
dsp->ScrollBarWidth); /* height */
XMoveResizeWindow(
dsp->display_id, dsp->VerScrollButton, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1); /* height */
/* Scroll buttons */
XMoveResizeWindow(
dsp->display_id, dsp->HorScrollButton,
(int)((dsp->Visible.x * dsp->Visible.width) / dsp->Display.width), /* x */
0 - dsp->InternalBorderWidth, /* y */
(int)((dsp->Visible.width * dsp->Visible.width) / dsp->Display.width) + 1, /* width */
dsp->ScrollBarWidth); /* height */
XMoveResizeWindow(
dsp->display_id, dsp->VerScrollButton, 0 - dsp->InternalBorderWidth, /* x */
(int)((dsp->Visible.y * dsp->Visible.height) / dsp->Display.height), /* y */
dsp->ScrollBarWidth, /* width */
(int)((dsp->Visible.height * dsp->Visible.height) / dsp->Display.height) + 1); /* height */
/* Gravity windows */
XMoveResizeWindow(dsp->display_id, dsp->NWGrav, Col2, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->NEGrav, Col3, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SEGrav, Col3, Row3, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SWGrav, Col2, Row3, GravSize, GravSize);
Scroll(dsp, dsp->Visible.x, dsp->Visible.y);
/* Gravity windows */
XMoveResizeWindow(dsp->display_id, dsp->NWGrav, Col2, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->NEGrav, Col3, Row2, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SEGrav, Col3, Row3, GravSize, GravSize);
XMoveResizeWindow(dsp->display_id, dsp->SWGrav, Col2, Row3, GravSize, GravSize);
Scroll(dsp, dsp->Visible.x, dsp->Visible.y);
}
XFlush(dsp->display_id);
XUNLOCK(dsp);
} /* end lisp_Xconfigure */