Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

179 lines
5.4 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#define VN "\nSPEED 1.0 02/17/83"
/* This utility sets the baud rate speed for each of the physical
devices. */
#include <LIBRARY.H>
struct _ct ct_pdev[MAXPDEV + 2]; /* physical device table */
/* hardware specific items */
/* baud rates for serial ports */
#define B300 0x35 /* 300 baud */
#define B600 0x36 /* 600 baud */
#define B1200 0x37 /* 1200 baud */
#define B2400 0x3A /* 2400 baud */
#define B4800 0x3C /* 4800 baud */
#define B9600 0x3E /* 9600 baud */
#define B19200 0x3F /* 19200 baud */
struct _ct ct_br[10]; /* code table for baud rates (+ spare entries) */
/* parameters on the command line */
#define PDEV argv[1] /* physical device */
#define BAUD argv[2] /* baud rate */
main(argc,argv)
int argc;
char *argv[];
{
printf(VN); /* display sign on message */
setup(); /* setup code tables */
chk_use(argc); /* check correct usage */
/* check if request to show current settings */
if (usstrcmp("SHOW",argv[1]))
{ /* No, assume setting is required */
set_baud(get_pdev(PDEV),get_baud(BAUD)); /* set baud rate */
}
show_baud(); /* display current settings */
} /* end of program */
setup() /* setup the code tables for this program */
{
/* initialize the physical device table */
ct_init(ct_pdev[0],T_DEVN,PN_T); /* terminal */
ct_init(ct_pdev[1],P_DEVN,PN_P); /* printer */
ct_init(ct_pdev[2],M_DEVN,PN_M); /* modem */
ct_init(ct_pdev[3],CT_SNF,"*"); /* terminator */
/* initialize the baud rate table */
ct_init(ct_br[0],B300,"300");
ct_init(ct_br[1],B600,"600");
ct_init(ct_br[2],B1200,"1200");
ct_init(ct_br[3],B2400,"2400");
ct_init(ct_br[4],B4800,"4800");
ct_init(ct_br[5],B9600,"9600");
ct_init(ct_br[6],B19200,"19200");
ct_init(ct_br[7],CT_SNF,"*"); /* terminator */
}
unsigned
get_pdev(ppdev) /* get physical device */
/* This function returns the physical device code
specified by the user in the command line. */
char *ppdev; /* pointer to character string */
{
unsigned retval; /* return value */
retval = ct_parc(ct_pdev,ppdev); /* get code for ASCII string */
if (retval == CT_SNF) /* if string not found */
{
printf("\n\007Physical Device '%s' is invalid or ambiguous.",
ppdev);
printf("\nLegal Physical Devices are : ");
ct_disps(ct_pdev); /* display all values */
exit();
}
return retval; /* return code */
}
unsigned
get_baud(pbaud)
/* This function returns the baud rate time constant
for baud rate specified by the user in the command line. */
char *pbaud; /* pointer to character string */
{
unsigned retval; /* return value */
retval = ct_parc(ct_br,pbaud); /* get code for ASCII string */
if (retval == CT_SNF) /* if string not found */
{
printf("\n\007Baud Rate '%s' is invalid or ambiguous.",
pbaud);
printf("\nLegal Baud Rates are : ");
ct_disps(ct_br); /* display all values */
exit();
}
return retval; /* return code */
}
set_baud(pdevc,baudc) /* set the baud rate of the specified device */
int pdevc; /* physical device code */
short baudc; /* baud rate code */
/* on some systems this may have to be a
two-byte (unsigned) value. */
{
short *baud_rc; /* pointer to the baud rate constant */
/* on some systems this may have to be a
two-byte (unsigned) value. */
/* Note : the respective codes for accessing the baud rate constants
via the get_cba (get configuration block address) function are:
Device #0 = 19, #1 = 21, #2 = 23. This function uses this
mathematical relationship. */
/* setup pointer to the baud rate constant */
baud_rc = get_cba(CB_D0_BRC + (pdevc << 1));
/* then set the baud rate constant */
*baud_rc = baudc;
/* then call the BIOS initialization routine */
bios(CIOINIT,pdevc);
}
show_baud() /* show current baud rate */
{
int pdevn; /* physical device number */
short baudc; /* baud rate code */
/* on some systems this may have to be a
two-byte (unsigned) value. */
short *baud_rc; /* pointer to the baud rate constant */
/* on some systems this may have to be a
two-byte (unsigned) value. */
/* Note : the respective codes for accessing the baud rate constants
via the get_cba (get configuration block address) function are:
Device #0 = 19, #1 = 21, #2 = 23. This function uses this
mathematical relationship. */
printf("\nCurrent Baud Rate settings are :");
for (pdevn = 0; pdevn <= MAXPDEV; pdevn ++) /* all physical devices */
{
/* setup pointer to the baud rate constant -
the code for the get_cba function is computed
by adding the physical device number *2 to
the Baud Rate code for device #0 */
baud_rc = get_cba(CB_D0_BRC + (pdevn << 1));
/* then set the baud rate constant */
baudc = *baud_rc;
printf("\n\t%s set to %s baud.",
ct_strc(ct_pdev,pdevn), /* get ptr to device name */
ct_strc(ct_br,baudc) ); /* get ptr to baud rate */
}
}
chk_use(argc) /* check correct usage */
int argc; /* argument count */
{
if (argc == 1)
{
printf("\nThe SPEED utility sets the baud rate speed for each physical device.");
printf("\nUsage is : SPEED physical-device baud-rate, or");
printf("\n SPEED SHOW (to show current settings)");
printf("\n\nValid physical devices are: ");
ct_disps(ct_pdev);
printf("\nValid baud rates are: ");
ct_disps(ct_br);
exit();
}
}