cpm commands

This commit is contained in:
Oliver Lehmann 1988-08-01 11:40:08 +00:00
parent 63f58eade9
commit 6e397f8bdf
2 changed files with 173 additions and 0 deletions

View File

@ -0,0 +1,152 @@
/* cmdhdl.c 1.10 83/07/27 */
#include <ctype.h>
#include <stdio.h>
#include "cpmio.h"
#define HELPFILE "/usr/new/lib/cpm.hlp"
/*
* Write prompt to stdout.
* Read command from stdin.
* return the number of characters read.
*/
cmdinp(cmd)
char cmd[];
{
int cnt = 0;
while (cnt == 0) {
printf("cpm> ");
while((cmd[cnt++] = getchar()) != '\n')
;
cmd[--cnt] = '\0';
}
return (cnt);
}
/*
* Compare the command pointed to by cmd to the table of defined
* commands in defcmd, return the command index if found, null
* otherwise.
*/
struct command {
char *cmd;
int lth, abbr;
} defcmd[] = {
"directory", 9, 1, /* 1 */
"rename", 6, 1, /* 2 */
"copyin", 6, 0, /* 3 */
"delete", 6, 1, /* 4 */
"erase", 5, 1, /* 5 */
"exit", 4, 1, /* 6 */
"type", 4, 1, /* 7 */
"help", 4, 1, /* 8 */
"ls ", 2, 0, /* 9 */
"logout", 6, 1, /* 10 */
"ccopyin", 7, 0, /* 11 */
"ccopyout", 8, 0, /* 12 */
"copyout", 7, 0, /* 13 */
"dump", 4, 1, /* 14 */
"! ", 1, 0, /* 15 */
"disk", 4, 0, /* 16 */
"!! ", 2, 0, /* 17 */
'\0' , 0 };
chkcmd(cmd)
char *cmd;
{
int index, len;
len = strlen(cmd);
for (index=0; *defcmd[index].cmd != '\0' ; index++) {
if ((len == 3) && defcmd[index].abbr) {
if (strncmp(defcmd[index].cmd, cmd, 3) == 0)
goto ok;
} else {
if (strncmp(defcmd[index].cmd, cmd, defcmd[index].lth)
== 0)
goto ok;
}
}
return (0);
ok:
if (len > defcmd[index].lth)
return (0);
else
return (++index);
}
help()
{
FILE *fd, *fopen();
int c;
if ((fd = fopen(HELPFILE, "r")) == NULL)
printf("Can't find help file (cpm.hlp) \n");
else
while ( (c = getc(fd)) != EOF)
putchar(c);
}
/*
* Separate fname into name and extension, return NULL if
* bad file name, otherwise 1.
*/
namesep(fname, name, ext)
char fname[], name[], ext[];
{
int i = 0;
strncpy(name, " ", 9);
strncpy(ext, " ", 4);
while(i<8 && !(iscntrl(fname[i])) && fname[i] != '.') {
name[i] = fname[i];
i++;
}
#ifdef DEBUG
printf("namesep: name=%s, len=%d ", name, i);
#endif
clean(name, 8);
if (fname[i] == '.') {
strncpy(ext, fname+i+1, 3);
clean(ext, 3);
} else {
if (fname[i] != ' ' && fname[i] != '\0') {
fprintf(stderr, "Illegal filename\n");
return (NULL);
}
}
#ifdef DEBUG
printf("name: %s, ext: %s\n", name, ext);
#endif
if (!(isalnum(name[0]))) {
fprintf(stderr, "Illegal filename\n");
return(NULL);
}
return(1);
}
clean(str, len)
char str[];
int len;
{
str[len] = '\0';
while (len-- > 0) {
if (!(isspace(str[len])) && !(iscntrl(str[len]))) break;
str[len] = ' ';
}
while (len >= 0) {
str[len] = islower(str[len]) ? toupper(str[len]):str[len] ;
len--;
}
}

View File

@ -0,0 +1,21 @@
#include <stdio.h>
#include "cpmio.h"
extern int flp_fmt;
extern int n_systrk;
disk()
{
int i;
printf("\n Disk status information:\n");
printf("\tblocksize %d\t\ttracks %d (%d system)\n",
blksiz, tracks, n_systrk);
i = maxdir * 32;
i /= 1024;
printf("\tdirectory entrys %d (%d K)\n",
maxdir,i);
printf ("\t%d sectors per track\n",
sectrk);
printf("\tsectorlength %d\n",
seclth);
printf("\tsectors/group:\t%d\t%d\n",
16/flp_fmt, flp_fmt);
}