/* -*-c,save-*- */ /* * lumisc.c - misc. library functions * Robert Heller. Created: Sun Nov 9, 1986 13:06:12.50 * Last Mod: * * (c) Copyright 1986 by Robert Heller * All Rights Reserved * * */ #include /* STD I/O defs */ #include /* char type defs */ #include "ludef.h" /* ludefs */ #include "luvars.h" /* lu variables */ unsigned short int calcrc(oldcrc,buff,bufflen) FAST unsigned short oldcrc; FAST char *buff; FAST int bufflen; { FAST int i; FAST unsigned short int crc; FAST char ch; crc = oldcrc & 0xFFFF; while (--bufflen >= 0) { ch = *buff++; crc = crc ^ ((((int) ch) << 8) & 0xFF00); for (i = 0; i < 8; ++i) { if (crc & 0x8000) crc = (crc << 1) ^ 0x1021; else crc = crc << 1; } crc &= 0xFFFF; } return (crc & 0xffff); } fmatch(wname,dirname) FAST char *wname, *dirname; { FAST int i, namep; i = 0; namep = TRUE; while (i < 11) { switch (*wname) { case '*': if (namep) { if (*(wname+1) == '.' && i == 8) wname++; else i++; } else return(TRUE); break; case '?': wname++; i++; break; case '.': if (namep) { while (i < 8 && dirname[i] == ' ') i++; wname++; namep = FALSE; } else return(FALSE); break; case '\0': while (i < 11 && dirname[i] == ' ') i++; if (i == 11) return(TRUE); else return(FALSE); default: if (namep) { if (i < 8) { if (toupper(*wname) == dirname[i]) { wname++; i++; } else return(FALSE); } else wname++; } else { if (i < 11) { if (toupper(*wname) == dirname[i]) { wname++; i++; } else return(FALSE); } else wname++; } break; } } return(TRUE); } put_dire() { FAST int i,nbytes,nbytesw; lu_dire[0].lu_crc = 0; #ifdef CRCCHECK lu_dire[0].lu_crc = calcrc(0,&lu_dire[0],lu_slots * sizeof(LUDIR)); #endif #ifdef CPM68K for (i=0;i