cpm commands
This commit is contained in:
parent
82dc94f76a
commit
edd57db334
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* blk_no_hdl.c
|
||||||
|
* Behandlung der im Directory enthaltenen Blocknummern
|
||||||
|
* es werden zur Zeit 2 verschiedene Addressformate unterstuetzt
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "cpmio.h"
|
||||||
|
#include "cpmfio.h"
|
||||||
|
|
||||||
|
extern int flp_fmt;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getblno
|
||||||
|
* bereitstellen der naechsten Blocknummer aus dem Directory
|
||||||
|
*/
|
||||||
|
getblno( fptr )
|
||||||
|
C_FILE *fptr;
|
||||||
|
{
|
||||||
|
int blockno;
|
||||||
|
int *blp;
|
||||||
|
|
||||||
|
if( fptr->c_blk == 16 )
|
||||||
|
return( EOF );
|
||||||
|
switch( flp_fmt ) {
|
||||||
|
case 1: /* 8 bit Blockaddressen */
|
||||||
|
blockno = fptr->c_dirp->pointers[ fptr->c_blk++ ] &0xff;
|
||||||
|
break;
|
||||||
|
case 2: /* 16 bit Blockaddressen */
|
||||||
|
blp = ( int * )&(fptr->c_dirp->pointers[ fptr->c_blk ] );
|
||||||
|
fptr->c_blk += 2;
|
||||||
|
#ifdef p8000
|
||||||
|
blockno = *blp;
|
||||||
|
blockno = numswab( blockno );
|
||||||
|
#else
|
||||||
|
blockno = *blp;
|
||||||
|
#endif p8000
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf( stderr, "getblno: unknown addressformat %d\n",
|
||||||
|
flp_fmt );
|
||||||
|
exit( 1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf( stderr, "getblno: block = %d\n", blockno );
|
||||||
|
#endif
|
||||||
|
return( blockno );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* putblno
|
||||||
|
* eintragen der naechsten Blocknummer in das Verzeichniss
|
||||||
|
*/
|
||||||
|
putblno( fptr, block )
|
||||||
|
C_FILE *fptr;
|
||||||
|
int block;
|
||||||
|
{
|
||||||
|
int *blp;
|
||||||
|
|
||||||
|
if( fptr->c_blk == 16 )
|
||||||
|
return( EOF );
|
||||||
|
switch( flp_fmt ) {
|
||||||
|
case 1: /* 8 Bit Blockaddressen */
|
||||||
|
fptr->c_dirp->pointers[ fptr->c_blk ] = block & 0xff;
|
||||||
|
fptr->c_blk++;
|
||||||
|
break;
|
||||||
|
case 2: /* 16 Bit Blockaddressen */
|
||||||
|
blp = ( int * )&(fptr->c_dirp->pointers[ fptr->c_blk ] );
|
||||||
|
#ifdef p8000
|
||||||
|
*blp = numswab( block );
|
||||||
|
#else
|
||||||
|
*blp = block;
|
||||||
|
#endif p8000
|
||||||
|
fptr->c_blk += 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf( stderr, "putblno: unknown addressformat %d\n",
|
||||||
|
flp_fmt );
|
||||||
|
exit( 1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf( stderr, "putblno: block = %d\n", block );
|
||||||
|
#endif
|
||||||
|
return( block );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* extblno
|
||||||
|
* liefert blocknummern fuer build_bmap
|
||||||
|
*/
|
||||||
|
|
||||||
|
extblno( pointer, ind )
|
||||||
|
char pointer[];
|
||||||
|
int ind;
|
||||||
|
{
|
||||||
|
int *blp;
|
||||||
|
int blk;
|
||||||
|
|
||||||
|
switch( flp_fmt ) {
|
||||||
|
case 1:
|
||||||
|
return( pointer[ind] & 0xff );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
blp = ( int * )&pointer[ind];
|
||||||
|
#ifdef p8000
|
||||||
|
blk = *blp;
|
||||||
|
blk = numswab( blk );
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf( stderr, "extblno: block = %d\n", blk );
|
||||||
|
#endif DEBUG
|
||||||
|
return( blk );
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG
|
||||||
|
fprintf( stderr, "extblno: block = %d\n", blk );
|
||||||
|
#endif DEBUG
|
||||||
|
return( *blp );
|
||||||
|
#endif p8000
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fprintf( stderr, "extblno: unknown addressformat %d\n",
|
||||||
|
flp_fmt );
|
||||||
|
exit( 1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef p8000
|
||||||
|
numswab( in )
|
||||||
|
int in;
|
||||||
|
{
|
||||||
|
char *ip, *op;
|
||||||
|
int out;
|
||||||
|
|
||||||
|
ip = ( char * ) ∈
|
||||||
|
op = ( char * ) &out;
|
||||||
|
op[1] = ip[0] & 0xff;
|
||||||
|
op[0] = ip[1] & 0xff;
|
||||||
|
return( out );
|
||||||
|
}
|
||||||
|
#endif p8000
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
/* cfillbuf.c 1.6 83/05/13 */
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "cpmio.h"
|
||||||
|
#include "cpmfio.h"
|
||||||
|
|
||||||
|
c_fillbuf(fptr)
|
||||||
|
register C_FILE *fptr;
|
||||||
|
{
|
||||||
|
|
||||||
|
int getnext(), nsect;
|
||||||
|
int block;
|
||||||
|
|
||||||
|
if ( ( block = getblno( fptr ) ) == EOF )
|
||||||
|
if (fptr->c_dirp->blkcnt == (char) 0x80) {
|
||||||
|
/* find next extent (if it exists) */
|
||||||
|
if (getnext(fptr) == NULL)
|
||||||
|
return (EOF);
|
||||||
|
if ((block = getblno(fptr)) == EOF)
|
||||||
|
return(EOF); /* Hahn */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return (EOF);
|
||||||
|
nsect = (fptr->c_seccnt>blksiz/128) ? blksiz/128 : fptr->c_seccnt;
|
||||||
|
if (nsect == 0)
|
||||||
|
return (EOF);
|
||||||
|
fptr->c_seccnt -= nsect;
|
||||||
|
if (getblock( block, fptr->c_base, nsect) == EOF)
|
||||||
|
return (EOF);
|
||||||
|
fptr->c_buf = fptr->c_base;
|
||||||
|
fptr->c_cnt = nsect*128 -1;
|
||||||
|
return (*fptr->c_buf++&0xff);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue