mirror of
https://github.com/antoinevignau/source.git
synced 2025-02-08 19:30:33 +00:00
1 line
3.5 KiB
C
Executable File
1 line
3.5 KiB
C
Executable File
/***********************************************************************\
|
|
|
|
Product Number: PROXLIB-01-2.0
|
|
|
|
Version: rev2.0
|
|
|
|
Product Name: Proximity Subroutine Library
|
|
|
|
Filename: proxio.c
|
|
|
|
|
|
This document contains private and confidential information and
|
|
its disclosure does not constitute publication. Some of the
|
|
information herein also may appear in United States and or
|
|
Foreign Patents Pending. All rights are reserved by Proximity
|
|
Technology Inc., except those specifically granted by license.
|
|
|
|
\***********************************************************************/
|
|
|
|
#include <prodos.h>
|
|
#include <stdio.h>
|
|
#include <memory.h>
|
|
#include "proxio.h"
|
|
#include "spdef.h"
|
|
#include "driver.h"
|
|
|
|
/* These are the routines that we use which call standard I/O. Note that
|
|
the functions provided are a small subset of the capability of standard
|
|
I/O, and therefor the programmer may wish to dispense with standard I/O
|
|
and use the system's I/O directly. */
|
|
|
|
|
|
/*
|
|
* take a C string & copy it into a Class 1 string, allocated.
|
|
*/
|
|
char *c2pstr1(src)
|
|
char *src;
|
|
{
|
|
char *dest;
|
|
unsigned size;
|
|
|
|
size = strlen(src); /* 2 bytes for the length & 1 for the trailing null */
|
|
dest = *D_MUSTHANDLE((unsigned long) (size + 3),attrLocked);
|
|
asm {
|
|
bcc gotit
|
|
lda #0xFFFF
|
|
sta dest
|
|
sta dest+2
|
|
bra exit
|
|
}
|
|
gotit:
|
|
strcpy(dest+2,src);
|
|
*(unsigned *) dest = size;
|
|
|
|
exit:
|
|
return dest;
|
|
}
|
|
|
|
|
|
/*
|
|
* take a Class 1 string & copy it into a C string, allocated.
|
|
*
|
|
char *p1str2c(src)
|
|
char *src;
|
|
{
|
|
char *dest
|
|
unsigned size;
|
|
|
|
size = *(unsigned *) src;
|
|
dest = *D_MUSTHANDLE((unsigned long) size+1, attrLocked);
|
|
asm {
|
|
bcc gotit
|
|
lda #0xFFFF
|
|
sta dest
|
|
sta dest+2
|
|
bra exit
|
|
}
|
|
gotit:
|
|
BlockMove(src+2,dest,(unsigned long) size);
|
|
dest[size] = '\0';
|
|
exit:
|
|
return dest;
|
|
}
|
|
*/
|
|
|
|
HANDLE stdopen(name, mode)
|
|
char *name; /* The file name */
|
|
unsigned mode; /* The file mode */
|
|
{
|
|
unsigned refnum;
|
|
char *name1;
|
|
unsigned err;
|
|
|
|
err = 0;
|
|
name1 = c2pstr1(name);
|
|
refnum = D_OPEN2(name1,(mode == H_RDWR) ? READ_ENABLE|WRITE_ENABLE : READ_ENABLE);
|
|
asm { bcc OK }
|
|
err = 0xFFFF;
|
|
|
|
OK:
|
|
D_DISPOSEPTR(name1);
|
|
|
|
if (err)
|
|
return(H_ERROR);
|
|
|
|
return((HANDLE) refnum);
|
|
}
|
|
|
|
/* This create opens too, for convenience */
|
|
|
|
HANDLE stdcreate(name, ftype, atype)
|
|
char *name; /* The file name */
|
|
unsigned ftype;
|
|
long atype;
|
|
{
|
|
char *name1;
|
|
unsigned err;
|
|
|
|
err = 0;
|
|
name1 = c2pstr1(name);
|
|
D_CREATE2(name1,ftype,atype);
|
|
asm { bcc OK }
|
|
err = 0xFFFF;
|
|
OK:
|
|
D_DISPOSEPTR(name1);
|
|
|
|
if (err)
|
|
return(H_ERROR);
|
|
|
|
/* if you're creating it, surely you'll be writing to it */
|
|
return(stdopen(name, H_RDWR));
|
|
}
|
|
|
|
stdclose(file)
|
|
HANDLE file;
|
|
{
|
|
D_CLOSE2((short) file);
|
|
}
|
|
|
|
stdread(ptr, cnt, file)
|
|
char *ptr;
|
|
unsigned cnt;
|
|
HANDLE file;
|
|
{
|
|
return (short) D_READ2((short) file,ptr,(unsigned long) cnt);
|
|
}
|
|
|
|
stdwrite(ptr, cnt, file)
|
|
char *ptr;
|
|
unsigned cnt;
|
|
HANDLE file;
|
|
{
|
|
return (short) D_WRITE2((short) file,ptr,(unsigned long) cnt);
|
|
}
|
|
|
|
stdseek(posn, file)
|
|
long posn;
|
|
HANDLE file;
|
|
{
|
|
MarkRec mrec;
|
|
unsigned err;
|
|
|
|
/* if ... */
|
|
asm {
|
|
phx
|
|
pha
|
|
pei file
|
|
pea #0
|
|
pei posn+2
|
|
pei posn
|
|
jsl >D_SETMARK2
|
|
sta err
|
|
pla
|
|
plx
|
|
bcc exit
|
|
|
|
lda err
|
|
cmp #positionRangeErr
|
|
bne exit
|
|
}
|
|
/* then ... */
|
|
asm {
|
|
phx
|
|
pha
|
|
pei file
|
|
pea #0
|
|
pei posn+2
|
|
pei posn
|
|
jsl >D_SETEOF2
|
|
sta err
|
|
pla
|
|
plx
|
|
|
|
lda err
|
|
bne exit
|
|
|
|
phx
|
|
pha
|
|
pei file
|
|
pea #0
|
|
pei posn+2
|
|
pei posn
|
|
jsl >D_SETMARK2
|
|
sta err
|
|
pla
|
|
plx
|
|
}
|
|
|
|
exit:
|
|
return(err ? ERROR : OKAY);
|
|
}
|
|
|
|
long stdend(file)
|
|
HANDLE file;
|
|
{
|
|
return D_GETEOF2((short) file);
|
|
}
|