fillfcb ;move eCRC CSMLCRCK C LCRCK COM)LCRCK SYM=LIBACC C A ÿ bmove0: mov a,m ora a jz ÿd line to buff lxi h,combuf ; This routine was lifted from CRCK44.ASM and adapted for ; BDS C. To convert to .CRL file do: ; 1. CASM CRC.AAZ (makes a file "CRC.ASM" out of it.) ; 2. ASM CRC.AAZ (makes a .HEX file.) ; 3. DDT CRC.HEX (makes .CRL file - write down size in sectors.) ; 4. SAVE CRC.CRL ; ; 8080 ROUTINE FOR GENERATING A CYCLIC-REDUNDANCY-CHECK. CHARACTER ; LEAVES THAT CHARACTER IN LOCATION 'REM'. BY FRED GUTMAN. FROM ; 'EDN' MAGAZINE, 5 JUNE 1979, PAGE 84. ; maclib bds FUNCTION updcrc push b call ma2toh mov c,a call ma3toh MOV A,H ANI 128 ;Q-BIT MASK PUSH PSW ;SAVE STATUS DAD H ;2 * R(X) mov a,c ;MESSAGE BIT IN 'LSB' ADD L MOV L,A POP PSW JZ QB2 ;IF Q-BIT IS ZERO ; QB: MOV A,H XRI 0A0H ;'MS' HALF OF GENERAL POLYNOMINAL MOV H,A MOV A,L XRI 97H ;'LS' HALF OF GENERAL POLYNOMINAL MOV L,A ; QB2: pop b RET endfunc ERAL POLYNOM/* LCRCK - version 1.2 Checks the "crc" of a library member. The crc value computed by this program is compatible with the one generated by CRCK44. USE: LCRCK COMPILE/LINK: cc1 lcrck nl2 lcrck libacc crc By S. Kluger 01-10-83 Modified 03-20-83 by Gary Novosielski Changed do{}while to while{} to properly handle null members. Removed improper call to erxit. */ #include char curdsk, crc, fcb[36]; char fnam[12], libnam[16], dirbuf[128], *dirp; int fd, j, seccnt, lpc, dirsiz, filsiz; main(argc,argv) int argc; char **argv; { if (argc != 3) { printf("\nLCRCK crck check program for LBR file members.\n"); printf("Compatible with CRCK44.\n"); printf("USAGE: LCRCK \n"); printf("Where: = name of .LBR file and\n"); printf(" = full name of member file.\n"); printf("(Find with LDIR.\n\n"); exit(); } printf("\nLCRCK vers 1.2 03-20-83\n\n"); opnlib(argv[1]); if (fndmem(argv[2]) == ERROR) { printf("\n%s not in LBR file!\n",argv[2]); exit(); } printf("\nMember %s\t\t- ",argv[2]); doit(); } doit() { unsigned sum; sum = 0; dirsiz = filsiz; while(dirsiz) { reload(); j = 127; for (j=0; j<128; j++) { sum = updcrc(dirbuf[j],sum); dirp++; } } printf("CRC = %04x\n",sum); } Ã8à Ã;ÍbÍ¡Ãz¡zÖÃvÃzÕÃÝÃÄùÃEÃüÃÃKÃ]É0°Ãø Í2͵ Ãá^#V#å*~#foÉá^#å*~#foÉá^#V#å*nÉá^#å*nÉá^#V#åë ~#foÉá^#åë& ~#foÉ!È+É!È#É!Ø+É!Ø#É!ð+É!ø+ÉÈÉÈÉØÉØÉðÉøÉ}»À|ºÉëz¼À{½Éë|ºÀ}»Éë|ªòìz·ð7Éë|ªòó|·ð7ÉzõÍZëÍZëÍ)ñ·ð|/g}/o#É|µÈÕå͉ÑÍk|/g}/o#Ñɯ2cÍZëÍZÍk:cÐ|/g}/o#É|·ð/g}/o#:c<2cÉÅÍqÁÉDM!x±ÈxGyOÒƒë)ëÃv|µÈÅÍ”`iÁÉ|·ú )ÖëxõÍÝÚ·Õz/W{/_ѯzW{_ñ=ÈõyOxGæ¯2cÍZëÍZë͉ÃM|ºØÀ}»Éëȯ|g}oÃæëÈ)Ãô|/g}/o#Éz/W{/_É!9~#foÉ!à !à ! à ! à !à !à K!9Å~#ÂAÁÉ!9"q*Ì÷ùÃ*qùÉá"e!cå*"_!è"a!ÜY"C>Û2Y>Ó2\>É2[2^Í>¯2m2n>2l>2p!Ì";!"?!@"=!"A Í·ÊÉÍ!€âF#x·ÂÜÃ:~#Âܯ!âe¯2d~#þ Êó·Ê:þ" 2dà +}|~#·Ê:ÅG:d·xÁÊ.þ"¯2d+w#þ Â+6#ÃóÕ !Ù6#Â@*ë*Íú|µÊ^+¯ÃR¯2i2:*eé!á#"0!#é"2É!ÿÿÉ>õÍÄÚ‹o&åÍ•áñ=þÂ|à Í ÍÄÚv~Í2æÊ·åÍÅ͹ëÍÁáÍ56þÿ!À+ÉWÖØþ ?ØÕ_!Ù~æ7ÑzÈ?ÉÅͤåþ:>ÂôÍ›Ö@w#ÍÍ2þ.Âͯww#w#w#wÑÁÉÅþ*>?Ê=͉Ú;w#ÂÁ͉ØÃ2> w#Â=ÁÉÅåͤͲÒdÕ ÿÍÑ2láÁÃ&ÕÖ0Ox‡‡‡€€�GͲÒgþ/ʃÑÃPáxÃYÍ›þ.7Èþ:7Èþ7Èþ!ÉþaØþ{ÐÖ Éþ Ê¥þ Ê¥Éþ0Øþ:?ÉÅ·OÂá Ù!•æyÂÒÁÉÕ$Ñ ÂÉ7ÁÉÍÄÚÞÖo&))T])))ë!•yÁÉÅåÕõ ÿÍ2kñõæ_ ÍñÑáÁÉÅåÕõ:kÃåÍÑÍÁÉÅ!9ùDMÍ�+++|µÊè!Z åÍÄ Ñ!‹ åÍÄ Ñ!¤ åÍÄ Ñ!Å åÍÄ Ñ!ï åÍÄ Ñ! åÍÄ ÑÍ!8 åÍÄ Ñ! ~#fo##~#foåÍ Ñ! ~#fo~#foåÍÿ Ñ#|µÂ; ! ~#fo~#foå!T åÍÄ ÑÑÍ! ~#fo~#foå!j åÍÄ ÑÑÍz ÁÉ LCRCK crck check program for LBR file members. Compatible with CRCK44. USAGE: LCRCK Where: = name of .LBR file and = full name of member file. (Find with LDIR. LCRCK vers 1.2 03-20-83 %s not in LBR file! Member %s - Å!þÿ9ùDM`i¯w#w*Ô"Ò*Ò|µÊà Í !"Ì!"Ì*Ì€ÿ|ÒÝ Í�å*ÌHn&åͦ ÑÑë`is#r*È#"È*Ì#"ÌÃ¥ ÃŽ Í�å!÷ åÍÄ ÑÑë!9ùëÁÉCRC = %04x Å!ýÿ9ùDMÍ�å!8åÍ ÑÑ!.å!8åÍ+ ÑÑë`is`in}·Â? !¯ å!8åÍÑÑ!8å!åÍÑÑ! å!,å!åÍÑÑÑ!´ å!åÍ<ÑÑ|µÊ… !8å!¸ åÍÄ ÑÑ!À åÍ� Ñ!å!8åÍgÑÑ"Ê*Ê#|µÂ¦ !æ åÍ� Ñë!9ùëÁÉ.LBRLBRgot %s Library type if present must be .LBR Library file not found. Å!Ìÿ9ùDMÍ�8å! åÍÑÑ!å!Hå*ÊåÍÊÑÑÑHë"È*Èn&"Ò*È "È*Èn}þÿÂV !ÿÿÃÿ *Èn}·ÂÖ *È#å`iåÍ ÑÑ! 6! å`iåÍ<ÑÑ|µÂÖ *Ènå*Èn&Í?Ñ"Ô!å*È nå*È n&Í?Ñå*ÊåÍ}ÑÑÑ!Ãÿ *È "È*Èå!ÈÑÍóÒñ Í *Ò|µÂF !ÿÿÃÿ ë!49ùëÁÉÅ!å!Hå*ÊåÍÊÑÑÑHë"È*Ò+"ÒÁÉÅ!þÿ9ùDM`i¯w#w! ~#foåÍ�Ñn}·Ê ! ~#foåÍ�Ñnå! nÑ}»Âs Í�&Ç `i^#Vr+sÃ9 !&Ç ë!9ùëÁÉÅ!9ùDMÍ�åÍÄ ÑÍÁÉÅÍOÍ|æ€õ)y…oñÊ |î g}î—oÁÉÅ!9ùDM!Úå! åÍÜ ÑÑÁÉÅ!hÿ9ùDM!œ ^#Vr+së~#foë! s#rÍ�œë!– s#r! ^#Vr+sënë`is{·Êø`in}þ%ÂÉ! ë!� s#r!” 6#6!‘ s!� s!� sÍ�n}þ-Âl! ^#Vr+s!� 4Í�n}þ0Â|!‘ 4Í�n&åÍXÑ}·Ê™! åÍ£ÑÜ!ë!’ s#r! ^#Vr+sënë`is{þ.Âä! åÍ£Ñë!” s#r!� 4! ^#Vr+sënë`is`in&åÍhÑ}þDÊþUÊLþXÊUþOÊ^þCʤþSÊÕÚÍ�–~#fo|ÒL!� ^#Vr+së6-Í�–åÍ�–~#foÍúëás#r!’ ^#Vr+s! 6 Ãd! 6Ãd! 6!’ å~#foå! n&å!– ^#Vr+së~#foå!� åÍÑÑÑѯgÍúëás#rÃM!� ^#Vr+sÕ!– ^#Vr+së~#foëás!’ ^#Vr+sÃM!� n}·Âè!” 6È#6!– ^#Vr+së~#foë! s#rÍ�n}·ÊMÍ�”|µÊM!� ^#Vr+sÕ! ^#Vr+sënëás!” ^#Vr+s!’ ^#Vr+sÃÍ��6! ë!� s#r!‘ n}·Ê«Í��n}þ-«Í�žåÍ� å!� ^#Vr+sën&å!œå!9~#foéÑÑÑ#|µÂ«!ÿÿÃø!� n}·Â!’ ^#Vr+s!ÿÿ|ÚÍ�žåÍ� å!‘ n}·Êä!0Ãç! å!õå!9~#foéÑÑÑ#|µÂ!ÿÿÃøõÍ��n}·ÊKÍ�žåÍ� å!� ^#Vr+sën&å!9å!9~#foéÑÑÑ#|µÂH!ÿÿÃøÃ!� n}·Ê—!’ ^#Vr+s!ÿÿ|Ú—Í�žåÍ� å! å!…å!9~#foéÑÑÑ#|µÂ”!ÿÿÃøÃUÃÆÍ�žåÍ� å`in&å!·å!9~#foéÑÑÑ#|µÂÆ!ÿÿÃøÃõÍ�žåÍ� å`in&å!æå!9~#foéÑÑÑ#|µÂõ!ÿÿÃøà ë!˜9ùëÁÉÅ!ÿÿ9ùDMÍ�åÍ� ÑÍìÒOÍ�^#Vr+sÕÍ�öÿÚ<Í�0ÃDÍ�7ëás!&ÚÍ� åÍ�åÍ� Ñ͉åÍ�åÍÑÑÑë`isÍ� åÍ�åÍ� ÑÍ)åÍ�åÍÑÑÑ`in&#&Úë!9ùëÁÉÅ!þÿ9ùDM`i¯w#wÍ�~#fon&åÍXÑ}·ÊðÍ� Í?åÍ�^#Vr+sënѯgÐÿë`is#rñÍ�Ã÷ë!9ùëÁÉà Í7Å*Më*KÍ&!ÁÉÍ7*O|µÈÅDM*Më*KÍÝÚE><ê9í°ÁÉ~# x±Â9ÁÉ ë ë><êUí¸ÁÉ~+ x±ÂUÁÉ|ºÀ}»ÉÍ7¯Í,Òv> Ã2cë*KëÅÍ/:lÍ2ÍþÿÁ> ÊÁ:cÍ):M·ʲ=ʲ=> ÂÁ:l‚w:co&Í5ÉÍ52:ÃÍ7:KÍ)V>Úwzæ>ÊwÅzÍ2:KÍ,"e!"g*O|µ*gÂÍ5å€ÍáÁÉ*MëÍ*eë!ÕÍÑ·Ê@2:þÊ:þÊ:!ÿÿÃ*gÃ*O+"O*M€"M*g#"g*e! N#Fp+qx±Âõ##6>2:Ãú2:ÃÍ7Å:KÍ,>Ò“2:ÁÃåÍÒ*M:O·ÊÆ=©ÃÆ:KÍ)~Í2ÑÕ#ÍÍ5áåÍÒ*Mã!Ñs#rëÁÉ!^#VÉÍ Åþ Âî Í> _Í Í·ÂýÁÉÍþÊ ÁÉÍ7*Kë*M~#·Â*KÉÍ7*Më*K~#·Â)+w#·Â0*KÉÍ7*Kë*M¾ÂU#·ÂF!É–gÉ!9~!þ0Øþ:Ð,É!9~o&þaØþ{Ðæ_oÉ08A1 MAIN 0A7A DOIT 0B03 OPNLIB 0BFF FNDMEM 0D08 RELOAD 0D2B MATCHR 0D90 ERXIT 0DA6 UPDCRC 0DC4 PRINTF 0DDC _SPR 1201 _USPR 12A3 _GV2 1300 EXIT 1303 SETFCB 1316 MOVMEM 1367 OPEN 13CA READ 147D SEEK 14DA PUTCHAR 1509 STRCPY 151F STRCAT 153C STRCMP 1558 ISDIGIT 1568 TOUPPER Link statistics: Number of functions: 24 Code ends at: 0x1579 Externals begin at: 0x1600 Externals end at: 0x16D6 Jump table bytes saved: 0x84 Warmboot supressed, Rst 6 not trapped /* LIBACC - LIBrary file ACCess routines Lifted from LMODM10.C by Bill Earnest S. Kluger 01-10-83 */ #include char curdsk, crc, fcb[36]; char fnam[12], libnam[16], dirbuf[128], *dirp; int fd, j, seccnt, lpc, dirsiz, filsiz; opnlib(file) char *file; { char l, *npnt; strcpy(libnam,file); l = matchr(libnam,'.'); if (l == 0) strcat(libnam, ".LBR"); setfcb(fcb,libnam); /* build name in fcb */ movmem(fcb,fnam,12); /* get from dfcb2 for log */ if(strcmp(fcb+9, "LBR")){ printf("got %s\n",libnam); erxit("Invalid file spec, MUST be type .LBR\n"); } fd = open(libnam,0); if(fd == -1) erxit("Library file not found.\n"); npnt = fcbaddr(fd); if(npnt[1] > 127) erxit("File not for distribution.\n"); } fndmem(file) char *file; { char dnam[16], fname[36]; setfcb(fname, file); read(fd,dirbuf,1); dirp = dirbuf; dirsiz = *(dirp+14); dirp += 32; do{ if (*dirp == 255) return(ERROR); if (*dirp == 0){ strcpy(dnam, dirp+1); dnam[11]=0; if(strcmp(dnam, fname+1) == 0){ filsiz = (*(dirp+14)) + ((*(dirp+15)) * 256); seek(fd,(*(dirp+12)) + ((*(dirp+13)) * 256),0); return(OK); } } dirp += 32; if(dirp > dirbuf+128) reload(); } while(dirsiz); return(ERROR); } reload() { read (fd,dirbuf,1); dirp = dirbuf; dirsiz--; } char matchr(st,ch) char *st,ch; { int i; for(i=0; st[i]; i++){ if(st[i] == ch) return(i); } return(0); } erxit(strg) char *strg; { printf(strg); exit(); } ; st[i]; i++){ if(st[i] == ch) return(i); } return(0); } erxit(strg) char *strg; { printf(strg); exit(); }