1000 '---------------- PASSWORD.BAS 1010 ' Steven Pitzl, 19 Hospital Line, St. Thomas, USVI 00802 1020 '---------------- 1030 ' 1040 ' (For use on any Z80-based computer running Microsoft BASIC) 1050 ' 1060 ' This program will place password protection on a .COM file. To do 1070 ' this, it does three things: 1080 ' 1090 ' 1 - A block of Z80 relocatable code is placed after the end of the 1100 ' fifŸ@ΰδܐ ŸŸ Ÿ ŸŸ ΰጌŒŸΰጌ‰ŸŸ‰Ÿ€ŸŸ Ÿ ŸŸŸŸ8 ŸQXBULLB SYSTUVWXYZ[\RCPMDATA18 g]^_`abcBBSINSTLDOC-defCHGLIB COMghSUMMARY iDIALER BASjkSECURITYASM"lmnSECURSYSDOCKopqrsUSER-8/8ASMtPASSWORDBASuvSCRAMBL2ASM0wxySCRAMBLEDOC zPLINK MAC%{|}~€‚ƒ„…PLINK65 DOC †‡RECV COMˆSEND ASM6‰Š‹Œhe last record of the program. It is Z80 code; don't 1240 ' run this program with an 8080 processor! 1250 ' 1260 DATA 18,0c 1270 DATA 3e,e1,32,10,00,3e,e5,32,11,00,3e,c9,32,12,00,cd,10,00,11,e5,ff,19 1280 DATA e5,0e,06,1e,2a,cd,05,00,e1,0e,00,22,10,00,46,23,5e,c5,e5,0e,06,1e 1290 DATA ff,cd,05,00,b7,28,f6,e1,c1,fe,0d,28,09,e6,5f,be,20,01,0c,23,10,e4 1300 DATA 3e,08,b9,c0,2a,10,00,2b,2b,2b,11,00,01,06,03,7e,12,23,13,10,fa,0e 1310 DATA 06,1e,08,cd,05,00,c3,00,01 1320 ' 1330 DEFSNG A 1340 DEFINT B-Z 1350 CLOSE 1:PRINT 1360 LINE INPUT "Name of .COM file to recieve password: ";A$:IF A$="" THEN END 1370 IF INSTR(A$,".")=0 THEN A$=A$+".COM" 1380 OPEN"I",1,A$:CLOSE 1:OPEN"R",1,A$,128:FIELD 1,3 AS FR$:FIELD 1,128 AS FWR$:GET 1,1:FB$=FR$ 1390 LINE INPUT " Enter password (up to 8 characters): ";B$:IF B$="" THEN 1350 1400 IF LEN(B$)>8 THEN 1390 1410 C$=" ":LSET C$=B$ 1420 ' 1430 ' Assemble machine language routine, first 3 bytes, and password into R$ 1440 ' 1450 DEF FNHX$=CHR$(VAL("&H"+H$)) 1460 R$=SPACE$(111)::RESTORE:FOR O=1 TO 2:READ H$:MID$(R$,O,1)=FNHX$:NEXT O 1470 C$=FB$+CHR$(LEN(B$))+C$ 1480 FOR O=3 TO 14:MID$(R$,O,1)=MID$(C$,O-2,1):NEXT O 1490 FOR O=15 TO 111:READ H$:MID$(R$,O,1)=FNHX$:NEXT O 1500 MID$(R$,82,1)=CHR$(LEN(B$)) 1510 ' 1520 ' Read file until EOF to find last page 1530 ' 1540 AD=&H100 1550 R=1 1560 ' 1570 GET 1,R:IF EOF(1) THEN 1630 1580 R=R+1:AD=AD+128:GOTO 1570 1590 ' 1600 ' AD now points to the address where the routine will be placed. 1610 ' Write the relocatable routine after the last page. 1620 ' 1630 LSET FWR$=R$:PUT 1,R 1640 ' 1650 ' Now, update the first 3 bytes on the first page to a JMP into the 1660 ' the patch. 1670 ' 1680 GET 1,1:LSET FR$=CHR$(&HC3)+CHR$(AD-FIX(AD/256)*256)+CHR$(FIX(AD/256)) 1690 PUT 1,1:CLOSE 1 1700 PRINT:PRINT "Done":GOTO 1350 T 1,1:LSET FR$=CHR$(&HC3)+CHR$(AD-FIX(AD/256)*256)+CHR$(FIX(AD/