home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
239.lha
/
amiga
/
src
/
server
/
sprint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-05-02
|
1KB
|
84 lines
/*
* SPRINT.C
*
* DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
*
* PRINTER SERVER
*
* Accepting one connection at a time, dump the file to PRT:
*
* DNET_WRITE must be 6 or higher for this function to work.
*/
#include <stdio.h>
#include <fcntl.h>
#include "servers.h"
int Enable_Abort;
typedef struct Process PROC;
extern struct MsgPort *DListen();
extern PROC *FindTask();
extern void printfile();
_main()
{
struct MsgPort *port;
PROC *myproc = FindTask(NULL);
long chan;
long savedir;
long mask, rmask;
Enable_Abort = 0;
if (myproc->pr_CLI) {
Version("SPrint", VERSION, SPRINT_VERSION);
_exit(0);
}
port = DListen(PORT_PRINTER);
WaitPort(&myproc->pr_MsgPort);
ReplyMsg(GetMsg(&myproc->pr_MsgPort));
mask = SIGBREAKF_CTRL_C|(1 << port->mp_SigBit);
for (;;) {
rmask = Wait(mask);
if (rmask & SIGBREAKF_CTRL_C)
break;
while (chan = DAccept(port)) {
if (GetEnvVal(DNET_WRITE) >= 6) {
DWrite(chan, "Accepted\n", 9);
printfile(chan);
} else {
DWrite(chan, "Permission Denied\n", 18);
}
DClose(chan);
}
}
DUnListen(port);
}
void
printfile(chan)
{
long n, fh;
char rc = 0;
char buf[256];
if (fh = Open("PRT:", 1006)) {
rc = 1;
while ((n = DRead(chan, buf, 256)) > 0) {
if (Write(fh, buf, n) != n) {
rc = 0;
break;
}
}
Close(fh);
}
DWrite(chan, &rc, 1);
}