jimomura@lsuc.uucp (Jim Omura) (06/20/88)
Many thanks to Bob Barbato for the fix to the 'test.c' program.
Unfortunately, the system call still doesn't seem to be working,
but I'm a step closer. At least I can get down to seeing for
certain that it's not working. :-)
Here's a revised package for those who want to see if they
can find the problem.
Cheers! -- Jim O.
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# ReadMe
# makefile
# gpbmap.a
# test.c
# This archive created:
# By: Jim Omura ()
sed 's/^X//' << \SHAR_EOF > ReadMe
X88/06/20
X
X I tried to create a C library call to control mapping
Xand unmapping of the get/put buffers. It should work.
XFunny thing is, it doesn't. If you can figure out why,
XI'd sure like to know.
X
X This version of the *test* program is working better.
XThe system call still doesn't work though.
X
XCheers! -- Jim O.
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > makefile
X# make.test
XCFILES = test.c
XAFILES = gpbmap.a
XLIB = -l=/dd/lib/cgfx.l -l=/dd/lib/clib.l -l=/dd/lib/sys.l
XCFLAGS = -r
X
Xtest: test.r gpbmap.r
X rlink /dd/lib/cstart.r test.r gpbmap.r $(LIB) -o=/dd/cmds/test
X
Xtest.r: test.c
X cc1 test.c $(CFLAGS)
X
Xgpbmap.r: gpbmap.a
X cc1 gpbmap.a $(CFLAGS)
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > gpbmap.a
X psect gpbmap_c,0,0,0,0,0
X nam gpbmap_c
X* */* gpbmap.c */
X* *
X* */* 1988 By Jim Omura
X* * * Public Domain
X* * */
X* *
X* *int
X* *gpbmap(path,group,buffer,action)
X* *int path;
X* *int group;
X* *int buffer;
X* *int action;
X* * /* Returns -1 on error */
X* *{
X ttl gpbmap
Xgpbmap:
X pshs u
X ldd #_1
X lbsr _stkcheck
X* * path = path;
X* ldd 4,s
X* std 4,s
X* * group = group;
X* ldd 6,s
X* std 6,s
X* * buffer = buffer;
X* ldd 8,s
X* std 8,s
X* * action = action;
X* ldd 10,s
X* std 10,s
X
X* /* Fast Load X register */
X lda 7,s /* Group */
X ldb 9,s /* Buffer */
X exg d,x /* copy it to X */
X
X lda 5,s /* Path */
X ldb #$84 /* SetStt option */
X ldy 10,s /* Action */
X os9 $8e /* I$SetStt */
X bcs errexit
X exg x,d /* Put pointer in D */
X bra cleanexit
Xerrexit
X ldd #-1
Xcleanexit
X* * return();
X puls u,pc
X
X* *}
X_1 equ -64
X
X* *
X endsect
SHAR_EOF
sed 's/^X//' << \SHAR_EOF > test.c
X/* test.c */
X/* tests gpbmap(path,group,buffer,action) */
X
X#include <stdio.h>
X
X#define GRPNUM 5
X#define BUFNUM 1
X
Xchar mkwin[] = { /* Make Dev Window */
X0x1b,0x20,8,0,0,40,24,15,0,0 /* 10 char */
X};
X
Xchar select[] = {
X0x1b,0x21
X};
X
Xchar mkbuf[] = {
X0x1b,0x29,GRPNUM,BUFNUM,0,0x20 /* 6 char. Buffer = 32 bytes */
X};
X
Xchar gpld[] = {
X0x1b,0x2b,GRPNUM,BUFNUM,8,0,16,0,1,0,8 /* 11 bytes */
X};
X
Xchar messg[] = { /* 8 Bytes */
X'H','i',' ','T','h','e','r','e'
X};
X
Xchar kilbuf[] = {
X0x1b,0x2a,GRPNUM,0 /* 4 bytes */
X};
X
Xchar dwend[] = {
X0x1b,0x24
X};
X
Xmain()
X{
X char *buffer;
X int path;
X path = open("/w",3);
X write(path,mkwin,10);
X write(path,select,2);
X write(path,mkbuf,6);
X write(path,gpld,11);
X write(path,messg,8);
X write(path,"Message sent\n",12);
X for(;;)
X {
X if(_gs_rdy(path) > 0)
X {
X break;
X }
X }
X buffer = gpbmap(path,GRPNUM,BUFNUM,1);
X if(buffer = -1)
X {
X fprintf(stderr,"Error\n");
X }
X else
X {
X fprintf(stderr,"BfAdd %1x\n",buffer);
X write(2,buffer,8); /* Write it to STDERR */
X }
X gpbmap(path,GRPNUM,BUFNUM,0); /* Unmap */
X for(;;)
X {
X if(_gs_rdy(path) > 0)
X {
X break;
X }
X }
X write(path,kilbuf,4);
X/* write(path,dwend,2); /* Not Nec. */
X close(path);
X}
X
SHAR_EOF
# End of shell archive
exit 0
--
Jim Omura, 2A King George's Drive, Toronto, (416) 652-3880
ihnp4!utzoo!lsuc!jimomura
Byte Information eXchange: jimomura