[comp.sys.m6809] gpbmap.shar

@lsuc.uucp () (06/19/88)

     I have been trying to post to comp.os.os9, but I keep
having my messages bounced, so I'll keep posting here for
now.

     Anyway, this is a strange posting.  You see, this is
a C library addition, but it doesn't seem to work.  I don't
see anything wrong with it though, and it seems that the
Get/Put Buffer system may be flakey.  So this program may
just be right as is.  If you see anything wrong with it,
please let me know.

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 ()
cat << \SHAR_EOF > ReadMe
88/06/18
     I tried to create a C library call to control mapping
and unmapping of the get/put buffers.  It should work.
Funny thing is, it doesn't.  If you can figure out why,
I'd sure like to know.
SHAR_EOF
cat << \SHAR_EOF > makefile
# make.test
CFILES = test.c
AFILES = gpbmap.a
LIB = -l=/dd/lib/cgfx.l -l=/dd/lib/clib.l -l=/dd/lib/sys.l
CFLAGS = -r

test: test.r gpbmap.r
  rlink /dd/lib/cstart.r test.r gpbmap.r $(LIB) -o=/dd/cmds/test

test.r: test.c
  cc1 test.c $(CFLAGS)

gpbmap.r: gpbmap.a
  cc1 gpbmap.a $(CFLAGS)
SHAR_EOF
cat << \SHAR_EOF > gpbmap.a
 psect gpbmap_c,0,0,0,0,0
 nam gpbmap_c
* */* gpbmap.c */
* *
* */* 1988 By Jim Omura
* * * Public Domain
* * */
* *
* *int
* *gpbmap(path,group,buffer,action)
* *int path;
* *int group;
* *int buffer;
* *int action;
* * /* Returns -1 on error */
* *{
 ttl gpbmap
gpbmap:
 pshs u
 ldd #_1
 lbsr _stkcheck
* *    path = path;
* ldd 4,s
* std 4,s
* *    group = group;
* ldd 6,s
* std 6,s
* *    buffer = buffer;
* ldd 8,s
* std 8,s
* *    action = action;
* ldd 10,s
* std 10,s

* /* Fast Load X register */
 lda 7,s      /* Group */
 ldb 9,s      /* Buffer */
 exg d,x      /* copy it to X */

 lda 5,s      /* Path */
 ldb #$84     /* SetStt option */
 ldy 10,s     /* Action */
 os9 $8e      /* I$SetStt */
 bcs errexit
 exg x,d      /* Put pointer in D */
 bra cleanexit
errexit
 ldd #-1
cleanexit
* *    return();
 puls u,pc

* *}
_1 equ -64

* *
 endsect
SHAR_EOF
cat << \SHAR_EOF > test.c
/* test.c */
/* tests gpbmap(path,group,buffer,action) */

#include <stdio.h>

char mkwin[] = { /* Make Dev Window */
0x1b,0x20,8,0,0,40,24,15,0,0 /* 10 char */
};

char select[] = {
0x1b,0x21
};

char mkbuf[] = {
0x1b,0x29,5,1,0,0x20 /* 6 char.  Buffer = 32 bytes */
};

char gpld[] = {
0x1b,0x2b,5,1,2,0,8,0,1,0,8 /* 11 bytes */
};

char messg[] = {  /* 8 Bytes */
'H','i',' ','T','h','e','r','e'
};

char kilbuf[] = {
0x1b,0x2a,5,0 /* 4 bytes */
};

char dwend[] = {
0x1b,0x24
};

main()
{
    char *buffer;
    int path;
    path = open("/w",3);
    write(path,mkwin,10);
    write(path,select,2);
    write(path,mkbuf,6);
    write(path,gpld,11);
    write(path,messg,8);
    buffer = gpbmap(path,5,1,1);
    if(buffer = -1)
    {
        fprintf(stderr,"Error\n");
    }
    else
    {
        write(2,buffer,8); /* Write it to STDERR */
    }
    gpbmap(path,5,1,0); /* Unmap */
    for(;;)
    {
        if(_gs_rdy(path) > 0);
        {
            break;
        }
    }
    write(path,kilbuf,4);
/*    write(path,dwend,2); /* Not Nec. */
    close(path);
}

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