File: CHECK.PA of Tape: Sources/Other/new-16
(Source file text)
/ QUICK & NASTY PROGRAM TO CALCULATE FILE CHECKSUMS / A.WINDRAM 9-FEB-79 / / CHECK ACCEPTS A LIST OF UP TO 5 FILES AT A TIME, / AND CALCULATES A BINARY LOADER TYPE CHECKSUM FOR EACH ONE / / .R PAL8 / *CHECK(L89P)=12000$ / .SAVE DSK CHECK / /*********************************************************************** IBUF=0 / INPUT BUFFER STARTS AT 00000 MAXB=16 / & IS 14 BLOCKS LONG / TEMPORARIES IN USR AREA IFTPTR=20 NFILE=21 TM=22 CSUM=23 CTR=24 OCNM=25 FIELD 1 / TO MAKE CALLING USR EASY *2000 / LEAVE 10000-11777 FOR USR START, NOP / IN CASE OF CHAIN START ?? JMS I (7700 / LOCK IN USR 10 JMP FCALL / CALL COMMAND DECODER IN SPECIAL MODE / TO ALLOW FILE LENGTHS > 255 BLOCKS CALLCD, JMS TXOUT CRLF FCALL, JMS I (200 5 5200 / SPECIAL MODE DCA NFILE / ZERO FILE NO TAD (7605 / 1ST INPUT FILE STARTS AT 17605 / OPEN NEXT INPUT FILE NXIF, DCA IFTPTR TAD (7201 DCA IFHA / HANDLER GOES IN 7200-7577 ISZ NFILE TAD I IFTPTR SNA JMP CKND / NO FILES LEFT ; CHECK FOR ALTMODE / FETCH HANDLER JMS I (200 1 IFHA, 0 / BECOMES HANDLER ENTRY POINT HLT / WHAT !! / LOOKUP INPUT FILE IAC TAD IFTPTR DCA IFSB / SET FILENAME POINTER TAD I IFTPTR / GET DEVICE NO JMS I (200 2 / LOOKUP IFSB, 0 / BECOMES START BLOCK IFML, 0 / BECOMES - LENGTH OF FILE JMP ER1 / FAIL / SET UP INPUT ROUTINE TAD IFSB DCA NXIB / FIRST BLOCK TO GET DCA CSUM / ZERO CHECKSUM / READ ANOTHER BUFFER FULL TAD IFML NXBF, TAD (MAXB SMA / **** ONLY WORKS FOR LENGTH < 2048 BLOCKS *** JMP .+4 DCA IFML / NOT YET END OF FILE TAD (MAXB JMP SETL CLA / END OF FILE TAD IFML CIA DCA TM / SAVE LENGTH TO DO DCA IFML / NO MORE IN FILE TAD TM SETL, CLL RTR / SET FUNCTION WORD FOR READ RTR RTR DCA RFW CIF 0 JMS I IFHA / CALL INPUT HANDLER RFW, 0 / READ N BLOCKS TO FIELD 0 AIBUF, IBUF / ADDRESS OF BUFFER NXIB, 0 / FROM THIS BLOCK ON JMP ER2 TAD NXIB TAD (MAXB DCA NXIB / UPDATE NEXT BLOCK NO / DO CHECKSUM ON THIS BUFFER TAD RFW / ** I HOPE IT'S FIELD 0 ** CLL RAL / *2 = NO OF WORDS CIA DCA CTR CMA TAD AIBUF DCA 17 / USE AIX FOR SPEED CDF 0 TAD I 17 TAD CSUM DCA CSUM ISZ CTR JMP .-4 CDF 10 / DONE THIS FILE YET ? TAD IFML SZA JMP NXBF / YES ; PRINT CHECKSUM MESSAGE JMS PFN / PRINT "FILE" NO JMS TXOUT CKSM2 TAD CSUM JMS OCTOUT DONEF, TAD (5 TAD IFTPTR JMP NXIF / DONE INPUT FILES ; DO MORE ? CKND, TAD I (7642 SMA CLA JMP CALLCD / CD LINE ENDED WITH CR CDF CIF 0 JMP I (7600 / EXIT TO MONITOR PAGE / OUTPUT CHAR TO CONSOLE TYPE, 0 TLS TSF JMP .-1 CLA JMP I TYPE / OUTPUT TEXT TXOUT, 0 CLA CMA TAD I TXOUT DCA 16 ISZ TXOUT TXOU2, TAD I 16 SNA JMP I TXOUT / 0 SIGNALS END OF STRING JMS TYPE JMP TXOU2 / OUTPUT OCTAL DIGIT DGOUT, 0 AND (7 TAD ("0 JMS TYPE JMP I DGOUT / OUTPUT OCTAL NUMBER OCTOUT, 0 DCA OCNM TAD OCNM CLL RTL RTL JMS DGOUT TAD OCNM CLL RTR RTR RTR JMS DGOUT TAD OCNM CLL RTR RAR JMS DGOUT TAD OCNM JMS DGOUT JMP I OCTOUT / PRINT "FILE" & NUMBER PFN, 0 JMS TXOUT FILE TAD NFILE JMS DGOUT / ONLY WORKS FOR UP TO 7 FILES JMP I PFN / ERRORS ER2, ISZ EROR / INPUT FAILURE ER1, CLA / LOOKUP FAILURE JMS PFN TAD I EROR / GET ADDR OF ERROR MESSAGE DCA .+2 JMS TXOUT 0 TAD (AEM1 DCA EROR JMP DONEF EROR, AEM1 AEM1, ERMS1; ERMS2 PAGE / ERROR MESSAGES ERMS1, "L;"O;"O;"K;"U;"P;" ;"F;"A;"I;"L;"U;"R;"E;0 ERMS2, "I;"N;"P;"U;"T;" ;"F;"A;"I;"L;"U;"R;"E;0 FILE, 215;212;"F;"I;"L;"E;" ;0 CKSM2, " ;"C;"H;"E;"C;"K;"S;"U;"M;" ;0 CRLF, 215;212;0 $$$$$$$$