Output of file : SAMPINS.QNE contained in archive :
PRO4A.ZIP
@ INSTALLATION SCREEN Password: Company Name: Street Address: City: State: ZIP: Host System: (SINGLE, NETWARE, IBMNET, TURBODOS...) (CHECK MANUAL FOR OTHER HOST O/S) Base Operating System: (1=PC/MS-DOS,2=CPM/CCCPM-86,3=CPM/MPM-80) Next Invoice No: Next Inventory Transaction No: Data Drive: or Path (Use full name with all colons and backslashes) END- Save Information ESC- Next ScreenF1- Redisplay Screen PASSWORD 10 413 L YYNNPASSWORDP ÿÿCOMPANY 40 617 L YNNN ÿÿSTREET 30 719 L YNNN ÿÿCITY 25 8 9 L YNNN ÿÿSTATE 2 854A L YNNN ÿÿZIP 5 865D L YNYN ÿÿHOST 151016X L YYNN ÿÿSYSTEM 11326D L YYNNSYSTEMP ÿÿINVOICE 81520D R YYNN ÿÿINVENTORY 81568d R YNNN ÿÿDATADRIVE 641715X L YYNN ÿÿ 10PROC LOAD FILL "_"* Using ERRTRAP to insure that the file is not recreated on an* err in opening it, e.g. in use, disk i/o, etc. It is opened* locked.* Branch to 100, the error trap on not being able to open the file. ERRTRAP 100 OPEN "SAMPINS.DAT" USING "SAMPINS.FID",1* Reuse of ERRTRAP without line number turns it off ERRTRAP CALL DISPLAY END100 BEGIN IF #N0 = 6 * 6 means file inavailable, so create file MAKE "SAMPINS.DAT" USING "SAMPINS.FID",1:120 20 ELSE IF #N0 = 33 * 33 means that the file system is not loaded. * Run the .BAT file that loads it and this program ERROR "The file handler, BTSYS is not loaded. Run SAMPINS.BAT - Press ESC" CLOSE SYSTEM ELSE ERROR "Error in opening files - exiting Press ESC" CLOSE SYSTEM ENDBEGIN END120 ERROR "UNABLE TO CREATE CONTROL FILE" END* This routine executed if there is any error except* NO SUCH FILE. 30 * #N0 contains the error number * #S0 contains the error messagePROC ENTER* posn's sampins to first record and puts all info into buffer POSN 1 TO 0 COPY * TO 1* encrypts password and moves it into buffer MOVE PASSWORD TO #S0 CALL ENCRYPT MOVE #S0 TO &PASSWORD[1] WRITE 1 NOADV:3010 END3010 ERROR "ERROR WRITING FILE" END 40PROC DISPLAY* gets password, decrypts it, and displays it on screen POSN 1 TO 0 READ 1 NOADV: 4010 MOVE &PASSWORD[1] TO #S0 CALL DECRYPT COPY 1 TO * MOVE #S0 TO PASSWORD RETURN4010 ERROR "NO RECORD TO DISPLAY" ENDPROC KEY1* displays password CALL DISPLAY 50 NEXT PASSWORDPROC PASSWORDP* encrypts password MOVE PASSWORD TO #S0 CALL ENCRYPT ENDPROC KEY0* blow off this program and pop over to create files CLOSE CHAIN "SAMPMAKE.QNE"PROC SYSTEMP IF SYSTEM GE 1 AND SYSTEM LE 3 END ERROR "SYSTEM NOT AVAILABLE" CLEAR SYSTEM RESUMEPROC ENCRYPT* This routine takes a password and encrypts the characters so that 60* a casual look at the data file will show garbage.* Up to a 20 character password may be encrypted.* Use of registers:* INPUT OUTPUT* #S0 string to be encrypted encrypted string* #N0 1 if error* #S1, #S2, #S3, #S4 and #N1 are used for working registers* The principle is to use a string as a substitution table and* offset the substitution by the character position so that even* if two characters are the same in the clear text, they will be* different in the encrypted text.* Clear the working registers CALL EN_CLEAR* Set up the scanning string. This string will be used to* set the position for translation in the other string 70MOVE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy" to #S4MOVE "z 1234567890-/#=@+~$%<>?" TO #S4[*]* There are 73 characters that may be converted. All others will be* rejected.* Set up the translation string.* The translation string is the same set of characters in random* order, BUT has 93 characters to allow for up to a 20 character* password, without repeating any character.MOVE "t|h.e!Lqu@i=ck2b(ro&w$n3fx4jm[pd5v+Z6l zy7dg*\<>?" TO #S1MOVE "T,H/EG8QU^I)CK9B'RO%W#N0FX{JM]P*D}V*R;1rYD%" TO #S1[*]* Determine the length of the password* The preceding was set-up, now the real work begins SIZE #S0 INTO #N0 80 FOR #N1 = 1 TO #N0 MOVE #S0[#N1,1] TO #S3* INSTR will find a match for the character in #S3 and* return the position in the string in #N2. Then a character* is selected from #S1 as the combination of the letter and position INSTR #S3,#S4,#N2 IF #N2 EQ 0 THEN GOTO ENCR_ERR MOVE #S1[(#N1+#N2-1),1] TO #S2[*] ENDFOR #N1 MOVE #S2 TO #S0 CALL EN_CLEAR RETURN END* If a character is not codable, a 1 will be returned in #n0:ENCR_ERR MOVE #S3 TO #S0 MOVE 1 TO #N0 CALL EN_CLEAR 90 RETURNPROC EN_CLEAR MOVE 0 TO #N1 MOVE "" TO #S1 MOVE "" TO #S2 MOVE "" TO #S3 RETURNPROC DECRYPT* This routine decripts a password coded by encrypt* It is in essence the reverse of CRYPT* Use of registers:* INPUT OUTPUT* #S0 string to be decrypted encrypted string* #N0 1 if error* #S1, #S2, #S3, #S4, and #N1 are used for working registers* Clear the working registers 100 CALL DE_CLEAR* Set up the conversion strings* They are the opposite of the encoding string* 1234567890 21234 3 412345 51MOVE "t|h.e!Lqu@i=ck2b(ro&w$n3fx4jm[pd5v+Z6l zy7dg*\<>?" TO #S1MOVE "T,H/EG8QU^I)CK9B'RO%W#N0FX{JM]P*D}V*R;1rYD%" TO #S1[*]MOVE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy" TO #S4MOVE "z 1234567890-/#=@+~$%<>?" TO #S4[*]* Determine the length of the encrypted password SIZE #S0 INTO #N0 FOR #N1 = 1 TO #N0 MOVE #S0[#N1,1] TO #S3* INSTR will find a match for the character in #S3 and 110* return the position in the string in #N2.* Look up the translation in #S4 INSTR #S3,#S1,#N2 IF #N2 EQ 0 THEN GOTO DECR_ERR MOVE #S4[(#N2-#N1+1),1] TO #S2[*] ENDFOR #N1 MOVE #S2 TO #S0 CALL DE_CLEAR RETURN END* If a character is not codable, a 1 will be returned in #n0:DECR_ERR MOVE #S3 TO #S0 MOVE 1 TO #N0 CALL DE_CLEAR RETURNPROC DE_CLEAR MOVE 0 TO #N1 120 MOVE "" TO #S1 MOVE "" TO #S2 MOVE "" TO #S3 MOVE "" TO #S4 RETURN
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/