1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 1 (PROP) F 2 2 INPUT SOURCE.OPSYS:PROP put in the proprietary notice 1 2 3 4 5 6 7 8 9 10 * ......... BBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 11 * ................. BBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 12 * ..........##......... BBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 13 * ............##........... BBBBBB BBBBBB TTTTTT TTTTTT TTTTTT IIIIII 14 * .............##............ BBBBBB BBBBBB TTTTT TTTTTT TTTTT IIIIII 15 * .............##............ BBBBBB BBBBBBB TTTT TTTTTT TTTT IIIIII 16 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 17 * ..............##............. BBBBBBBBBBBBBBBBB TTTTTT IIIIII 18 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 19 * .............##.............. BBBBBB BBBBBB TTTTTT IIIIII 20 * ...........##.............. BBBBBB BBBBBB TTTTTT IIIIII 21 * ..........##............... BBBBBB BBBBBB TTTTTT IIIIII 22 * ........##............... BBBBBB BBBBBBB TTTTTT IIIIII 23 * .....##.............. BBBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 24 * ................. BBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 25 * ......... BBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 26 * 27 * 28 * ****** Copyright 1982, 1983, 1984, 1985, 1986, 1987, 1988, 29 * 1989, 1990, 1991, 1992 BTI Computer Systems ****** 30 * 31 * This document and the program it describes are the exclusive property 32 * of and proprietary to BTI Computer Systems. No use, reproduction or 33 * disclosure of this document or its contents, either in full or in part, 34 * by any means whatsoever regardless of purpose may be made without the 35 * prior written consent of BTI Computer Systems. 36 * 37 * BTI Computer Systems 38 * Sunnyvale, California 94086 3 4 5 6 * SSS EEEEE CCC OOO N N DDDD PPPP A SSS SSS 7 * S S E C C O O NN N D D P P A A S S S S 8 * S E C O O N N N D D P P A A S S 9 * SSS EEEE C O O N N N D D PPPP A A SSS SSS 10 * S E C O O N NN D D P AAAAA S S 11 * S S E C C O O N NN D D P A A S S S S 12 * SSS EEEEE CCC OOO N N DDDD P A A SSS SSS 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 2 F 0 14 15 MAIN BLOCK main block 16 INPUT PW2REVS get the revisions file 1 2 ********************************************************************************** 3 * * 4 * Revision Date * 5 * -------- ---- * 6 * A8207 Jul 82 * 7 * First version assembled with Day-Of-Week password option. * 8 * A8811 Nov 88 * 9 * Mods to print version number. Day-Of-Week retired in * 10 * favor of a new scheme. New logger added. Share list * 11 * checker added. * 12 * A8903 Mar 89 * 13 * Change in table loader to start with a later week. * 14 * Change to checksummer to skip grabbag array if not a * 15 * date dependant PW. * 16 * A8907 Jul 89 * 17 * Fix to number of retries, was recording the negative of * 18 * the correct number. RC * 19 * * 20 ********************************************************************************** 21 41383930 ABS 22 VERSIONHI EQU "A890" the version number 37000000 ABS 23 VERSIONLO EQU "7 " AND 0FF000000 17 18 ********************************************************************************** 19 * * 20 * This is the secondary password program for the BTI accounts. * 21 * This program is suitable for use by mere humans doing the * 22 * computations. * 23 * * 24 ********************************************************************************** 25 00000400 ABS 26 WPP EQU 1024 number of words on a page 00000004 ABS 27 CPW EQU 4 number of characters in a word 00001000 ABS 28 CPP EQU WPP*CPW number of characters on a page 00000080 BYTE 29 CH0 EQU BITS 0:7 first character in single word 30 NOLIST CREF 31 INPUT SOURCE.OPSYS:VIRTDEFS get in the system definitions 32 INPUT SOURCE.OPSYS:XREQINFOMACS get in the system definitions 33 LIST CREF 34 INPUT $$$MACROS to get prepout 1 * Including MACROS.ASSEM Version A8607. 35 DIRINFORD 36 FILESTAT 37 PROCINFORD 38 SHLINFORD 39 40 START START indicate where to begin 41 00138000 6 REG 42 SP EQU R6 stack pointer register 00000001 ABS 43 INLUN EQU 1 input unit 00000002 ABS 44 OUTLUN EQU 2 output unit 00000064 ABS 45 LOCALLUN EQU 100 highest local unit 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 3 F 0 00000010 ABS 46 PSRMODIF EQU 010 modified arithmetic bit in PSR 00000003 ABS 47 TRIESALWD EQU 3 allowed number of tries 48 49 ********************************************************************************** 50 * Log File Info. * 51 * Each entry is two words. * 52 * The first 8 bits are the success/failure code (see below), * 53 * The next 12 bits are the port number, and the last 44 bits * 54 * are the date and time of the attempt. * 55 ********************************************************************************** 56 00000002 ABS 57 ENTRYSZ EQU 2 size of each entry in page (words) 58 * EQU 000 correct response first time 59 * EQU 001 correct response second time 60 * EQU 002 correct response third time 00000080 ABS 61 BYPASSCODE EQU 080 entry code indicating bypass 000000F0 ABS 62 FAILCODE EQU 0F0 failure code for entries 000000F1 ABS 63 FAILCODEB EQU 0F1 failure code for batch attempt 64 65 INITPSECT 0400,0,VARIABLES 00000000 66 WPASSWORD BSS 0 word label for password location 02000000 67 PASSWORD BSSC 20 character label for password location 68 69 * Variables for the random number generator 70 00000005 71 X BSS 1 pseudo random number (PRN) 72 73 * The string that is to be shuffled 74 02000006 75 CHARSTRNG BSSC 36 the string being mixed 76 77 * The input buffer 78 00000014 ABS 79 INBUFSIZE EQU 20 max possible input buffer 0000000F 80 INBUFW BSS 0 word address for input buffer 0200000F 81 INBUF BSSC INBUFSIZE the input buffer 00000014 82 INBUFACT BSS 1 the actual input record size 83 84 * Print buffer 85 0000000B ABS 86 VARLINESIZ EQU 11 length of line ("x x x x x x") 02000015 87 VARLINE BSSC VARLINESIZ buffer for the 'box' printer 88 89 * Buffer for process information 90 91 BSS 0 force word boundary 000000C8 ABS 92 PIBUFLEN EQU 200 needed length of buffer 02000018 93 PIBUFFER BSSC PIBUFLEN allocate space for process information block 94 95 * Other variables 96 0000004A 97 DATETIME BSS2 1 current date/time 0000004C 98 TIMEZONE BSS 1 local time zone 0000004D 99 RECNTR BSS 1 counter for allowable redraws 0000004E 100 PASSNUM BSS 1 counter for allowable tries 0000004F 101 FIRSTSPOT BSS 2 the xy location of the first character 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 4 F 0 00000051 102 LOGLUN BSS 1 holds available unit number for logger 103 104 * Variables for password generator 105 00000052 106 PNUM BSS 1 scrambler location 00000053 107 SHUFPTR BSS 1 points to next 'random' integer 108 109 * Variables for share list checker 110 00000054 111 DIRLUN BSS 1 DIR lun number 00000055 112 FILELUN BSS 1 file lun number 00000056 113 COUNT BSS 1 number of words in shared list 00000050 ABS 114 DIRBUFRLEN EQU 80 length of directory buffer 02000057 115 DIRBUFFER BSSC DIRBUFRLEN buffer for directory read 00000040 ABS 116 XREQBUFL EQU 64 length for error message buffer 0000006B 117 XREQBUFFER BSS XREQBUFL/CPW storage for error message string 118 0000007B 119 OPENBUF LABEL template required for FROPEN freq 0000007B 120 OPVOL BSS2 1 Volume file is on (PAK12) 0000007D 121 OPSYS BSS 1 System file is on (PAK6) 122 BSS2 1 Password for above (PAK12) 00000080 123 OPACCT BSS2 1 Account file is on (PAK12) 00000082 124 OPPROJ BSS 1 Project of account (PAK6) 125 BSS2 1 Password for account directory access (PAK12) 00000085 126 OPFILE BSS2 1 Name of file (PAK12) 00000087 127 OPEXT BSS 1 Filename extension (PAK6) 128 BSS2 1 Password for file access (PAK12) 0000003C ABS 129 OPENBUFL EQU DISPC OPENBUF length of open buffer 130 131 * The stack area 132 133 BSS 25 000000A3 134 STACKTOP LABEL label for top of stack 135 136 PROG 137 138 * Arrays that should be page aligned 139 140 * Share list checker buffer 00001000 ABS 141 SBUFFLEN EQU CPP 150 possible shared list entries 00000400 142 SBUFFER BSS SBUFFLEN/CPW buffer for share list read 143 144 * Log routine buffer 00000400 145 RAFBUFR EQU SBUFFER buffer for log routine (shares page) 00000001 ABS 146 RAFBUFPN EQU (RAFBUFR DISPW MA 0)/WPP virtual memory page number 00000400 147 RAFCUR EQU RAFBUFR(0) current entry in page 00000402 148 RAFPREV EQU RAFBUFR(ENTRYSZ) previous entry (after move) 149 150 * Password generator array 0000000D ABS 151 GRABLOG EQU 13 log size of GRABBAGE array (chars) 00002000 ABS 152 GRABLEN EQU 2 POWER GRABLOG length (chars) of GRABBAG 00001FFF ABS 153 GRABMASK EQU GRABLEN-1 mask for address 154 00000800 155 GRABBAG BSS GRABLEN/CPW grab bag array 156 157 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 5 F 0 158 * Start of constants 159 00001000 160 LOWCODE LABEL start of checksummable region 161 162 * Misc pointers 01000 020C0006 163 CHRSPTR PTR CHARSTRNG pointer to shuffled string 01001 020C0000 164 PWPTR PTR PASSWORD pointer to password 01002 420C0000 165 PWPTR1 PTR PASSWORD(1) pointer to next password character 166 167 * The prototype string 01003 41424344 168 FRESHSTRNG TEXT "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 00000024 ABS 169 STRNGSIZE EQU DISPC FRESHSTRNG size of the string 170 0100C 39544159 171 FIXEDPW TEXTZ "9TAYLOR" 0100F 00000000 172 VFD 0,0 room for a longer password 00000010 ABS 173 FPWLEN EQU DISPC FIXEDPW length of fixed pw area 174 01010 00000000 175 DDPWFLAG VFD 0 indicate not date dependant 176 * make non-zero for date dependant password 177 178 INPUT PW2MAIN main line routine 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 6 (PW2MAIN) F 7 2 3 ********************************************************************************** 4 * * 5 * Main control loop. * 6 * * 7 * There are three options available, they may be enabled * 8 * by patching the instructions marked with *****. * 9 * Option 1: To skip secondary password processing if this is * 10 * a dial-in through port zero (the RFP). * 11 * Option 2: To create a date-time dependent secondary * 12 * password instead of using the static version. * 13 * Option 3: To skip the share list check. * 14 * * 15 ********************************************************************************** 16 01012 37000000 17 VERSION VFD VERSIONHI,VERSIONLO 01013 20536563 18 MYTITLE TEXTZ " Secondary Password Program \C1\." 19 0000101C 20 START LABEL 0101C 618400A3 6 IMM 21 LD SP ADR STACKTOP initialize the stack pointer 22 0101D 3800100C 0 23 LEA R0 FIXEDPW get the fixed password (might not be used) 0101E 60440010 1 IMM 24 LD R1 FPWLEN length of fixed pw area 0101F 38800000 2 25 LEA R2 WPASSWORD and work area address 01020 DA880800 2 01 26 MOVE R2 R0 R1 copy password to variable area 27 01021 60040060 0 IMM 28 LD R0 URRAWDATE request for raw date 01022 09040000 IMM 29 UREQ 0 get the current time 01023 E680004A 23 30 ST2 R2 DATETIME save for any users 01024 E440004C 1 31 ST R1 TIMEZONE and save the time zone too 32 01025 DC001425 33 CALL PREPOUT output my name and version 01026 41001011 34 PAR VERSION the version number 01027 40001013 35 PARL MYTITLE format line w/name 01028 DC401052 36 CALLNP PROCINFOGT call to load the process information block 01029 DC401059 37 CALLNP BATCHCHECK is this a batch job? 0102A FE0E104F 38 JMP KILLBATCH if batch, kill him now 0102B DC40105E 39 CALLNP RFPCHECK check for remote front panel 0102C FE0E1046 40 JMP BYPASS skip secondary password if RFP 41 ***** NOP the jump to force secondary password processing 0102D 5C001010 42 CMZ DDPWFLAG produce date dependant PW, if option selected 0102E FE021030 43 JEQ SKIPDDP jump if fixed PW 0102F DC4015FF 44 CALLNP DTDMAKE otherwise, make one based on date 00001030 45 SKIPDDP LABEL 01030 60040002 0 IMM 46 LD R0 TRIESALWD-1 get allowed number 01031 E400004E 0 47 ST R0 PASSNUM set the number of passes allowed 00001032 48 SECONDTRY LABEL 01032 DC401083 49 CALLNP RANDINIT set up the random number generator 01033 DC401063 50 CALLNP STRNGINIT set up the string to be shuffled 01034 DC401069 51 CALLNP STRNGSHUFL and do the shuffle 01035 60040003 0 IMM 52 LD R0 3 count of allowed redraws 01036 E400004D 0 53 ST R0 RECNTR set the counter 00001037 54 REPRINT LABEL 01037 DC40108A 55 CALLNP PRINTBLOK output the block to the user 01038 DC40109E 56 CALLNP INPUTBLOK and request the users response 01039 FE0E104B 57 JMP KILLNOW jump if no response or break 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 7 (PW2MAIN) F 7 0103A DC4010BE 58 CALLNP REDRAW check for redraw request 0103B FE0E1037 59 JMP REPRINT go to print it again 0103C DC4010CF 60 CALLNP CHKANS now check the answer 0103D FE0E1049 61 JMP CHANCE2 jump to check for a another chance 62 * \ / 0103E DC0011EC 63 CALL SUCCESS fix up the history file 0103F 60040002 0 IMM 64 LD R0 TRIESALWD-1 get allowed count 01040 1000004E 0 65 SUB R0 PASSNUM produce count of retries 01041 40520000 0 REG 66 PARVL R0 pass as type code 00001042 67 HAPPYSTOP LABEL 01042 DC4010F4 68 CALLNP SCHK check the share lists 69 ***** NOP to skip share list check 01043 DC4011A7 70 CALLNP SUMME print the program checksum 01044 60040073 0 IMM 71 LD R0 URSTOPZR get the code for a program stop 01045 09040000 IMM 72 UREQ 0 and stop, we're satisfied 73 * --- 74 00001046 75 BYPASS LABEL 01046 DC0011EC 76 CALL SUCCESS fix up the history file 01047 40440080 IMM 77 PARVL BYPASSCODE pass type indicating bypass 01048 FE0E1042 78 JMP HAPPYSTOP do normal termination 79 * --- 80 00001049 81 CHANCE2 LABEL 01049 D040004E 82 DEC PASSNUM count down the pass number 0104A FE061032 83 JGE SECONDTRY jump if we're willing to allow another try 84 * \ / 85 86 ********************************************************************************** 87 * * 88 * The user has failed to supply a good response in the * 89 * tries that he is allowed. We log the event and make the * 90 * session go away. * 91 * * 92 ********************************************************************************** 93 94 * \ / 0000104B 95 KILLNOW LABEL 0104B DC001237 96 CALL FAILURE do shutout processing 0104C 404400F0 IMM 97 PARVL FAILCODE and indicate failure 0000104D 98 KILLNOWX LABEL 0104D 60040090 0 IMM 99 LD R0 URBYE get code for bye-bye 0104E 09040000 IMM 100 UREQ 0 and kill this faker 101 * --- 102 103 ********************************************************************************** 104 * This session is a batch job. They, of course, cannot * 105 * supply a valid response. Note that a batch job that was * 106 * submitted by a logged on user will not come through here * 107 * unless a LOGON record was included in the file. * 108 * There is no good reason to allow such an explicit * 109 * LOGON to bypass this program. * 110 ********************************************************************************** 111 0000104F 112 KILLBATCH LABEL 0104F DC001237 113 CALL FAILURE do shutout processing 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 8 (PW2MAIN) F 7 01050 404400F1 IMM 114 PARVL FAILCODEB and indicate batch failure 01051 FE0E104D 115 JMP KILLNOWX go log off this job 116 * --- 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 9 (PW2MAIN) F 7 118 119 ********************************************************************************** 120 * * 121 * Fetch the process information and set up a pointer to it. * 122 * * 123 ********************************************************************************** 124 125 PROCINFO BLOCK get process information 126 ENTRY PROCINFOGT to get the process information block 127 128 BEGFRAME 129 ENDFRAME 130 01052 DD5F8001 6 STAK 131 PROCINFOGT ENTRNP PUSH 01053 60040052 0 IMM 132 LD R0 URPROCINFO load request 01054 604400C8 1 IMM 133 LD R1 PIBUFLEN get length of buffer 01055 60840018 2 IMM 134 LD R2 ADR PIBUFFER and its address 01056 09040000 IMM 135 UREQ 0 get information for me 01057 60C40018 3 IMM 136 LD R3 ADR PIBUFFER set up pointer 01058 5D1F8001 6 STAK 137 LEAVE POP return 138 * --- 139 +PIBUFFER 02000018 F 7 134a 136a +PIBUFLEN 000000C8 F 7 133 +PROCINFOGT 00001052 F 7 126 131= +SP 00138000 F 7 128 129e 140 END PROCINFO of process information getting 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 10 (PW2MAIN) F 7 142 143 ********************************************************************************** 144 * * 145 * Check the process information block for a batch job. * 146 * Call: * 147 * R3=> process information block * 148 * CALLNP BATCHCHECK * 149 * * 150 * * 151 * * 152 ********************************************************************************** 153 154 BATCHCK BLOCK batch job checker 155 ENTRY BATCHCHECK check for a batch job 156 157 BEGFRAME 158 ENDFRAME 159 01059 DD5F8001 6 STAK 160 BATCHCHECK ENTRNP PUSH 0105A 5C08DE11 3 ZBM 161 CMZ R3,PIBATCH check for this a batch job 0105B FE0C105D 162 JNE NOSKIPRTN no skip for batch job 0105C 19C40001 7 IMM 163 ADD R7 1 interactive terminal, give skip return 0000105D 164 NOSKIPRTN LABEL 0105D 5D1F8001 6 STAK 165 LEAVE POP return to caller 166 * --- 167 +BATCHCHECK 00001059 F 7 155 160= NOSKIPRTN 0000105D F 7 162j 164= +PIBATCH 00081E11 F 7 161 +SP 00138000 F 7 157 158e 168 END BATCHCK of batch checker 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 11 (PW2MAIN) F 7 170 171 ********************************************************************************** 172 * * 173 * We check for port zero (this implies the Remote Front * 174 * Panel connection). Since this link is encrypted, to require * 175 * the secondary password is overkill. * 176 * * 177 * Call: * 178 * R3=> process information block * 179 * CALLNP RFPCHECK * 180 * * 181 * * 182 * * 183 ********************************************************************************** 184 185 PORTZERO BLOCK port zero checker 186 ENTRY RFPCHECK to check for remote front panel 187 188 BEGFRAME 189 ENDFRAME 190 0105E DD5F8001 6 STAK 191 RFPCHECK ENTRNP PUSH 0105F 5C08D611 3 ZBM 192 CMZ R3,PIRFP check for special port 01060 FE0C1062 193 JNE NOSKIPRTN 01061 19C40001 7 IMM 194 ADD R7 1 advance to skip return 00001062 195 NOSKIPRTN LABEL 01062 5D1F8001 6 STAK 196 LEAVE POP return 197 * --- 198 NOSKIPRTN 00001062 F 7 193j 195= +PIRFP 00081611 F 7 192 +RFPCHECK 0000105E F 7 186 191= +SP 00138000 F 7 188 189e 199 END PORTZERO of the port zero checker 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 12 (PW2MAIN) F 7 201 202 STRINGINIT BLOCK string initializer 203 ENTRY STRNGINIT to copy a virgin string into the shuffle buffer 204 205 BEGFRAME 206 ENDFRAME 207 01063 DD5F8001 6 STAK 208 STRNGINIT ENTRNP PUSH 01064 60041003 0 IMM 209 LD R0 ADR FRESHSTRNG get the source address 01065 60440024 1 IMM 210 LD R1 STRNGSIZE get the size 01066 60840006 2 IMM 211 LD R2 ADR CHARSTRNG get the destination 01067 DA880800 2 01 212 MOVE R2 R0 R1 move over the clean string 01068 5D1F8001 6 STAK 213 LEAVE POP return 214 * --- 215 +CHARSTRNG 02000006 F 7 211a +FRESHSTRNG 00001003 F 7 209a +SP 00138000 F 7 205 206e +STRNGINIT 00001063 F 7 203 208= +STRNGSIZE 00000024 F 7 210 216 END STRINGINIT of string initializer 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 13 (PW2MAIN) F 7 218 219 ********************************************************************************** 220 * * 221 * This routine shuffles the string. This is done by repeatedly * 222 * calling the random number generator and exchanging two characters * 223 * in the string, the one at the current index and the one indicated * 224 * by the random number. * 225 * * 226 * Eats R0,R1 * 227 * * 228 ********************************************************************************** 229 230 STRINGSHF BLOCK string shuffle routine 231 ENTRY STRNGSHUFL to randomly order the string 232 233 BEGFRAME 00178801 6 BASE 234 SAVER4 BSS 1 to save this register 235 ENDFRAME 236 01069 DD5F8002 6 STAK 237 STRNGSHUFL ENTRNP PUSH 0106A E5178801 4 6 BASE 238 ST R4 SP,SAVER4 save the register 0106B 61040023 4 IMM 239 LD R4 STRNGSIZE-1 get the initial index to the string 0000106C 240 STRLOOP LABEL 0106C DC401079 241 CALLNP RANDOM get a random number 0106D 58C40010 IMM 242 IORPSR PSRMODIF set the funny arithmetic bit 0106E 14040024 0 IMM 243 DIV R0 STRNGSIZE and select one of only STRNGSIZE 0106F 58840010 IMM 244 CLBPSR PSRMODIF clear funny arithmetic 01070 60321000 0 1 @ 245 LD R0 @CHRSPTR(R1) get the designated character 01071 E0381000 0 4 @ 246 EXCH R0 @CHRSPTR(R4) exchange with indexed character 01072 E4321000 0 1 @ 247 ST R0 @CHRSPTR(R1) and put indexed char into designees place 01073 FB26106C 4 248 JDR R4 STRLOOP go back if another character 249 * \ / 01074 61178801 4 6 BASE 250 LD R4 SP,SAVER4 restore the register 01075 5D1F8002 6 STAK 251 LEAVE POP return to caller 252 * --- 253 +CHRSPTR 00001000 F 7 245 246s 247s +PSRMODIF 00000010 F 7 242 244 +RANDOM UUUUUUUU F 7 241 SAVER4 00178801 F 7 234= 238s 250 +SP 00138000 F 7 233 235e 238s 250 STRLOOP 0000106C F 7 240= 248j +STRNGSHUFL 00001069 F 7 231 237= +STRNGSIZE 00000024 F 7 239 243 254 END STRINGSHF of string shuffler 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 14 (PW2MAIN) F 7 256 257 ********************************************************************************** 258 * * 259 * This routine generates one random number. The technique is * 260 * the linear congruential technique. See Knuth, volume 2 for the * 261 * details of how this works. * 262 * Call: * 263 * CALLNP RANDOM * 264 * * 265 * Eats R0,R1 * 266 * * 267 ********************************************************************************** 268 269 RANDNUM BLOCK containing all random number stuff 270 ENTRY RANDINIT initialize the random number generator 271 ENTRY RANDOM to generate a random number 272 01076 2C74F1D5 273 A VFD 02C74F1D5 multiplier for Linear Congruential Generator 01077 3C29EAD7 274 C VFD 03C29EAD7 additive term 40000000 ABS 275 M EQU 040000000 the modulus 01078 3FFFFFFF 276 TAKEM VFD M-1 and with this to do the mod operation 277 278 RANDGEN BLOCK random number generator 279 ENTRY RANDOM to generate a random number 280 281 BEGFRAME 282 ENDFRAME 283 01079 DD5F8001 6 STAK 284 RANDOM ENTRNP PUSH 0107A 60000005 0 285 LD R0 X get the previous random number 0107B 58C40010 IMM 286 IORPSR PSRMODIF set up funny arithmetic 0107C 1C001076 0 287 MUL R0 A do the multiply 0107D 18401077 1 288 ADD R1 C and add in the additive term 0107E 58840010 IMM 289 CLBPSR PSRMODIF restore normal arithmetic 0107F 78401078 1 290 AND R1 TAKEM take the modulo 01080 E4400005 1 291 ST R1 X save the running PRN 01081 60040000 0 IMM 292 LD R0 0 and clear the upper half for the caller 01082 5D1F8001 6 STAK 293 LEAVE POP return 294 * --- 295 +A 00001076 F 7 287 +C 00001077 F 7 288 +PSRMODIF 00000010 F 7 286 289 +RANDOM 00001079 F 7 279 284= +SP 00138000 F 7 281 282e +TAKEM 00001078 F 7 290 +X 00000005 F 7 285 291s 296 END RANDGEN of random number generator 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 15 (PW2MAIN) F 7 298 299 ********************************************************************************** 300 * * 301 * This code requests the current time of day, then uses it * 302 * to generate the value of X0 for the random number generator. * 303 * * 304 ********************************************************************************** 305 306 RANDINIT BLOCK random number initializer 307 ENTRY RANDINIT initialize the random number generator 308 309 BEGFRAME 310 ENDFRAME 311 01083 DD5F8001 6 STAK 312 RANDINIT ENTRNP PUSH 01084 60040060 0 IMM 313 LD R0 URRAWDATE request for raw date 01085 09040000 IMM 314 UREQ 0 get the current time 01086 1892C000 2 3 REG 315 ADD R2 R3 fold together the two halves 01087 78801078 2 316 AND R2 TAKEM take the modulus 01088 E4800005 2 317 ST R2 X and set up the initial value 01089 5D1F8001 6 STAK 318 LEAVE POP return 319 * --- 320 +RANDINIT 00001083 F 7 307 312= +SP 00138000 F 7 309 310e +TAKEM 00001078 F 7 316 +X 00000005 F 7 317s 321 END RANDINIT of the random number initializer 322 A 00001076 F 7 273= 287 C 00001077 F 7 274= 288 M 40000000 F 7 275= 276x +PSRMODIF 00000010 F 7 286 289 RANDGEN F 7 278= 296 +RANDINIT 00001083 F 7 270 306= 307 312= +RANDOM 00001079 F 7 271 279 284= +SP 00138000 F 7 281 282e 309 310e TAKEM 00001078 F 7 276= 290 316 +X 00000005 F 7 285 291s 317s 323 END RANDNUM of random number stuff 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 16 (PW2MAIN) F 7 325 326 ********************************************************************************** 327 * * 328 * This routine causes the random string to be typed out * 329 * to the user in the form of a block, in this version, it * 330 * is 6 by 6. * 331 * Note that we blank fill the print line once since the * 332 * six printed characters always fall into the same locations. * 333 * Call: * 334 * CALLNP PRINTBLOK * 335 * Eats R0:R4 * 336 * * 337 ********************************************************************************** 338 339 PRINTBLK BLOCK the block print out routine 340 ENTRY PRINTBLOK prints string by sixes 341 342 BEGFRAME 343 ENDFRAME 344 0108A DD5F8001 6 STAK 345 PRINTBLOK ENTRNP PUSH 0108B 6044000B 1 IMM 346 LD R1 VARLINESIZ get the size of the line buffer 0108C 6080109D 2 347 LD R2 PVARLINE get a pointer to the line buffer 0108D DA800820 2 1 348 FILLI R2 R1 " " and fill with blanks 349 0108E 61040005 4 IMM 350 LD R4 6-1 load number of lines to print 0108F 60C01000 3 351 LD R3 CHRSPTR get the string address 00001090 352 PRTLOOP LABEL 01090 6040109D 1 353 LD R1 PVARLINE get a pointer to the line 01091 60840005 2 IMM 354 LD R2 6-1 get the number of characters this move 00001092 355 CHMVLOP LABEL 01092 6016C400 0 3 @R 356 LD R0 @R3 get the next character 01093 E4164400 0 1 @R 357 ST R0 @R1 and store into the message 01094 38564002 1 1 CACH 358 LEA R1 CACH R1,2 advance to next spot in print line 01095 D092C000 3 REG 359 INCP R3 and advance the pointer 01096 FAA61092 2 360 JDR R2 CHMVLOP repeat for all characters on this line 361 * \ / 01097 60040040 0 IMM 362 LD R0 FRWRITE get the code for a write 01098 6044000B 1 IMM 363 LD R1 VARLINESIZ get the size of the line 01099 60840015 2 IMM 364 LD R2 ADR VARLINE and its address 0109A 08840002 IMM 365 FREQ OUTLUN output the line 366 * \ / 0109B FB261090 4 367 JDR R4 PRTLOOP jump back if more lines 368 * \ / 0109C 5D1F8001 6 STAK 369 LEAVE POP return to caller 370 * --- 371 0109D 020C0015 372 PVARLINE PTR VARLINE pointer to the line 373 CHMVLOP 00001092 F 7 355= 360j +CHRSPTR 00001000 F 7 351 +OUTLUN 00000002 F 7 365 +PRINTBLOK 0000108A F 7 340 345= PRTLOOP 00001090 F 7 352= 367j PVARLINE 0000109D F 7 347 353 372= +SP 00138000 F 7 342 343e 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 17 (PW2MAIN) F 7 +VARLINE 02000015 F 7 364a 372a +VARLINESIZ 0000000B F 7 346 363 374 END PRINTBLK of the block print out routine 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 18 (PW2MAIN) F 7 376 377 ********************************************************************************** 378 * * 379 * We request a read from the input unit. We expect to get * 380 * in the users response. Since this response is no longer than * 381 * the password, we only allow a short input buffer. * 382 * * 383 ********************************************************************************** 384 385 INPUTRTNS BLOCK input routine 386 ENTRY INPUTBLOK to read the users response 387 388 BEGFRAME 00178801 6 BASE 389 ORIGECHO BSS 1 location on stack for original echo mode 390 ENDFRAME 391 0109E DD5F8002 6 STAK 392 INPUTBLOK ENTRNP PUSH 393 * \ / 0109F 60040128 0 IMM 394 LD R0 FRTGETECHO get the current echo mode 010A0 08840001 IMM 395 FREQ INLUN for the input unit 010A1 E4578801 1 6 BASE 396 ST R1 SP,ORIGECHO save for later reset 010A2 64440001 1 IMM 397 CPR R1 1 0 and 1 don't change 010A3 FE0A10A7 398 JLE ECHOOK jump if 0 or 1 010A4 60040118 0 IMM 399 LD R0 FRTSETECHO get code to change echo 010A5 60440001 1 IMM 400 LD R1 1 must set to echo mode 1 010A6 08840001 IMM 401 FREQ INLUN on the input unit 000010A7 402 ECHOOK LABEL 403 * \ / 010A7 600400EA 0 IMM 404 LD R0 URPSETREG+0A for setting interrupt mask 010A8 60420500 1 IMM 405 LD R1 02800000 to indicate break and non-empty terminal 010A9 09040000 IMM 406 UREQ 0 to my process 407 * \ / 010AA 60040140 0 IMM 408 LD R0 URDELAY to request a delay 010AB 6044003C 1 IMM 409 LD R1 60 how many seconds long 010AC 60820500 2 IMM 410 LD R2 02800000 mask for when else to fall out of delay 010AD 09040000 IMM 411 UREQ 0 wait for something to happen 010AE FA4210B8 1 412 JEQZ R1 TIMEOUT nothing happened, kill user 010AF 64840022 2 IMM 413 CPR R2 UINTNETERM was it the terminal getting a line? 010B0 FE0C10B8 414 JNE TIMEOUT jump if not, was probably break, kill the user 010B1 19C40001 7 IMM 415 ADD R7 1 advance to good return 416 * \ / 010B2 60040030 0 IMM 417 LD R0 FRREAD get the request code 010B3 60440014 1 IMM 418 LD R1 INBUFSIZE get the input buffer size 010B4 6084000F 2 IMM 419 LD R2 ADR INBUF get the buffer address 010B5 08840001 IMM 420 FREQ INLUN and read the response 010B6 30440014 1 IMM 421 RSB R1 INBUFSIZE make the record size 010B7 E4400014 1 422 ST R1 INBUFACT and save it 000010B8 423 TIMEOUT LABEL 424 * \ / 010B8 60578801 1 6 BASE 425 LD R1 SP,ORIGECHO get the original echo mode 010B9 64440001 1 IMM 426 CPR R1 1 check for 0 or 1 010BA FE0A10BD 427 JLE EXITORECHO they were not changed 010BB 60040118 0 IMM 428 LD R0 FRTSETECHO otherwise, get command to change echo 010BC 08840001 IMM 429 FREQ INLUN and issue to input unit 000010BD 430 EXITORECHO LABEL 431 * \ / 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 19 (PW2MAIN) F 7 010BD 5D1F8002 6 STAK 432 LEAVE POP return to the caller 433 * --- 434 ECHOOK 000010A7 F 7 398j 402= EXITORECHO 000010BD F 7 427j 430= +INBUF 0200000F F 7 419a +INBUFACT 00000014 F 7 422s +INBUFSIZE 00000014 F 7 418 421 +INLUN 00000001 F 7 395 401 420 429 +INPUTBLOK 0000109E F 7 386 392= ORIGECHO 00178801 F 7 389= 396s 425 +SP 00138000 F 7 388 390e 396s 425 TIMEOUT 000010B8 F 7 412j 414j 423= 435 END INPUTRTNS of the input routine 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 20 (PW2MAIN) F 7 437 438 ********************************************************************************** 439 * * 440 * This routine checks to see if the users response was * 441 * "REDRAW" rather than a numeric response. * 442 * * 443 ********************************************************************************** 444 445 REDRAWREQ BLOCK checks specially for a redraw request 446 ENTRY REDRAW did the user type redraw? 447 448 BEGFRAME 449 ENDFRAME 450 010BE DD5F8001 6 STAK 451 REDRAW ENTRNP PUSH 010BF 60000014 0 452 LD R0 INBUFACT get the actual input buffer size 010C0 64040006 0 IMM 453 CPR R0 6 must be exactly the right length 010C1 FE0C10C9 454 JNE NOTREDRAW jump if not 010C2 6200000F 01 455 LD2 R0 INBUFW get the first two words of the input 010C3 7A0010CB 01 456 AND2 R0 SIXANDLOW turn everything into lower case 010C4 660010CD 01 457 CPR2 R0 ASREDRAW check for a redraw command 010C5 FE0C10C9 458 JNE NOTREDRAW jump if not 010C6 D040004D 459 DEC RECNTR check for too many redraw requests 010C7 FE0810C9 460 JLT NOTREDRAW pretend NOT 'redraw' response 010C8 5D1F8001 6 STAK 461 LEAVE POP return indicating redraw 462 * --- 463 000010C9 464 NOTREDRAW LABEL 010C9 19C40001 7 IMM 465 ADD R7 1 advance to skip return 010CA 5D1F8001 6 STAK 466 LEAVE POP return 467 * --- 468 010CC DFDF0000 469 SIXANDLOW VFD 0DFDFDFDF,0DFDF0000 leave only interesting stuff 010CD 52454452 470 ASREDRAW TEXTZ "REDRAW" 471 ASREDRAW 000010CD F 7 457 470= +INBUFACT 00000014 F 7 452 +INBUFW 0000000F F 7 455 NOTREDRAW 000010C9 F 7 454j 458j 460j 464= +RECNTR 0000004D F 7 459s +REDRAW 000010BE F 7 446 451= SIXANDLOW 000010CB F 7 456 469= +SP 00138000 F 7 448 449e 472 END REDRAWREQ of redraw checker 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 21 (PW2MAIN) F 7 474 475 ********************************************************************************** 476 * * 477 * We find the positions of each of the characters in the * 478 * input string. We then calculate the separations of each * 479 * pair of characters and see if the users typed response * 480 * matches in that position. * 481 * Call: * 482 * CALLNP CHKANS * 483 * * 484 * * 485 * * 486 ********************************************************************************** 487 488 RESPONSE BLOCK the response checker 489 ENTRY CHKANS check the answer that the user supplied 490 491 BEGFRAME 492 ENDFRAME 493 010CF DD5F8001 6 STAK 494 CHKANS ENTRNP PUSH 010D0 61040000 4 IMM 495 LD R4 0 load the index 000010D1 496 NEXTPWCHAR LABEL 010D1 60B81001 2 4 @ 497 LD R2 @PWPTR(R4) get the first of two password characters 010D2 DC4010E7 498 CALLNP POSITION get its position 010D3 E600004F 01 499 ST2 R0 FIRSTSPOT save the xy coordinates 010D4 60B81002 2 4 @ 500 LD R2 @PWPTR1(R4) get the second of the two 010D5 FA8210E3 2 501 JEQZ R2 PWEND jump if we have found the pw end 010D6 DC4010E7 502 CALLNP POSITION get its location 010D7 1000004F 0 503 SUB R0 FIRSTSPOT(0) make a difference 010D8 FA0610DA 0 504 JGEZ R0 POSSPOT jump if positive 010D9 70120000 0 0 REG 505 LDN R0 R0 otherwise, make positive 000010DA 506 POSSPOT LABEL 010DA 10400050 1 507 SUB R1 FIRSTSPOT(1) make a difference 010DB FA4610DD 1 508 JGEZ R1 APOSPOT jump if positive 010DC 70524000 1 1 REG 509 LDN R1 R1 otherwise, make positive 000010DD 510 APOSPOT LABEL 010DD 54124000 0 1 REG 511 MAX R0 R1 get the bigger of the two 010DE 7C040030 0 IMM 512 IOR R0 "0" make it into a digit 010DF 643810E2 0 4 @ 513 CPR R0 @INBUFPTR(R4) check against the corresponding response 010E0 FE0C10E6 514 JNE FAILED jump if it doesn't match 010E1 FB2010D1 4 515 IRJ R4 NEXTPWCHAR jump on for the next 516 * --- 517 010E2 020C000F 518 INBUFPTR PTR INBUF pointer to the input buffer 519 000010E3 520 PWEND LABEL 010E3 65000014 4 521 CPR R4 INBUFACT compare against actual input buffer size 010E4 FE0C10E6 522 JNE FAILED jump if the users response was not correct length 523 * \ / 010E5 19C40001 7 IMM 524 ADD R7 1 advance the return address for success 000010E6 525 FAILED LABEL 010E6 5D1F8001 6 STAK 526 LEAVE POP return to caller 527 * --- 528 APOSPOT 000010DD F 7 508j 510= 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 22 (PW2MAIN) F 7 +CHKANS 000010CF F 7 489 494= FAILED 000010E6 F 7 514j 522j 525= +FIRSTSPOT 0000004F F 7 499s 503 507 +INBUF 0200000F F 7 518a +INBUFACT 00000014 F 7 521 INBUFPTR 000010E2 F 7 513 518= NEXTPWCHAR 000010D1 F 7 496= 515j +POSITION UUUUUUUU F 7 498 502 POSSPOT 000010DA F 7 504j 506= PWEND 000010E3 F 7 501j 520= +PWPTR 00001001 F 7 497 +PWPTR1 00001002 F 7 500 +SP 00138000 F 7 491 492e 529 END RESPONSE of response checker 1 Assembler C9208 Secondary Password Program 12-Jul-93 10:35 PAGE 23 (PW2MAIN) F 7 531 532 ********************************************************************************** 533 * * 534 * This routine finds out where a given character is in the * 535 * block that was typed out to the user. We express the character * 536 * location in terms of the xy coordinates and return that answer. * 537 * We presume that the password string may be upper or lower case * 538 * and upperify the character parameter, but we know that the * 539 * original string that was shuffled was all upper case. * 540 * Call: * 541 * LD R2 * 542 * CALLNP POSITION * 543 * * 544 * * 545 ********************************************************************************** 546 547 POSFIND BLOCK the position finder 548 ENTRY POSITION finds location of indicated character 549 550 BEGFRAME 551 ENDFRAME 552 010E7 DD5F8001 6 STAK 553 POSITION ENTRNP PUSH 010E8 64840061 2 IMM 554 CPR R2 "a" could this character be lower case? 010E9 FE0810EB 555 JLT POUPPER jump if already upper case 010EA 788400DF 2 IMM 556 AND R2 0DF cut down to upper case 000010EB 557 POUPPER LABEL 010EB 60040006 0 IMM 558 LD R0 ADR CHARSTRNG get the string address 010EC 60440024 1 IMM 559 LD R1 STRNGSIZE get the size of the string 010ED FE560000 560 CSRCH look for this character 010EE 30440024 1 IMM 561 RSB R1 STRNGSIZE make position in string 010EF 60040000 0 IMM 562 LD R0 0 set up for funny divide 010F0 58C40010 IMM 563 IORPSR PSRMODIF set the funny arithmetic 010F1 14040006 0 IMM 564 DIV R0 6 make into x y coordinates 010F2 58840010 IMM 565 CLBPSR PSRMODIF and restore normal arithmetic 010F3 5D1F8001 6 STAK 566 LEAVE POP return to caller 567 * --- 568 +CHARSTRNG 02000006 F 7 558a +POSITION 000010E7 F 7 548 553= POUPPER 000010EB F 7 555j 557= +PSRMODIF 00000010 F 7 563 565 +SP 00138000 F 7 550 551e +STRNGSIZE 00000024 F 7 559 561 569 END POSFIND of position finder 179 180 INPUT PW2SCHK routine to do share list checks 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 24 (PW2SCHK) F 8 3 4 ********************************************************************************** 5 * Share List Check * 6 * This routine opens a .DIR on each of the specified * 7 * accounts (see the DIROPEN routine for the list). We * 8 * check the account share list and print any share list * 9 * entries that do not match *.!* or *.&*. We then do * 10 * catalog reads and check the share list for each file * 11 * that is present. * 12 ********************************************************************************** 13 14 SHARECHEK BLOCK outer block for share list check 15 ENTRY SCHK main share list check routine 16 17 SCHK BLOCK 18 ENTRY SCHK main share list check routine 19 20 BEGFRAME 00178801 6 BASE 21 CURDIR BSS 1 holds current directory index 22 ENDFRAME 23 010F4 DD5F8002 6 STAK 24 SCHK ENTRNP PUSH 25 010F5 60040122 0 IMM 26 LD R0 URFREELUN get next free lun number 010F6 09040064 IMM 27 UREQ LOCALLUN base is highest lun 010F7 FA081122 0 28 JLTZ R0 MAJERROR on error, exit 010F8 E4400054 1 29 ST R1 DIRLUN lun to equip .DIR to 30 010F9 60040122 0 IMM 31 LD R0 URFREELUN get next free lun number 010FA 09000054 32 UREQ DIRLUN base is .DIR lun 010FB FA081122 0 33 JLTZ R0 MAJERROR on error, exit 010FC E4400055 1 34 ST R1 FILELUN lun to equip file to 35 010FD 60C40008 3 IMM 36 LD R3 NUMDIRS-1 get number of directories 000010FE 37 DIRLOOP LABEL beginning of section to do 1 dir 010FE E4D78801 3 6 BASE 38 ST R3 SP,CURDIR save current dir index 010FF DC401175 39 CALLNP DIROPEN go open .DIR (default or other) 01100 FE0E1129 40 JMP XERROR skip DIR on error 41 01101 60040030 0 IMM 42 LD R0 FRREAD read .DIR header record 01102 60440010 1 IMM 43 LD R1 DIRHWIDE+(DIRENTWIDE/2) specify enough buffer for header entry 01103 60840057 2 IMM 44 LD R2 ADR DIRBUFFER Read header record of catalog 01104 08800054 45 FREQ DIRLUN from .DIR lun 01105 FA081129 0 46 JLTZ R0 XERROR on error, quit 47 01106 DC00113F 48 CALL SLIST go get shared list 01107 40400054 49 PARVL DIRLUN pass unit (DIR unit) 01108 FE0E110A 50 JMP SKIPDSL error, skip processing DIR SL 01109 DC40114B 51 CALLNP DECODES go decode shared list 52 0000110A 53 SKIPDSL LABEL 54 0000110A 55 CRLOOP LABEL 0110A 60040030 0 IMM 56 LD R0 FRREAD Read catalog info into buffer 0110B 60440019 1 IMM 57 LD R1 (DIRENTWIDE*3)/2 specify enough buffer for one entry 0110C 60840057 2 IMM 58 LD R2 ADR DIRBUFFER and buffer address 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 25 (PW2SCHK) F 8 0110D 08800054 59 FREQ DIRLUN from .DIR lun 0110E FA081129 0 60 JLTZ R0 XERROR on error, exit 0110F 60CA2040 3 0 CBM 61 LD R3 R0/FDSTATRTYP see dynamic status FDSTATRTYP 01110 10C40009 3 IMM 62 SUB R3 FDRTYPEOD 01111 FAC6112B 3 63 JGEZ R3 ENDIT end if EOD 64 01112 60C40057 3 IMM 65 LD R3 ADR DIRBUFFER build open buffer from .DIR 01113 6216C801 013 BASE 66 LD2 R0 R3,DIRNAME with file name 01114 E6000085 01 67 ST2 R0 OPFILE 01115 6016C803 0 3 BASE 68 LD R0 R3,DIREXT and file extension 01116 E4000087 0 69 ST R0 OPEXT 70 01117 60040057 0 IMM 71 LD R0 FROPENNA open with no data access 01118 3840007B 1 72 LEA R1 OPENBUF get address of equip block 01119 08800055 73 FREQ FILELUN 0111A FA08111F 0 74 JLTZ R0 FCLOSE if error on open, skip it 75 0111B DC00113F 76 CALL SLIST go get shared list of file 0111C 40400055 77 PARVL FILELUN pass unit (individual file) 0111D FE0E111F 78 JMP FCLOSE skip processing on error 79 0111E DC40114B 80 CALLNP DECODES go decode shared list 81 0000111F 82 FCLOSE LABEL 0111F 60040060 0 IMM 83 LD R0 FRCLOSE close lun with opened file 01120 08800055 84 FREQ FILELUN 85 01121 FE0E110A 86 JMP CRLOOP go get next directory entry 87 * --- 88 00001122 89 MAJERROR LABEL 01122 DC401132 90 CALLNP ERRPRINT print out the error 01123 FEC00000 91 NOP 0 allow for error return 01124 60040060 0 IMM 92 LD R0 FRCLOSE attempt close of current file 01125 08800055 93 FREQ FILELUN 94 * \ / ignore error 01126 60040060 0 IMM 95 LD R0 FRCLOSE attempt close of DIR 01127 08800054 96 FREQ DIRLUN 97 * \ / ignore error 01128 FE0E1131 98 JMP IMMEXIT and give up 99 * --- 100 00001129 101 XERROR LABEL 01129 DC401132 102 CALLNP ERRPRINT print the error 0112A FEC00000 103 NOP 0 ignore error on error print 104 * Close opened luns 0000112B 105 ENDIT LABEL 0112B 60040060 0 IMM 106 LD R0 FRCLOSE attempt close of current file 0112C 08800055 107 FREQ FILELUN 108 * \ / ignore error 0112D 60040060 0 IMM 109 LD R0 FRCLOSE attempt close of DIR 0112E 08800054 110 FREQ DIRLUN 111 * \ / ignore error 0112F 60D78801 3 6 BASE 112 LD R3 SP,CURDIR get current DIR index 01130 FAE610FE 3 113 JDR R3 DIRLOOP jump and do another until end 114 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 26 (PW2SCHK) F 8 00001131 115 IMMEXIT LABEL 01131 5D1F8002 6 STAK 116 LEAVE POP return to caller 117 * --- 118 CRLOOP 0000110A F 8 55= 86j CURDIR 00178801 F 8 21= 38s 112 +DECODES UUUUUUUU F 8 51 80 +DIRBUFFER 02000057 F 8 44a 58a 65a +DIRENTWIDE 00000011 F 8 43 57 +DIREXT 00160803 F 8 68 +DIRHWIDE 00000008 F 8 43 DIRLOOP 000010FE F 8 37= 113j +DIRLUN 00000054 F 8 29s 32 45 49 59 96 110 +DIRNAME 00160801 F 8 66 +DIROPEN UUUUUUUU F 8 39 ENDIT 0000112B F 8 63j 105= +ERRPRINT UUUUUUUU F 8 90 102 FCLOSE 0000111F F 8 74j 78j 82= +FDRTYPEOD 00000009 F 8 62 +FDSTATRTYP 00002040 F 8 61 +FILELUN 00000055 F 8 34s 73 77 84 93 107 IMMEXIT 00001131 F 8 98j 115= +LOCALLUN 00000064 F 8 27 MAJERROR 00001122 F 8 28j 33j 89= +NUMDIRS UUUUUUUU F 8 36 +OPENBUF 0000007B F 8 72a +OPEXT 00000087 F 8 69s +OPFILE 00000085 F 8 67s +SCHK 000010F4 F 8 18 24= SKIPDSL 0000110A F 8 50j 53= +SLIST UUUUUUUU F 8 48 76 +SP 00138000 F 8 20 22e 38s 112 XERROR 00001129 F 8 40j 46j 60j 101= 119 END SCHK of main routine 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 27 (PW2SCHK) F 8 121 122 ********************************************************************************** 123 * This routine decodes the error code from R0 and prints * 124 * a message on the error out unit. * 125 ********************************************************************************** 126 127 ERRPRINT BLOCK 128 ENTRY ERRPRINT 129 130 BEGFRAME 131 ENDFRAME 132 01132 DD5F8001 6 STAK 133 ERRPRINT ENTRNP PUSH 01133 60920000 2 0 REG 134 LD R2 R0 copy R0 into R2 01134 60040028 0 IMM 135 LD R0 URERRORGET set up error string get 01135 6044006B 1 IMM 136 LD R1 ADR XREQBUFFER buffer to hold error string 01136 09040040 IMM 137 UREQ XREQBUFL specify buffer length 01137 FA08113E 0 138 JLTZ R0 ERPEXIT if this errors out, just quit 139 01138 30440040 1 IMM 140 RSB R1 XREQBUFL get length actually read 01139 60040040 0 IMM 141 LD R0 FRWRITE inform user of error 0113A 6084006B 2 IMM 142 LD R2 ADR XREQBUFFER from this buffer 0113B 088400CA IMM 143 FREQ LUNAOUT to fixed output lun of course 0113C FA08113E 0 144 JLTZ R0 ERPEXIT if this errors out, just quit 0113D 19C40001 7 IMM 145 ADD R7 1 advance to normal return 0000113E 146 ERPEXIT LABEL 0113E 5D1F8001 6 STAK 147 LEAVE POP 148 * --- 149 ERPEXIT 0000113E F 8 138j 144j 146= +ERRPRINT 00001132 F 8 128 133= +SP 00138000 F 8 130 131e +XREQBUFFER 0000006B F 8 136a 142a +XREQBUFL 00000040 F 8 137 140 150 END ERRPRINT of err printer 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 28 (PW2SCHK) F 8 152 153 ********************************************************************************** 154 * This routine just reads in the share list from the * 155 * curent unit. * 156 * Call: * 157 * CALL SLIST * 158 * PARVL * 159 * * 160 * * 161 ********************************************************************************** 162 163 SLIST BLOCK 164 ENTRY SLIST share list reader 165 166 BEGFRAME 00178801 6 BASE 167 SLUNIT BSS 1 unit number 168 ENDFRAME 169 0113F DD1F8002 6 STAK 170 SLIST ENTR PUSH get shared list entries 01140 C0578801 6 BASE 171 STPVL SP,SLUNIT save unit number 01141 600400E1 0 IMM 172 LD R0 FRREADSHL 01142 60441000 1 IMM 173 LD R1 SBUFFLEN possible 150 entries 01143 60840400 2 IMM 174 LD R2 ADR SBUFFER into this buffer 01144 08978801 6 BASE 175 FREQ SP,SLUNIT from this lun 01145 FA08114A 0 176 JLTZ R0 SLERROR on error, exit 177 01146 30441000 1 IMM 178 RSB R1 SBUFFLEN get length actually read 01147 14440004 1 IMM 179 DIV R1 CPW convert length to words 01148 E4400056 1 180 ST R1 COUNT 01149 19C40001 7 IMM 181 ADD R7 1 advance to skip return 0000114A 182 SLERROR LABEL 0114A 5D1F8002 6 STAK 183 LEAVE POP 184 * --- 185 +COUNT 00000056 F 8 180s +CPW 00000004 F 8 179 +SBUFFER 00000400 F 8 174a +SBUFFLEN 00001000 F 8 173 178 SLERROR 0000114A F 8 176j 182= +SLIST 0000113F F 8 164 170= SLUNIT 00178801 F 8 167= 171s 175 +SP 00138000 F 8 166 168e 171s 175 186 END SLIST of share list reader 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 29 (PW2SCHK) F 8 188 189 ********************************************************************************** 190 * This routine will check the given share list to see * 191 * if it violates any of our rules for security. * 192 * Call: * 193 * CALLNP DECODES * 194 * * 195 ********************************************************************************** 196 197 DECODES BLOCK 198 ENTRY DECODES share list checker 199 200 BEGFRAME 00178801 6 BASE 201 SBUFEND BSS 1 points to end of share list record 00178802 6 BASE 202 DACS BSS 1 decoded access 203 ENDFRAME 204 0114B DD5F8003 6 STAK 205 DECODES ENTRNP PUSH 0114C 60C00056 3 206 LD R3 COUNT get amount read 0114D FAC21161 3 207 JEQZ R3 NOPROC jump if no list to process 0114E 18C40400 3 IMM 208 ADD R3 ADR SBUFFER add address of share list buffer 0114F E4D78801 3 6 BASE 209 ST R3 SP,SBUFEND and save buffer end pointer 01150 38C00400 3 210 LEA R3 SBUFFER get address of share list buffer 00001151 211 DECODEIT2 LABEL 212 01151 6016C804 0 3 BASE 213 LD R0 R3,SHRPROJ pick up the project 01152 68001162 0 214 UCPR R0 RADBANG check against the limit 01153 FE06115E 215 JGE OKENTRY allow shares with .!* and .&* accounts 216 01154 6008CA30 0 3 ZBM 217 LD R0 R3,SHRACCESS/BITS 29:31 get access given away 01155 6030116B 0 0 @ 218 LD R0 @PACSTAB(R0) convert to ascii abbrev. 01156 E4178802 0 6 BASE 219 ST R0 SP,DACS hold on stack 01157 61538000 5 6 REG 220 LD R5 SP copy stack pointer 221 01158 DC001425 222 CALL PREPOUT call to print warning 01159 4100007B 223 PAR OPENBUF pass equip block address 0115A 4116C802 3 BASE 224 PAR R3,SHRACCT pass address of shared account 0115B 4116C804 3 BASE 225 PAR R3,SHRPROJ and project 0115C 41174802 5 BASE 226 PAR R5,DACS pass access code 0115D 4000116C 227 PARL DECSMES pass address of message 228 * \ / 0000115E 229 OKENTRY LABEL 0115E 18C8DF10 3 3 ZBM 230 ADD R3 R3,SHRENLEN add entry length to current pointer 0115F 64D78801 3 6 BASE 231 CPR R3 SP,SBUFEND check for to end yet 01160 FE081151 232 JLT DECODEIT2 loop back if not to end 00001161 233 NOPROC LABEL 01161 5D1F8003 6 STAK 234 LEAVE POP return 235 * --- 236 01162 E1D48000 237 RADBANG PAK6 ! 00001163 238 ACSTAB LABEL table of access decodings 01163 52570000 239 TEXTZ "RW" 0 - Read Write 01164 524F0000 240 TEXTZ "RO" 1 - Read Only 01165 4D4F0000 241 TEXTZ "MO" 2 - Modify 01166 584F0000 242 TEXTZ "XO" 3 - eXecute Only 01167 3F3F0000 243 TEXTZ "??" 4 - unknown 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 30 (PW2SCHK) F 8 01168 3F3F0000 244 TEXTZ "??" 5 - unknown 01169 3F3F0000 245 TEXTZ "??" 6 - unknown 0116A 3F3F0000 246 TEXTZ "??" 7 - unknown 0116B 00001163 247 PACSTAB PTR ACSTAB pointer to above table 248 0116C 205C4631 249 DECSMES TEXTZ " \F1\ is shared with \S2\.\R3\/\C4\" 250 ACSTAB 00001163 F 8 238= 247a +COUNT 00000056 F 8 206 DACS 00178802 F 8 202= 219s 226a DECODEIT2 00001151 F 8 211= 232j +DECODES 0000114B F 8 198 205= DECSMES 0000116C F 8 227a 249= NOPROC 00001161 F 8 207j 233= OKENTRY 0000115E F 8 215j 229= +OPENBUF 0000007B F 8 223a PACSTAB 0000116B F 8 218 247= +PREPOUT UUUUUUUU F 8 222 RADBANG 00001162 F 8 214 237= SBUFEND 00178801 F 8 201= 209s 231 +SBUFFER 00000400 F 8 208a 210a +SHRACCESS 00160000 F 8 217 +SHRACCT 00160802 F 8 224a +SHRENLEN 00081F10 F 8 230 +SHRPROJ 00160804 F 8 213 225a +SP 00138000 F 8 200 203e 209s 219s 220 231 251 END DECODES of sharelist decoder 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 31 (PW2SCHK) F 8 253 254 ********************************************************************************** 255 * DIROPEN * 256 * Routine to open a directory. * 257 * Call: * 258 * R3 = index to directory in below table * 259 * CALLNP DIROPEN * 260 * * 261 * * 262 * Initializes OPENBUF. * 263 * Eats R0:R2 * 264 ********************************************************************************** 265 266 DIROPEN BLOCK 267 ENTRY DIROPEN routine to open .DIR 268 ENTRY NUMDIRS number of entries in table 269 270 BEGFRAME 271 ENDFRAME 272 01175 DD5F8001 6 STAK 273 DIROPEN ENTRNP PUSH 01176 3800007B 0 274 LEA R0 OPENBUF get address of equip buffer 01177 6044003C 1 IMM 275 LD R1 OPENBUFL its length 01178 DA000800 0 1 276 FILLI R0 R1 000 clear it out 01179 60001188 0 277 LD R0 RADDIR get .DIR extension 0117A E4000087 0 278 ST R0 OPEXT and put into template 279 0117B 6092C000 2 3 REG 280 LD R2 R3 copy index 0117C 1C840003 2 IMM 281 MUL R2 3 multiply by table entry size 0117D 60241189 0 2 282 LD R0 DIRTABLE(R2) pick up high account name 0117E 6064118A 1 2 283 LD R1 DIRTABLE(R2+1) pick up low account name 0117F E6000080 01 284 ST2 R0 OPACCT and store into prototype block 01180 6024118B 0 2 285 LD R0 DIRTABLE(R2+2) pick up extension 01181 E4000082 0 286 ST R0 OPPROJ and store into prototype block 287 01182 60040051 0 IMM 288 LD R0 FROPENR OPEN DIRLUN=.DIR/RO 01183 3840007B 1 289 LEA R1 OPENBUF get pointer to equip block 01184 08800054 290 FREQ DIRLUN equip .DIR to this lun number 01185 FA081187 0 291 JLTZ R0 NOLUCK on error, exit 01186 19C40001 7 IMM 292 ADD R7 1 advance to skip return 00001187 293 NOLUCK LABEL 01187 5D1F8001 6 STAK 294 LEAVE POP 295 * --- 296 01188 58748800 297 RADDIR PAK6 DIR 298 00001189 299 DIRTABLE LABEL 01189 B674BFEF 300 PAK12 System 0118B E79DF200 301 PAK6 !!! 0118C 9B17AC90 302 PAK12 Offline 0118E E79DF200 303 PAK6 !!! 0118F 8E26E777 304 PAK12 Manager 01191 E79DF200 305 PAK6 !!! 01192 B51129BF 306 PAK12 Spooler 01194 E79DF200 307 PAK6 !!! 01195 00000000 308 PAK12 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 32 (PW2SCHK) F 8 01197 E79DF200 309 PAK6 !!! 01198 8E224780 310 PAK12 Mail 0119A E79DF200 311 PAK6 !!! 0119B 00000000 312 PAK12 0119D E79E5A88 313 PAK6 !!!FS 0119E 452C6465 314 PAK12 ACCESS 011A0 E79E5A88 315 PAK6 !!!FS 011A1 C13B157F 316 PAK12 UPDATE 011A3 E79E5A88 317 PAK6 !!!FS 00000009 ABS 318 NUMDIRS EQU (DISPW DIRTABLE)/3 011A6 00000000 319 VFD 0,0,0 room for another entry 320 +DIRLUN 00000054 F 8 290 +DIROPEN 00001175 F 8 267 273= DIRTABLE 00001189 F 8 282 283 285 299= 318e NOLUCK 00001187 F 8 291j 293= +NUMDIRS 00000009 F 8 268 318= +OPACCT 00000080 F 8 284s +OPENBUF 0000007B F 8 274a 289a +OPENBUFL 0000003C F 8 275 +OPEXT 00000087 F 8 278s +OPPROJ 00000082 F 8 286s RADDIR 00001188 F 8 277 297= +SP 00138000 F 8 270 271e 321 END DIROPEN 322 +COUNT 00000056 F 8 180s 206 +CPW 00000004 F 8 179 DECODES 0000114B F 8 51 80 197= 198 205= 251 +DIRBUFFER 02000057 F 8 44a 58a 65a +DIRENTWIDE 00000011 F 8 43 57 +DIREXT 00160803 F 8 68 +DIRHWIDE 00000008 F 8 43 +DIRLUN 00000054 F 8 29s 32 45 49 59 96 110 290 +DIRNAME 00160801 F 8 66 DIROPEN 00001175 F 8 39 266= 267 273= 321 ERRPRINT 00001132 F 8 90 102 127= 128 133= 150 +FDRTYPEOD 00000009 F 8 62 +FDSTATRTYP 00002040 F 8 61 +FILELUN 00000055 F 8 34s 73 77 84 93 107 +LOCALLUN 00000064 F 8 27 NUMDIRS 00000009 F 8 36 268 318= +OPACCT 00000080 F 8 284s +OPENBUF 0000007B F 8 72a 223a 274a 289a +OPENBUFL 0000003C F 8 275 +OPEXT 00000087 F 8 69s 278s +OPFILE 00000085 F 8 67s +OPPROJ 00000082 F 8 286s +PREPOUT UUUUUUUU F 8 222 +SBUFFER 00000400 F 8 174a 208a 210a +SBUFFLEN 00001000 F 8 173 178 +SCHK 000010F4 F 8 15 17= 18 24= +SHRACCESS 00160000 F 8 217 +SHRACCT 00160802 F 8 224a +SHRENLEN 00081F10 F 8 230 +SHRPROJ 00160804 F 8 213 225a 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 33 (PW2SCHK) F 8 SLIST 0000113F F 8 48 76 163= 164 170= 186 +SP 00138000 F 8 20 22e 38s 112 130 131e 166 168e 171s 175 200 203e 209s 219s 220 231 270 271e +XREQBUFFER 0000006B F 8 136a 142a +XREQBUFL 00000040 F 8 137 140 323 END SHARECHEK 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 34 (PW2SCHK) F 8 325 326 SUMMER BLOCK 327 ENTRY SUMME to checksum the program 328 329 ********************************************************************************** 330 * This routine will run a checksum on the secondary * 331 * password program and print the result. The person * 332 * running the program should know the proper result. * 333 * Since there are only two blocks of data and only * 334 * two blocks of program, we just exclusive or the * 335 * checksums of each block. * 336 ********************************************************************************** 337 338 SUMME BLOCK 339 ENTRY SUMME 340 341 BEGFRAME 00178801 6 BASE 342 SUMSOFAR BSS 1 running checksum 343 ENDFRAME 344 011A7 DD5F8002 6 STAK 345 SUMME ENTRNP PUSH 011A8 EC178801 6 BASE 346 STZ SP,SUMSOFAR initialize checksum result 011A9 5C001010 347 CMZ DDPWFLAG are we using the grabbag? 011AA FE0211B1 348 JEQ NOTDDP jump if not a date dependant PW 011AB DC0011C3 349 CALL CKSUMBLK checksum a block 011AC 40000800 350 PARL GRABBAG at this address 011AD E4178801 0 6 BASE 351 ST R0 SP,SUMSOFAR save result 011AE DC0011C3 352 CALL CKSUMBLK do another block 011AF 40000C00 353 PARL GRABBAG(WPP) next sequential address 011B0 F4178801 0 6 BASE 354 XORM R0 SP,SUMSOFAR combine with previous 000011B1 355 NOTDDP LABEL 011B1 DC0011C3 356 CALL CKSUMBLK checksum a block 011B2 40001000 357 PARL LOWCODE at this address 011B3 F4178801 0 6 BASE 358 XORM R0 SP,SUMSOFAR combine with previous 011B4 DC0011C3 359 CALL CKSUMBLK do another block 011B5 40001400 360 PARL LOWCODE(WPP) next sequential address 011B6 F4178801 0 6 BASE 361 XORM R0 SP,SUMSOFAR combine with previous 011B7 61538000 5 6 REG 362 LD R5 SP make a copy of stack pointer 011B8 DC001425 363 CALL PREPOUT print the results 011B9 41174801 5 BASE 364 PAR R5,SUMSOFAR pass result 011BA 400011BC 365 PARL SUMMES and surrounding message 011BB 5D1F8002 6 STAK 366 LEAVE POP 367 * --- 368 011BC 2050726F 369 SUMMES TEXTZ " Program checksum = \H1\" 370 +CKSUMBLK UUUUUUUU F 8 349 352 356 359 +DDPWFLAG 00001010 F 8 347 +GRABBAG 00000800 F 8 350a 353a +LOWCODE 00001000 F 8 357a 360a NOTDDP 000011B1 F 8 348j 355= +PREPOUT UUUUUUUU F 8 363 +SP 00138000 F 8 341 343e 346s 351s 354s 358s 361s 362 +SUMME 000011A7 F 8 339 345= SUMMES 000011BC F 8 365a 369= SUMSOFAR 00178801 F 8 342= 346s 351s 354s 358s 361s 364a 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 35 (PW2SCHK) F 8 +WPP 00000400 F 8 353a 360a 371 END SUMME of err printer 372 373 ********************************************************************************** 374 * * 375 * CKSUMBLK * 376 * * 377 * This routine computes the checksum for a specified buffer. * 378 * The checksum computation is an implementation of a CRC * 379 * generator. We implement this by using a PRMUT on the current * 380 * word. This is equivalent to a shift of 32 in a linear feedback * 381 * shift register. The mechanism works because the results in a * 382 * CRC generator are a linear combination of each input bit treated * 383 * separately. We just ran each of the possible 32 bits through * 384 * a simulated register and stored the results for the PRMUT. * 385 * Then we XOR in the new word. This is a division type operation. * 386 * Call: * 387 * CALL CKSUMBLK * 388 * PARL * 389 * * 390 * * 391 * Eats R0:R2 * 392 * * 393 ********************************************************************************** 394 395 CKSUMBLK BLOCK 396 ENTRY CKSUMBLK block checksummer 397 398 BEGFRAME 399 ENDFRAME 400 011C3 DD1F8001 6 STAK 401 CKSUMBLK ENTR PUSH 011C4 C0128000 2 REG 402 STPL R2 save buffer address 011C5 18840400 2 IMM 403 ADD R2 WPP advance pointer to buffer end 011C6 EC120000 0 REG 404 STZ R0 initialize checksum holder 011C7 6047FC00 1 IMM 405 LD R1 -WPP initialize page index 406 * \ / 407 000011C8 408 NEXTWORD LABEL 011C8 F00011CC 0 409 PRMUT R0 PRMUTTAB run 32 shifts of CRC 011C9 741C8800 0 21 BASE 410 XOR R0 R2,0(R1) combine in new word 011CA FA6011C8 1 411 IRJ R1 NEXTWORD do the whole block 412 * \ / 011CB 5D1F8001 6 STAK 413 LEAVE POP exit this routine 414 * --- 415 000011CC 416 PRMUTTAB LABEL 011CC E0000200 417 VFD 0E0000200 bit 0 through 32 shifts 011CD 70000100 418 VFD 070000100 bit 1 ... 011CE 38000080 419 VFD 038000080 011CF 1C000040 420 VFD 01C000040 011D0 0E000020 421 VFD 00E000020 011D1 07000010 422 VFD 007000010 011D2 03800008 423 VFD 003800008 011D3 01C00004 424 VFD 001C00004 425 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 36 (PW2SCHK) F 8 011D4 00E00002 426 VFD 000E00002 bit 8 ... 011D5 00700001 427 VFD 000700001 011D6 E0380200 428 VFD 0E0380200 011D7 701C0100 429 VFD 0701C0100 011D8 380E0080 430 VFD 0380E0080 011D9 1C070040 431 VFD 01C070040 011DA 0E038020 432 VFD 00E038020 011DB 0701C010 433 VFD 00701C010 434 011DC 0380E008 435 VFD 00380E008 bit 16 ... 011DD 01C07004 436 VFD 001C07004 011DE 00E03802 437 VFD 000E03802 011DF 00701C01 438 VFD 000701C01 011E0 E0380C00 439 VFD 0E0380C00 011E1 701C0600 440 VFD 0701C0600 011E2 380E0300 441 VFD 0380E0300 011E3 1C070180 442 VFD 01C070180 443 011E4 0E0380C0 444 VFD 00E0380C0 bit 24 ... 011E5 0701C060 445 VFD 00701C060 011E6 0380E030 446 VFD 00380E030 011E7 01C07018 447 VFD 001C07018 011E8 00E0380C 448 VFD 000E0380C 011E9 00701C06 449 VFD 000701C06 011EA 00380E03 450 VFD 000380E03 011EB E01C0501 451 VFD 0E01C0501 452 +CKSUMBLK 000011C3 F 8 396 401= NEXTWORD 000011C8 F 8 408= 411j PRMUTTAB 000011CC F 8 409 416= +SP 00138000 F 8 398 399e +WPP 00000400 F 8 403 405 453 END CKSUMBLK subroutine 454 CKSUMBLK 000011C3 F 8 349 352 356 359 395= 396 401= 453 +DDPWFLAG 00001010 F 8 347 +GRABBAG 00000800 F 8 350a 353a +LOWCODE 00001000 F 8 357a 360a +PREPOUT UUUUUUUU F 8 363 +SP 00138000 F 8 341 343e 346s 351s 354s 358s 361s 362 398 399e +SUMME 000011A7 F 8 327 338= 339 345= +WPP 00000400 F 8 353a 360a 403 405 455 END SUMMER 181 INPUT PW2LOG routine to do logging 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 37 (PW2LOG) F 9 2 3 FILECHK BLOCK outer block for the file check portion 4 5 ENTRY FAILURE where to come on failure 6 ENTRY SUCCESS where to come on success 7 8 ********************************************************************************** 9 * The entry format is that of a two word date time * 10 * with an entry code overlaying the (otherwise) unused * 11 * upper character. The entry codes are 0 for no errors, * 12 * 1 for 1 retry, 2 for 2 retries, 080 for bypass (RFP), * 13 * 0F0 for failure, and 0F1 for batch job. * 14 ********************************************************************************** 15 00000000 ABS 16 RAF0 EQU 0 RAF page number for log info 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 38 (PW2LOG) F 9 18 19 ********************************************************************************** 20 * We come to this routine if the user supplied a correct * 21 * response. We make the current entry and print out: * 22 * 1) the last good logon. * 23 * 2) the last failure, if one is present within the log block. * 24 * Call: * 25 * CALL SUCCESS * 26 * PARVL * 27 ********************************************************************************** 28 29 SUCCESS BLOCK 30 ENTRY SUCCESS routine to process successful logon 31 32 BEGFRAME 00178801 6 BASE 33 CODEVAL BSS 1 type of success 00178802 6 BASE 34 TIMEVAL BSS2 1 time of happening 00178804 6 BASE 35 TIMEZVAL BSS 1 time zone 36 ENDFRAME 37 011EC DD1F8005 6 STAK 38 SUCCESS ENTR PUSH 011ED C0578801 6 BASE 39 STPVL SP,CODEVAL save the type of call 011EE 6000004C 0 40 LD R0 TIMEZONE pick up the local time zone 011EF E4178804 0 6 BASE 41 ST R0 SP,TIMEZVAL and save for prepout 011F0 DC401244 42 CALLNP FILEMAP get in the file 011F1 60178801 0 6 BASE 43 LD R0 SP,CODEVAL pick up the type code 011F2 DC001253 44 CALL LOGNOW make the current entry 011F3 40520000 0 REG 45 PARVL R0 pass the type code 46 011F4 62800402 23 47 LD2 R2 RAFPREV pick up the previous time 011F5 604A8080 1 2 CBM 48 LD R1 R2/CH0 get the type code 011F6 78840FFF 2 IMM 49 AND R2 0FFF mask off entry code from upper date 011F7 E6978802 236 BASE 50 ST2 R2 SP,TIMEVAL save time on stack 011F8 38178802 0 6 BASE 51 LEA R0 SP,TIMEVAL and get its address 011F9 644400F0 1 IMM 52 CPR R1 FAILCODE check for a failure 011FA FE061217 53 JGE PRNTLFAIL go print last failure 011FB DC001425 54 CALL PREPOUT go print the message 011FC 41160400 0 @R 55 PAR @R0 pass the time 011FD 4000121D 56 PARL LSUCMES ... indicating previous success 57 011FE 60440004 1 IMM 58 LD R1 2*ENTRYSZ start with second previous entry 000011FF 59 KEEPON LABEL 011FF 60A20400 2 1 60 LD R2 RAFBUFR(R1) pick up MS word 01200 600A8080 0 2 CBM 61 LD R0 R2/CH0 pick up entry code 01201 640400F0 0 IMM 62 CPR R0 FAILCODE was this a failure? 01202 FE06120F 63 JGE PRINTAFAIL print it as previous 01203 18440002 1 IMM 64 ADD R1 ENTRYSZ advance to next entry 01204 644403FE 1 IMM 65 CPR R1 WPP-ENTRYSZ check against end of buffer 01205 FE0A11FF 66 JLE KEEPON jump back if another entry to look at 67 * \ / 01206 DC001425 68 CALL PREPOUT call to print message indicating 01207 40001209 69 PARL NOFAILMES ... no failures in log 01208 FE0E121A 70 JMP PMEXIT return 71 * --- 72 01209 204E6F20 73 NOFAILMES TEXTZ " No failures in log." 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 39 (PW2LOG) F 9 74 0000120F 75 PRINTAFAIL LABEL print out last attempt that failed 0120F 78840FFF 2 IMM 76 AND R2 0FFF mask off entry code from upper date 01210 60E20401 3 1 77 LD R3 RAFBUFR(R1+1) get LS word 01211 E6978802 236 BASE 78 ST2 R2 SP,TIMEVAL save time on stack 01212 38178802 0 6 BASE 79 LEA R0 SP,TIMEVAL and get its address 01213 DC001425 80 CALL PREPOUT print out time of last failure 01214 41160400 0 @R 81 PAR @R0 pass the time 01215 4000122F 82 PARL AFAILMES 83 01216 FE0E121A 84 JMP PMEXIT return 85 * --- 86 00001217 87 PRNTLFAIL LABEL print that last attempt was a failure 01217 DC001425 88 CALL PREPOUT print the last attempt and indicate 01218 41160400 0 @R 89 PAR @R0 pass the time 01219 40001226 90 PARL LFAILMES ... that it was a failure 0000121A 91 PMEXIT LABEL 0121A 60040060 0 IMM 92 LD R0 FRCLOSE ask for a close 0121B 08800051 93 FREQ LOGLUN and do the request 0121C 5D1F8005 6 STAK 94 LEAVE POP return 95 * --- 96 0121D 204C6173 97 LSUCMES TEXTZ " Last logon attempt good on \T1\" 98 01226 204C6173 99 LFAILMES TEXTZ " Last logon attempt failed on \T1\" 100 0122F 204C6173 101 AFAILMES TEXTZ " Last failure occurred on \T1\" 102 AFAILMES 0000122F F 9 82a 101= +CH0 00000080 F 9 48 61 CODEVAL 00178801 F 9 33= 39s 43 +ENTRYSZ 00000002 F 9 58 64 65 +FAILCODE 000000F0 F 9 52 62 +FILEMAP UUUUUUUU F 9 42 KEEPON 000011FF F 9 59= 66j LFAILMES 00001226 F 9 90a 99= +LOGLUN 00000051 F 9 93 +LOGNOW UUUUUUUU F 9 44 LSUCMES 0000121D F 9 56a 97= NOFAILMES 00001209 F 9 69a 73= PMEXIT 0000121A F 9 70j 84j 91= +PREPOUT UUUUUUUU F 9 54 68 80 88 PRINTAFAIL 0000120F F 9 63j 75= PRNTLFAIL 00001217 F 9 53j 87= +RAFBUFR 00000400 F 9 60 77 +RAFPREV 00000402 F 9 47 +SP 00138000 F 9 32 36e 39s 41s 43 50s 51a 78s 79a +SUCCESS 000011EC F 9 30 38= TIMEVAL 00178802 F 9 34= 50s 51a 78s 79a +TIMEZONE 0000004C F 9 40 TIMEZVAL 00178804 F 9 35= 41s +WPP 00000400 F 9 65 103 END SUCCESS 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 40 (PW2LOG) F 9 105 106 ********************************************************************************** 107 * Come to this routine when the user has failed to * 108 * properly respond to the stimulus. We update the file * 109 * to indicate that we had a failure and exit. * 110 * Call: * 111 * CALL FAILURE * 112 * PARVL * 113 ********************************************************************************** 114 115 FAILURE BLOCK 116 ENTRY FAILURE entry when we had a bad attempt 117 118 BEGFRAME 00178801 6 BASE 119 CODEVAL BSS 1 entry type to log 120 ENDFRAME 121 01237 DD1F8002 6 STAK 122 FAILURE ENTR PUSH 01238 C0578801 6 BASE 123 STPVL SP,CODEVAL store away the requested code 01239 DC401244 124 CALLNP FILEMAP 0123A 60178801 0 6 BASE 125 LD R0 SP,CODEVAL pick up failure type code 0123B DC001253 126 CALL LOGNOW make the current entry 0123C 40520000 0 REG 127 PARVL R0 pass failure type code 0123D 60040060 0 IMM 128 LD R0 FRCLOSE ask for a close 0123E 08800051 129 FREQ LOGLUN and do the request 0123F 5D1F8002 6 STAK 130 LEAVE POP return 131 * --- 132 CODEVAL 00178801 F 9 119= 123s 125 +FAILURE 00001237 F 9 116 122= +FILEMAP UUUUUUUU F 9 124 +LOGLUN 00000051 F 9 129 +LOGNOW UUUUUUUU F 9 126 +SP 00138000 F 9 118 120e 123s 125 133 END FAILURE of failure processor 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 41 (PW2LOG) F 9 135 136 ********************************************************************************** 137 * This routine manages the file opening and page map in. * 138 * Call: * 139 * CALLNP FILEMAP * 140 * * 141 ********************************************************************************** 142 143 FILEMAP BLOCK routine to check the history file 144 ENTRY FILEMAP to check the history file 145 146 BEGFRAME 147 ENDFRAME 148 01240 6E756D62 149 FILESTR TEXT "numbers.acc" 00000010 ABS 150 FILESTRLEN EQU DISPC FILESTR and its length 151 01244 DD5F8001 6 STAK 152 FILEMAP ENTRNP PUSH 01245 60040122 0 IMM 153 LD R0 URFREELUN get next free lun number 01246 09040064 IMM 154 UREQ LOCALLUN base is highest unit 01247 FA081252 0 155 JLTZ R0 FILEFAIL on error, exit 01248 E4400051 1 156 ST R1 LOGLUN lun to equip log 157 01249 60040268 0 IMM 158 LD R0 FRNOPENCW open the file for write (create if needed) 0124A 60440010 1 IMM 159 LD R1 FILESTRLEN get the string length 0124B 60841240 2 IMM 160 LD R2 ADR FILESTR and the address 0124C 08800051 161 FREQ LOGLUN and request the equip 0124D FA081252 0 162 JLTZ R0 FILEFAIL if we get an error, ignore the problem 0124E 60040091 0 IMM 163 LD R0 FRMAPIN ask for a map in of a data page 0124F 60440000 1 IMM 164 LD R1 RAF0 specify which RAF page 01250 60840001 2 IMM 165 LD R2 RAFBUFPN specify which virtual memory page 01251 08800051 166 FREQ LOGLUN and do the request 00001252 167 FILEFAIL LABEL 01252 5D1F8001 6 STAK 168 LEAVE POP return to caller 169 * --- 170 FILEFAIL 00001252 F 9 155j 162j 167= +FILEMAP 00001244 F 9 144 152= FILESTR 00001240 F 9 149= 150e 160a FILESTRLEN 00000010 F 9 150= 159 +LOCALLUN 00000064 F 9 154 +LOGLUN 00000051 F 9 156s 161 166 +RAF0 00000000 F 9 164 +RAFBUFPN 00000001 F 9 165 +SP 00138000 F 9 146 147e 171 END FILEMAP 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 42 (PW2LOG) F 9 173 174 ********************************************************************************** 175 * This routine moves up the existing entries and * 176 * makes the current entry in the file. * 177 * This routine moves the entire block of entries * 178 * up rather than keeping a set of circular pointers * 179 * so as to make it extremely easy for a human to use * 180 * peek&poke to scan the file. * 181 * The entries are two words long and contain... * 182 * Failure code in 8 bits. * 183 * Port number of attempt in 12 bits. * 184 * 44 bit date in the remaining 44 bits. * 185 * Call: * 186 * CALL LOGNOW * 187 * PARVL * 188 * Eats R0:R2 * 189 ********************************************************************************** 190 191 LOGNOW BLOCK 192 ENTRY LOGNOW entry when we had a bad attempt 193 194 BEGFRAME 00178801 6 BASE 195 ENTRYCODE BSS 1 code for type of entry to make 196 ENDFRAME 197 01253 DD1F8002 6 STAK 198 LOGNOW ENTR PUSH 01254 C0578801 6 BASE 199 STPVL SP,ENTRYCODE save the entry type 01255 380007FE 0 200 LEA R0 RAFBUFR(WPP-ENTRYSZ) point to pick up location 01256 38800800 2 201 LEA R2 RAFBUFR(WPP) point to end of buffer 01257 6047F008 1 IMM 202 LD R1 -(CPP-ENTRYSZ*CPW) get length to move 01258 DA880800 2 01 203 MOVE R2 R0 R1 move up the entire buffer 01259 6200004A 01 204 LD2 R0 DATETIME pick up current date 0125A 60978801 2 6 BASE 205 LD R2 SP,ENTRYCODE get the entry type 0125B E48A0080 2 0 CBM 206 ST R2 R0/CH0 and place in upper byte of time 0125C 60840018 2 IMM 207 LD R2 ADR PIBUFFER get pointer to buffer 0125D 6088A101 2 2 ZBM 208 LD R2 R2,PIPORTNUM get the port number 0125E E48A10C0 2 0 CBM 209 ST R2 R0/BITS 8:19 and save port number of attempt 0125F E6000400 01 210 ST2 R0 RAFCUR and store as first entry 01260 5D1F8002 6 STAK 211 LEAVE POP return 212 * --- 213 +CH0 00000080 F 9 206s +CPP 00001000 F 9 202 +CPW 00000004 F 9 202 +DATETIME 0000004A F 9 204 ENTRYCODE 00178801 F 9 195= 199s 205 +ENTRYSZ 00000002 F 9 200a 202 +LOGNOW 00001253 F 9 192 198= +PIBUFFER 02000018 F 9 207a +PIPORTNUM 00082101 F 9 208 +RAFBUFR 00000400 F 9 200a 201a +RAFCUR 00000400 F 9 210s +SP 00138000 F 9 194 196e 199s 205 +WPP 00000400 F 9 200a 201a 214 END LOGNOW of entry logger 215 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 43 (PW2LOG) F 9 +CH0 00000080 F 9 48 61 206s +CPP 00001000 F 9 202 +CPW 00000004 F 9 202 +DATETIME 0000004A F 9 204 +ENTRYSZ 00000002 F 9 58 64 65 200a 202 +FAILCODE 000000F0 F 9 52 62 +FAILURE 00001237 F 9 5 115= 116 122= FILEMAP 00001244 F 9 42 124 143= 144 152= 171 +LOCALLUN 00000064 F 9 154 +LOGLUN 00000051 F 9 93 129 156s 161 166 LOGNOW 00001253 F 9 44 126 191= 192 198= 214 +PIBUFFER 02000018 F 9 207a +PIPORTNUM 00082101 F 9 208 +PREPOUT UUUUUUUU F 9 54 68 80 88 RAF0 00000000 F 9 16= 164 +RAFBUFPN 00000001 F 9 165 +RAFBUFR 00000400 F 9 60 77 200a 201a +RAFCUR 00000400 F 9 210s +RAFPREV 00000402 F 9 47 +SP 00138000 F 9 32 36e 39s 41s 43 50s 51a 78s 79a 118 120e 123s 125 146 147e 194 196e 199s 205 +SUCCESS 000011EC F 9 6 29= 30 38= +TIMEZONE 0000004C F 9 40 +WPP 00000400 F 9 65 200a 201a 216 END FILECHK of file checker 182 prepoutm pure,online 182 * Generating PREPOUT, variables=pure, output=online, name=PREPOUT, charm= +SP 00138000 F 13 167 174e 201s 202s 208 226 256 257 +SP 00138000 F 13 283 285e 316s 334 339 +SP 00138000 F 13 388 389e +SP 00138000 F 13 469 471e 480s 484 +SP 00138000 F 13 509 511e 515s 522s 551 +SP 00138000 F 13 576 577e +SP 00138000 F 13 644 647e 655s 656s 658s 664 708 +SP 00138000 F 13 750 754e 757s 758s 760s 762s 763 772 +SP 00138000 F 13 812 816e 819s 820s 822s 826 838s 845s 850 856a +SP 00138000 F 13 885 889e 896s 897s 899s 901s 905 911 916s 919 +SP 00138000 F 13 947 948e +SP 00138000 F 13 977 980e 983s 984s 986 990 991 +SP 00138000 F 13 1018 1019e +SP 00138000 F 13 1068 1071e 1074s 1075s 1077 1082 1083 +SP 00138000 F 13 167 174e 201s 202s 208 226 256 257 283 285e 316s 334 339 388 389e 469 471e 480s 484 509 511e 515s 522s 551 576 577e 644 647e 655s 656s 658s 664 708 750 754e 757s 758s 760s 762s 763 772 812 816e 819s 820s 822s 826 838s 845s 850 856a 885 889e 896s 897s 899s 901s 905 911 916s 919 947 948e 977 980e 983s 984s 986 990 991 1018 1019e 1068 1071e 1074s 1075s 1077 1082 1083 +SP 00138000 F 14 289 296s 301s 347 +SP 00138000 F 14 377s 386 +SP 00138000 F 14 420s 429 +SP 00138000 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s +SP 00138000 F 15 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 44 (DATESTUFF) F 15 System date packers and unpackers +SP 00138000 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s +SP 00138000 F 14 490 510s 511s 513s 515s 517s 522s 525s 527s 536 538 545 555 561s 565 570s 573s 574s 578 587 597 605a 613a 619 626a 633 640a 649a 657 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s +CHARM MACRO F 12 4 5 +INITPSECT MACRO F 10 15 20 +PROG MACRO F 10 13 F 14 130 F 16 5 +SP 00138000 F 10 12 F 13 167 174e 201s 202s 208 226 256 257 283 285e 316s 334 339 388 389e 469 471e 480s 484 509 511e 515s 522s 551 576 577e 644 647e 655s 656s 658s 664 708 750 754e 757s 758s 760s 762s 763 772 812 816e 819s 820s 822s 826 838s 845s 850 856a 885 889e 896s 897s 899s 901s 905 911 916s 919 947 948e 977 980e 983s 984s 986 990 991 1018 1019e 1068 1071e 1074s 1075s 1077 1082 1083 F 14 151 289 296s 301s 347 359s 364 377s 386 398s 407 420s 429 441s 446 456s 461 490 510s 511s 513s 515s 517s 522s 525s 527s 536 538 545 555 561s 565 570s 573s 574s 578 587 597 605a 613a 619 626a 633 640a 649a 657 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s +VARS MACRO F 10 14 F 14 111 F 16 3 +CHARM MACRO F 12 4 5 +INITPSECT MACRO F 10 15 20 F 16 8 +PROG MACRO F 10 7 13 F 14 130 F 16 5 +PROGRAM! 000015E1 F 10 5e 5= 7a F 16 8e 8a 8= 8e +PSECT! 00000000 F 10 5= 5a 5e 5e 5a 7= 7a 7a 7e 7e F 16 8= +SP 00138000 F 10 12 F 13 167 174e 201s 202s 208 226 256 257 283 285e 316s 334 339 388 389e 469 471e 480s 484 509 511e 515s 522s 551 576 577e 644 647e 655s 656s 658s 664 708 750 754e 757s 758s 760s 762s 763 772 812 816e 819s 820s 822s 826 838s 845s 850 856a 885 889e 896s 897s 899s 901s 905 911 916s 919 947 948e 977 980e 983s 984s 986 990 991 1018 1019e 1068 1071e 1074s 1075s 1077 1082 1083 F 14 151 289 296s 301s 347 359s 364 377s 386 398s 407 420s 429 441s 446 456s 461 490 510s 511s 513s 515s 517s 522s 525s 527s 536 538 545 555 561s 565 570s 573s 574s 578 587 597 605a 613a 619 626a 633 640a 649a 657 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s +VARIABLES! 00000149 F 10 5a 7e 7= F 16 8= +VARS MACRO F 10 5 14 F 14 111 F 16 3 184 INPUT PW2MAKE routine to do date dependant stuff 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 45 (PW2MAKE) F 17 2 3 PWGEN BLOCK PW generator block 4 ENTRY DTDMAKE to make date dependant PW 5 00000007 ABS 6 MAXPWLEN EQU 7 largest password that we store 7 015E1 88480052 8 PNUMBPTR PTR PNUM/BIT 17 highest bit shuffled 015E2 88C80052 9 PNUMGPTR PTR PNUM/BITS 17:19 highest trio substituted 10 010015E3 11 SHUFTABLE BSSB 4:0 015E3 00000004 12 VFDB 4:03,09,07,0C,08,06,0E,02,01,0A,05,00,0D,0B,04 015E5 0000000B 13 VFDB 4:04,02,05,0D,00,0E,09,01,03,08,07,0A,06,0C,0B 015E7 0000000C 14 VFDB 4:01,06,03,05,0B,02,0D,0A,09,04,0E,07,00,08,0C 015E9 00000003 15 VFDB 4:04,0B,0D,00,05,0A,01,02,0E,06,08,0C,07,09,03 015EB 00000004 16 VFDB 4:0B,0C,06,0A,07,08,03,01,09,0E,00,0D,05,02,04 015ED 00000001 17 VFDB 4:0C,08,00,07,0E,04,09,0A,0D,02,0B,05,03,06,01 015EF 010815E3 18 SHUFPINIT PTR SHUFTABLE initial pointer to 'random' integer supply 19 20 * table of intervals between PW characters in GRABBAG 015F9 0000000B 21 INTVTAB VFD 41,07,19,53,23,17,29,31,13,11 22 23 ********************************************************************************** 24 * * 25 * General Scheme. * 26 * We calculate the current week number (see note below) * 27 * and use it to generate the addresses into the GRABBAG * 28 * table from which we extract the current secondary password. * 29 * The longest password that we store is 7 characters, shorter * 30 * passwords must have a 0 stored into the table as a terminator. * 31 * * 32 * Week number. * 33 * The week number is the result of dividing the time by * 34 * the number of milliseconds per week after subtracting a bias * 35 * to make weeks start on Sunday (that is, Saturday Midnight). * 36 * Some reference points: * 37 * 27 Nov, 1988 is week #1A80 = 6784 * 38 * 25 Dec, 1988 is week #1A84 = 6788 * 39 * 22 Jan, 1989 is week #1A88 = 6792 * 40 * 19 Mar, 1989 is week #1A90 = 6800 * 41 * 9 Jul, 1989 is week #1AA0 = 6816 * 42 * 29 Oct, 1989 is week #1AB0 = 6832 * 43 * 18 Feb, 1990 is week #1AC0 = 6848 * 44 * 10 Jun, 1990 is week #1AD0 = 6864 * 45 * 30 Sep, 1990 is week #1AE0 = 6880 * 46 * 20 Jan, 1991 is week #1AF0 = 6896 * 47 * 12 May, 1991 is week #1B00 = 6912 * 48 * The ending time in use (about 11 years in the future) is: * 49 * 28 May, 2000 is week #1CD8 = 7384 * 50 * Last possible date is week #719F = 29087 * 51 * The difference between 27 Nov, 1988 and the last possible * 52 * date is #571f = 22303 * 53 * The week number fits into a 15 bit field and this * 54 * is the size used in the scrambler. * 55 * * 56 * Grab bag format. * 57 * The passwords are put into the grab bag array according * 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 46 (PW2MAKE) F 17 58 * to the week number that they are for. Multiple hits of one * 59 * location are resolved (to the extent possible) by choosing * 60 * a password that has the same letter in the already used * 61 * location. * 62 ********************************************************************************** 63 00001A90 ABS 64 STRTOFTIME EQU 01A90 starting week for this program 00001CD8 ABS 65 ENDOFTIME EQU 01CD8 last time for this program 66 015FA 020C0800 67 GRABBAGPTR PTR GRABBAG/BITS 0:7 pointer to grab bag 68 69 ********************************************************************************** 70 * This routine is used to make a password that changes * 71 * on a periodic basis. We just generate the password into the * 72 * normal password spot and let the body of the program use it * 73 * as if it were a normal fixed password. * 74 * Eats R0:R4 * 75 ********************************************************************************** 76 015FC 14997000 77 FIRSTSUN VFD 0,4*24*60*60*1000 015FE 240C8400 78 MSECSWEEK VFD 0,7*24*60*60*1000 79 80 MAKERBLK BLOCK password generator 81 ENTRY DTDMAKE to make date dependant PW 82 83 BEGFRAME 84 ENDFRAME 85 015FF DD5F8001 6 STAK 86 DTDMAKE ENTRNP PUSH 01600 6280004A 23 87 LD2 R2 DATETIME load the current date/time 01601 128015FB 23 88 SUB2 R2 FIRSTSUN allow for first Sunday 01602 168015FD 23 89 DIV2 R2 MSECSWEEK make into a week number 01603 E4C00052 3 90 ST R3 PNUM save away week number 91 01604 DC401612 92 CALLNP SCRAMBLER mix up PNUM 01605 60C40000 3 IMM 93 LD R3 0 get store index 00001606 94 PWSLOOP LABEL 01606 60800052 2 95 LD R2 PNUM get the mangled value 01607 78841FFF 2 IMM 96 AND R2 GRABMASK mask to table size 01608 603415FA 0 2 @ 97 LD R0 @GRABBAGPTR(R2) get indicated character 01609 E4361001 0 3 @ 98 ST R0 @PWPTR(R3) store into PW location 0160A FA021611 0 99 JEQZ R0 PWEXIT make special check for a terminator 0160B 602615F0 0 3 100 LD R0 INTVTAB(R3) get interval 0160C D012C000 3 REG 101 INC R3 advance store pointer 0160D 98000052 0 102 ADDM R0 PNUM advance grabbag pointer 0160E 64C40007 3 IMM 103 CPR R3 MAXPWLEN check for past maximum size 0160F FE081606 104 JLT PWSLOOP loop if not there yet 105 * \ / 01610 EC361001 3 @ 106 STZ @PWPTR(R3) null terminate the password 107 00001611 108 PWEXIT LABEL 01611 5D1F8001 6 STAK 109 LEAVE POP return to caller 110 * --- 111 +DATETIME 0000004A F 17 87 +DTDMAKE 000015FF F 17 81 86= 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 47 (PW2MAKE) F 17 +FIRSTSUN 000015FB F 17 88 +GRABBAGPTR 000015FA F 17 97 +GRABMASK 00001FFF F 17 96 +INTVTAB 000015F0 F 17 100 +MAXPWLEN 00000007 F 17 103 +MSECSWEEK 000015FD F 17 89 +PNUM 00000052 F 17 90s 95 102s PWEXIT 00001611 F 17 99j 108= +PWPTR 00001001 F 17 98s 106s PWSLOOP 00001606 F 17 94= 104j +SCRAMBLER UUUUUUUU F 17 92 +SP 00138000 F 17 83 84e 112 END MAKERBLK end of password generator 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 48 (PW2MAKE) F 17 114 115 ********************************************************************************** 116 * Routine to scramble PNUM. * 117 * Eats R0:R2 * 118 ********************************************************************************** 119 120 SCRAMBLER BLOCK 121 ENTRY SCRAMBLER 122 01612 DD5F8001 6 STAK 123 SCRAMBLER ENTRNP STAK SP,1 01613 DC40161F 124 CALLNP SCRAMINIT set up scrambler 01614 DC40162C 125 CALLNP SUBSER call to do substitute 01615 DC401623 126 CALLNP SHUFFLER now do transposition 01616 DC40162C 127 CALLNP SUBSER call to do substitute 01617 DC401623 128 CALLNP SHUFFLER now do transposition 01618 DC40162C 129 CALLNP SUBSER call to do substitute 01619 DC401623 130 CALLNP SHUFFLER now do transposition 0161A DC40162C 131 CALLNP SUBSER call to do substitute 0161B DC401623 132 CALLNP SHUFFLER now do transposition 0161C DC40162C 133 CALLNP SUBSER call to do substitute 0161D DC401623 134 CALLNP SHUFFLER now do transposition 0161E 5D1F8001 6 STAK 135 LEAVE STAK SP,1 136 * --- 137 +SCRAMBLER 00001612 F 17 121 123= +SCRAMINIT UUUUUUUU F 17 124 +SHUFFLER UUUUUUUU F 17 126 128 130 132 134 +SP 00138000 F 17 123s 135 +SUBSER UUUUUUUU F 17 125 127 129 131 133 138 END SCRAMBLER 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 49 (PW2MAKE) F 17 140 141 ********************************************************************************** 142 * Routine to set up for PNUM processing. * 143 * Eats R0. * 144 ********************************************************************************** 145 146 SCRAMINIT BLOCK 147 ENTRY SCRAMINIT 148 0161F DD5F8001 6 STAK 149 SCRAMINIT ENTRNP STAK SP,1 01620 600015EF 0 150 LD R0 SHUFPINIT initialize the 'random' number pointer 01621 E4000053 0 151 ST R0 SHUFPTR 01622 5D1F8001 6 STAK 152 LEAVE STAK SP,1 153 * --- 154 +SCRAMINIT 0000161F F 17 147 149= +SHUFPINIT 000015EF F 17 150 +SHUFPTR 00000053 F 17 151s +SP 00138000 F 17 149s 152 155 END SCRAMINIT 156 157 ********************************************************************************** 158 * Shuffler * 159 * This routine shuffles the right 15 bits in the current * 160 * PNUM according to integers accessed by the SHUFPTR. * 161 * Eats R0:R2 * 162 ********************************************************************************** 163 164 SHUFFLER BLOCK to transpose bits 165 ENTRY SHUFFLER 166 01623 DD5F8001 6 STAK 167 SHUFFLER ENTRNP STAK SP,1 01624 6084000E 2 IMM 168 LD R2 15-1 load number of bits to shuffle 00001625 169 SHUFFLOOP LABEL 01625 60500053 1 @ 170 LD R1 @SHUFPTR pick up the next integer 01626 D0800053 171 INCP SHUFPTR and advance to next table entry 01627 603415E1 0 2 @ 172 LD R0 @PNUMBPTR(R2) pick up next bit 01628 E03215E1 0 1 @ 173 EXCH R0 @PNUMBPTR(R1) exchange with indicated bit 01629 E43415E1 0 2 @ 174 ST R0 @PNUMBPTR(R2) and back into the original position 0162A FAA61625 2 175 JDR R2 SHUFFLOOP count and test 0162B 5D1F8001 6 STAK 176 LEAVE STAK SP,1 177 * --- 178 +PNUMBPTR 000015E1 F 17 172 173s 174s +SHUFFLER 00001623 F 17 165 167= SHUFFLOOP 00001625 F 17 169= 175j +SHUFPTR 00000053 F 17 170 171s +SP 00138000 F 17 167s 176 179 END SHUFFLER 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 50 (PW2MAKE) F 17 181 182 ********************************************************************************** 183 * Substituter * 184 * This routine substitutes each 3 bit field in PNUM * 185 * with the value extracted from the Substituter table. * 186 * Eats R0:R1 * 187 ********************************************************************************** 188 189 SUBSER BLOCK to transpose bits 190 ENTRY SUBSER 191 0162C DD5F8001 6 STAK 192 SUBSER ENTRNP STAK SP,1 0162D 60440004 1 IMM 193 LD R1 5-1 load number of fields to subs 0000162E 194 SUBSLOOP LABEL 0162E 603215E2 0 1 @ 195 LD R0 @PNUMGPTR(R1) pick up next field 0162F 60301634 0 0 @ 196 LD R0 @PSUBSTABLE(R0) do the subs 01630 E43215E2 0 1 @ 197 ST R0 @PNUMGPTR(R1) and back into the original position 01631 FA66162E 1 198 JDR R1 SUBSLOOP count and test 01632 5D1F8001 6 STAK 199 LEAVE STAK SP,1 200 * --- 201 01632 00000001 202 SUBSTABLE VFDB 3:3,5,4,0,7,6,2,1 01634 00C81633 203 PSUBSTABLE PTR SUBSTABLE 204 +PNUMGPTR 000015E2 F 17 195 197s PSUBSTABLE 00001634 F 17 196 203= +SP 00138000 F 17 192s 199 +SUBSER 0000162C F 17 190 192= SUBSLOOP 0000162E F 17 194= 198j SUBSTABLE 00C01633 F 17 202= 203a 205 END SUBSER 206 207 INPUT PW2FILLER include routine to fill array 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 51 (PW2FILLER) F 18 2 00001635 3 FROTZ LABEL 4 ORG MA 05000 5 05000 00001A90 6 FIRSTWEEK VFD STRTOFTIME first week that we consider 05001 00001CD8 7 LASTWEEK VFD ENDOFTIME last week that we consider 8 9 ********************************************************************************** 10 * Table Filler * 11 * This routine fills in all of the specified passwords. * 12 * It reads a record from a file, and places the characters * 13 * from that record into the GRABBAG table for the current week, * 14 * then increments the current week and reads the next line. * 15 * An empty record terminates the filler program. * 16 * As each character is placed into the table, we check to * 17 * ensure that the character we are overlaying is either the same * 18 * or a *. * 19 * We assume that a table of passwords to put into the * 20 * table is opened on unit 160. We write any conflicts out * 21 * to unit 170, which must be opened RW. * 22 ********************************************************************************** 23 24 FILLER BLOCK 25 ENTRY FILLER 26 000000A0 ABS 27 FILLUN EQU 160 unit for password list read 28 00005002 29 PWLEN BSS 1 length of PW currently being processed 00005003 30 ACTLEN BSS 1 length of line read 31 0000001E ABS 32 FILBUFL EQU 30 length of file buffer 00005004 33 WFILBUF BSS 0 word address of buffer 02005004 34 FILBUF BSSC FILBUFL and the buffer 0500C 020C5004 35 PFILBUF PTR FILBUF pointer to buffer 36 00000008 ABS 37 PWOFFSET EQU 8 character number where PW starts 0500D 020C5006 38 PARCON PTR FILBUF(PWOFFSET) pointer to fill in area (over PW) 00005006 39 WPWLOC EQU WFILBUF(PWOFFSET/CPW) 40 0000500E 41 WPWHOLD BSS 0 word address for PW being entered 0200500E 42 PWHOLD BSSC 8 PW being entered 05010 020C500E 43 PPWHOLD PTR PWHOLD pointer to PW being entered 44 00005011 45 WEEK BSS 1 starts with this week 46 00000010 BYTE 47 COLBIT EQU BIT 0 set on collision 48 00005012 49 FILLER LABEL 05012 618400A3 6 IMM 50 LD SP ADR STACKTOP initialize the stack pointer 51 05013 60040800 0 IMM 52 LD R0 ADR GRABBAG get address of array 05014 60442000 1 IMM 53 LD R1 GRABLEN get length of array 05015 DA00082A 0 1 54 FILLI R0 R1 "*" 55 05016 60005000 0 56 LD R0 FIRSTWEEK get starting time 05017 E4005011 0 57 ST R0 WEEK and initialize start 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 52 (PW2FILLER) F 18 58 00005018 59 ANOTHER LABEL 00005018 60 WEEKLOOP LABEL 05018 60040030 0 IMM 61 LD R0 FRREAD get read code 05019 6044001E 1 IMM 62 LD R1 FILBUFL get read length 0501A 6080500C 2 63 LD R2 PFILBUF get pointer to buffer 0501B 088400A0 IMM 64 FREQ FILLUN and do read 0501C FA08505B 0 65 JLTZ R0 FILERROR error reading file 0501D 3044001E 1 IMM 66 RSB R1 FILBUFL get actual length read 0501E EC32500C 1 @ 67 STZ @PFILBUF(R1) zero terminate the PW 0501F E4405003 1 68 ST R1 ACTLEN save actual length 05020 FA425056 1 69 JEQZ R1 TERMINATE jump if end 05021 10440008 1 IMM 70 SUB R1 PWOFFSET subtract offset 05022 18440001 1 IMM 71 ADD R1 1 bump size so terminator is included 05023 50440007 1 IMM 72 MIN R1 MAXPWLEN except nothing is longer than this 05024 E4405002 1 73 ST R1 PWLEN save length for later 74 05025 62005006 01 75 LD2 R0 WPWLOC pick up password from input buffer 05026 E600500E 01 76 ST2 R0 WPWHOLD and store into PW holder 77 78 ********************************************************************************** 79 * This section checks to see if the next weeks location * 80 * in the GRABBAG string can take the password that we just * 81 * read from the input file. * 82 ********************************************************************************** 83 05027 60005011 0 84 LD R0 WEEK get the current week 05028 E4000052 0 85 ST R0 PNUM and set up for scramble 86 05029 DC401612 87 CALLNP SCRAMBLER mix up PNUM 0502A EC0BC010 7 CBM 88 STZ R7/COLBIT indicate no collision 0502B 60C40000 3 IMM 89 LD R3 0 get PW char index 0000502C 90 PWCLOOP LABEL 0502C 60800052 2 91 LD R2 PNUM and get the mangled value 0502D 78841FFF 2 IMM 92 AND R2 GRABMASK mask to table size 0502E 60365010 0 3 @ 93 LD R0 @PPWHOLD(R3) get character from input record 0502F 607415FA 1 2 @ 94 LD R1 @GRABBAGPTR(R2) check character in grabbag 05030 E476500D 1 3 @ 95 ST R1 @PARCON(R3) store into holder 05031 6444002A 1 IMM 96 CPR R1 "*" is it an unused location? 05032 FE025038 97 JEQ UNUSED jump if so 05033 64124000 0 1 REG 98 CPR R0 R1 is it the same as in the input record? 05034 FE025038 99 JEQ UNUSED jump if so 05035 EDCBC010 7 CBM 100 STW R7/COLBIT indicate collision 05036 FA0C5038 0 101 JNEZ R0 UNUSED jump if new pw not demanding end 05037 D0005003 102 INC ACTLEN so that table demand gets printed 103 00005038 104 UNUSED LABEL 05038 602615F0 0 3 105 LD R0 INTVTAB(R3) get interval to next character 05039 98000052 0 106 ADDM R0 PNUM advance grabbag pointer 0503A D012C000 3 REG 107 INC R3 advance PW char pointer 0503B 64C05002 3 108 CPR R3 PWLEN check for past assigned size 0503C FE08502C 109 JLT PWCLOOP loop if not there yet 110 * \ / 0503D F3C05042 7 111 JBF R7/COLBIT PSNOCOL jump if we had no collision 112 113 ********************************************************************************** 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 53 (PW2FILLER) F 18 114 * We write the string onto the standard output unit * 115 * so that we know what is going on. * 116 ********************************************************************************** 117 0503E 60040040 0 IMM 118 LD R0 FRWRITE get write code 0503F 60405003 1 119 LD R1 ACTLEN get length of string 05040 6080500C 2 120 LD R2 PFILBUF get pointer to buffer 05041 088400AA IMM 121 FREQ 170 and do write 122 * \ / 00005042 123 PSNOCOL LABEL 124 125 ********************************************************************************** 126 * This section actually places the password into * 127 * the GRABBAG string. * 128 * We will only put in characters that overlay a * 129 * "*". This way, we can run the file for many extra * 130 * entries so that we fill in the array with random * 131 * characters. * 132 ********************************************************************************** 133 05042 60005011 0 134 LD R0 WEEK get the current week 05043 E4000052 0 135 ST R0 PNUM and set up for scramble 136 05044 DC401612 137 CALLNP SCRAMBLER mix up PNUM 05045 60C40000 3 IMM 138 LD R3 0 get store index 00005046 139 PWSLOOP LABEL 05046 60800052 2 140 LD R2 PNUM get the mangled value 05047 78841FFF 2 IMM 141 AND R2 GRABMASK mask to table size 05048 60365010 0 3 @ 142 LD R0 @PPWHOLD(R3) get character from input record 05049 607415FA 1 2 @ 143 LD R1 @GRABBAGPTR(R2) check character in grabbag 0504A 6444002A 1 IMM 144 CPR R1 "*" is it an unused location? 0504B FE0C504D 145 JNE USED jump if in use 0504C E43415FA 0 2 @ 146 ST R0 @GRABBAGPTR(R2) else place into table 0000504D 147 USED LABEL 0504D FA025053 0 148 JEQZ R0 PWSTDONE jump if that's it 0504E 602615F0 0 3 149 LD R0 INTVTAB(R3) get pickup interval 0504F 98000052 0 150 ADDM R0 PNUM advance grabbag pointer 05050 D012C000 3 REG 151 INC R3 advance store pointer 05051 64C05002 3 152 CPR R3 PWLEN check for past assigned size 05052 FE085046 153 JLT PWSLOOP loop if not there yet 154 * \ / 00005053 155 PWSTDONE LABEL 05053 BC005011 0 156 INCL R0 WEEK advance to the next week 05054 64005001 0 157 CPR R0 LASTWEEK check for beyond the end of time 05055 FE0A5018 158 JLE WEEKLOOP loop if there's still time 159 * \ / 160 00005056 161 TERMINATE LABEL 05056 60040070 0 IMM 162 LD R0 URSTOP get stop request code 05057 09040000 IMM 163 UREQ 0 do it 164 * --- 165 00005058 166 REWIND LABEL 05058 60040012 0 IMM 167 ld r0 frrewind 05059 088400A0 IMM 168 freq fillun 0505A FE0E5018 169 jmp ANOTHER 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 54 (PW2FILLER) F 18 170 * --- 171 0000505B 172 FILERROR LABEL 0505B 00000000 173 HALT 0 halt for error reading file 174 * --- 175 0000505C 176 teststart label 0505C 61040000 4 IMM 177 ld r4 0 0000505D 178 testloop label 0505D E5000052 4 179 st r4 pnum 0505E DC401612 180 callnp scrambler 0505F 60000052 0 181 ld r0 pnum 05060 E4281400 0 4 182 st r0 (ma 01400)(R4) 05061 FEC00000 183 nop 0 05062 FB20505D 4 184 irj r4 testloop 185 ACTLEN 00005003 F 18 30= 68s 102s 119 ANOTHER 00005018 F 18 59= 169j COLBIT 00000010 F 18 47= 88s 100s 111j +CPW 00000004 F 18 39e FILBUF 02005004 F 18 34= 35a 38a FILBUFL 0000001E F 18 32= 34 62 66 FILERROR 0000505B F 18 65j 172= +FILLER 00005012 F 18 25 49= FILLUN 000000A0 F 18 27= 64 168 +FIRSTWEEK 00005000 F 18 56 +GRABBAG 00000800 F 18 52a +GRABBAGPTR 000015FA F 18 94 143 146s +GRABLEN 00002000 F 18 53 +GRABMASK 00001FFF F 18 92 141 +INTVTAB 000015F0 F 18 105 149 +LASTWEEK 00005001 F 18 157 +MAXPWLEN 00000007 F 18 72 PARCON 0000500D F 18 38= 95s PFILBUF 0000500C F 18 35= 63 67s 120 +PNUM 00000052 F 18 85s 91 106s 135s 140 150s 179s 181 PPWHOLD 00005010 F 18 43= 93 142 PSNOCOL 00005042 F 18 111j 123= PWCLOOP 0000502C F 18 90= 109j PWHOLD 0200500E F 18 42= 43a PWLEN 00005002 F 18 29= 73s 108 152 PWOFFSET 00000008 F 18 37= 38a 39e 70 PWSLOOP 00005046 F 18 139= 153j PWSTDONE 00005053 F 18 148j 155= REWIND 00005058 F 18 166= +SCRAMBLER 00001612 F 18 87 137 180 +SP 00138000 F 18 50 +STACKTOP 000000A3 F 18 50a TERMINATE 00005056 F 18 69j 161= TESTLOOP 0000505D F 18 178= 184j TESTSTART 0000505C F 18 176= UNUSED 00005038 F 18 97j 99j 101j 104= USED 0000504D F 18 145j 147= WEEK 00005011 F 18 45= 57s 84 134 156s WEEKLOOP 00005018 F 18 60= 158j WFILBUF 00005004 F 18 33= 39e 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 55 (PW2FILLER) F 18 WPWHOLD 0000500E F 18 41= 76s WPWLOC 00005006 F 18 39= 75 186 END FILLER 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 56 (PW2FILLER) F 18 188 189 ********************************************************************************** 190 * This routine will scan the GRABBAG array and replace any * 191 * unfilled location (one with a "*" in it) with a random character * 192 * from the appropriate set. * 193 ********************************************************************************** 194 195 RANDFILL BLOCK 196 ENTRY RANDFILL 197 00005063 198 RANDFILL LABEL 05063 618400A3 6 IMM 199 LD SP ADR STACKTOP initialize the stack pointer 200 05064 DC401083 201 CALLNP RANDINIT set up the random number generator 05065 DC401063 202 CALLNP STRNGINIT set up the string to be shuffled 05066 60C7FFFF 3 IMM 203 LD R3 -1 initialize pointer to shuffler string 204 05067 60841FFF 2 IMM 205 LD R2 GRABLEN-1 get index into character array 00005068 206 RFILLOOP LABEL 05068 607415FA 1 2 @ 207 LD R1 @GRABBAGPTR(R2) check character in grabbag 05069 FA42506C 1 208 JEQZ R1 FILLANYWAY nuke the nulls, *** test *** 0506A 6444002A 1 IMM 209 CPR R1 "*" is it an unused location? 0506B FE0C506E 210 JNE RFUSED jump if in use 0000506C 211 FILLANYWAY LABEL 0506C DC405071 212 CALLNP GETRFCHAR pick up a random character 0506D E43415FA 0 2 @ 213 ST R0 @GRABBAGPTR(R2) and place into table 0000506E 214 RFUSED LABEL 0506E FAA65068 2 215 JDR R2 RFILLOOP count through the array 216 * \ / 217 0506F 60040070 0 IMM 218 LD R0 URSTOP get stop request code 05070 09040000 IMM 219 UREQ 0 do it 220 * --- 221 FILLANYWAY 0000506C F 18 208j 211= +GETRFCHAR UUUUUUUU F 18 212 +GRABBAGPTR 000015FA F 18 207 213s +GRABLEN 00002000 F 18 205 +RANDFILL 00005063 F 18 196 198= +RANDINIT 00001083 F 18 201 RFILLOOP 00005068 F 18 206= 215j RFUSED 0000506E F 18 210j 214= +SP 00138000 F 18 199 +STACKTOP 000000A3 F 18 199a +STRNGINIT 00001063 F 18 202 222 END RANDFILL 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 57 (PW2FILLER) F 18 224 225 ********************************************************************************** 226 * This routine will pick up the next character from * 227 * the random string. If the string is exhausted, it will * 228 * shuffle up a new one. * 229 * Call: * 230 * R3=preserved index to string * 231 * CALLNP GETRFCHAR * 232 * * 233 ********************************************************************************** 234 235 GETRFCHAR BLOCK 236 ENTRY GETRFCHAR 237 238 BEGFRAME 239 ENDFRAME 240 05071 DD5F8001 6 STAK 241 GETRFCHAR ENTRNP PUSH 00005072 242 GETRFAGAIN LABEL 05072 FAC65075 3 243 JGEZ R3 CHARPICKUP jump if index still good 05073 DC401069 244 CALLNP STRNGSHUFL and do the shuffle 05074 60C40023 3 IMM 245 LD R3 36-1 initialize first index 00005075 246 CHARPICKUP LABEL 05075 60361000 0 3 @ 247 LD R0 @CHRSPTR(R3) get the designated character 05076 7C040020 0 IMM 248 IOR R0 " " turn into lower case characters 05077 18C7FFFF 3 IMM 249 ADD R3 -1 count string index 05078 64040039 0 IMM 250 CPR R0 "9" check for a digit 05079 FE04507C 251 JGT GETRFEXIT done if not 252 * code to try to avoid quite so many digits in the array 0507A 5C0AFA20 3 CBM 253 CMZ R3/BITS 29:30 are these two bits zero? 0507B FE0C5072 254 JNE GETRFAGAIN if not, skip this digit 0000507C 255 GETRFEXIT LABEL 0507C 5D1F8001 6 STAK 256 LEAVE POP 257 * --- 258 CHARPICKUP 00005075 F 18 243j 246= +CHRSPTR 00001000 F 18 247 GETRFAGAIN 00005072 F 18 242= 254j +GETRFCHAR 00005071 F 18 236 241= GETRFEXIT 0000507C F 18 251j 255= +SP 00138000 F 18 238 239e +STRNGSHUFL 00001069 F 18 244 259 END GETRFCHAR 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 58 (PW2FILLER) F 18 261 262 ********************************************************************************** 263 * Obligation routine * 264 * This routine builds a table of all of the obligations * 265 * for each character position in the grabbag. * 266 ********************************************************************************** 267 268 OBLIGE BLOCK 269 ENTRY OBLIGE 270 271 ********************************************************************************** 272 * The following array has 8 words for each character * 273 * in the GRABBAG array. Each word can hold the information * 274 * about one obligation. * 275 ********************************************************************************** 276 00010000 277 OBLARRAY EQU MA 010000 start of obligation array 278 0507D 00010000 279 OBLARYPTR PTR OBLARRAY pointer to obligation array 280 0000507E 281 WEEK BSS 1 starts with this week 282 0000507F 283 OBLIGE LABEL 0507F 618400A3 6 IMM 284 LD SP ADR STACKTOP initialize the stack pointer 285 05080 60050000 0 IMM 286 LD R0 ADR OBLARRAY get address of array 05081 60420008 1 IMM 287 LD R1 GRABLEN*CPW*8 get length of array 05082 DA000800 0 1 288 FILLI R0 R1 000 289 05083 60005000 0 290 LD R0 FIRSTWEEK get starting time 05084 E400507E 0 291 ST R0 WEEK and initialize start 292 293 ********************************************************************************** 294 * This is the loop that processes each week. * 295 ********************************************************************************** 296 00005085 297 BYTHEWEEK LABEL 05085 6000507E 0 298 LD R0 WEEK get the current week 05086 E4000052 0 299 ST R0 PNUM and set up for scramble 300 05087 DC401612 301 CALLNP SCRAMBLER mix up PNUM 05088 60C40000 3 IMM 302 LD R3 0 get PW char index 00005089 303 AOCLOOP LABEL 05089 60800052 2 304 LD R2 PNUM and get the mangled value 0508A 78841FFF 2 IMM 305 AND R2 GRABMASK mask to table size 0508B 1C840008 2 IMM 306 MUL R2 8 times number of words allowed for each spot 0000508C 307 NEXTCHEK LABEL 0508C 5C34507D 2 @ 308 CMZ @OBLARYPTR(R2) see if this word is used 0508D FE025090 309 JEQ FREESPOT jump if available place 0508E D0128000 2 REG 310 INC R2 advance to next word 0508F FE0E508C 311 JMP NEXTCHEK and check it in turn 312 * --- 00005090 313 FREESPOT LABEL 05090 600AF000 0 3 CBM 314 LD R0 R3/BITS 24:23 copy character position to upper R0 05091 7C00507E 0 315 IOR R0 WEEK and include week number 05092 E434507D 0 2 @ 316 ST R0 @OBLARYPTR(R2) 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 59 (PW2FILLER) F 18 05093 602615F0 0 3 317 LD R0 INTVTAB(R3) get random prime 05094 98000052 0 318 ADDM R0 PNUM advance grabbag pointer 05095 D012C000 3 REG 319 INC R3 advance PW char pointer 05096 64C40007 3 IMM 320 CPR R3 MAXPWLEN check for past assigned size 05097 FE085089 321 JLT AOCLOOP loop if not there yet 322 * \ / 323 324 ********************************************************************************** 325 * Okay, this week is done, on to next week. * 326 ********************************************************************************** 327 328 * \ / 05098 BC00507E 0 329 INCL R0 WEEK advance to the next week 05099 64005001 0 330 CPR R0 LASTWEEK check for beyond the end of time 0509A FE0A5085 331 JLE BYTHEWEEK loop if there's still time 332 * \ / 333 0509B 60040070 0 IMM 334 LD R0 URSTOP get stop request code 0509C 09040000 IMM 335 UREQ 0 do it 336 * --- 337 AOCLOOP 00005089 F 18 303= 321j BYTHEWEEK 00005085 F 18 297= 331j +CPW 00000004 F 18 287 +FIRSTWEEK 00005000 F 18 290 FREESPOT 00005090 F 18 309j 313= +GRABLEN 00002000 F 18 287 +GRABMASK 00001FFF F 18 305 +INTVTAB 000015F0 F 18 317 +LASTWEEK 00005001 F 18 330 +MAXPWLEN 00000007 F 18 320 NEXTCHEK 0000508C F 18 307= 311j OBLARRAY 00010000 F 18 277= 279a 286a OBLARYPTR 0000507D F 18 279= 308 316s +OBLIGE 0000507F F 18 269 283= +PNUM 00000052 F 18 299s 304 318s +SCRAMBLER 00001612 F 18 301 +SP 00138000 F 18 284 +STACKTOP 000000A3 F 18 284a WEEK 0000507E F 18 281= 291s 298 315 329s 338 END OBLIGE 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 60 (PW2FILLER) F 18 340 341 ********************************************************************************** 342 * Dump routine * 343 * This routine dumps out a table of weeks and their * 344 * passwords for whatever is in the grabbag. * 345 ********************************************************************************** 346 347 DUMP BLOCK 348 ENTRY DUMP 349 0000509D 350 WEEK BSS 1 starts with this week 0000509E 351 DATEFORM BSS2 1 to hold the constructed date 000050A0 352 DFZONE BSS 1 holds the zone 353 000050A1 354 DUMP LABEL 050A1 618400A3 6 IMM 355 LD SP ADR STACKTOP initialize the stack pointer 356 050A2 60040060 0 IMM 357 LD R0 URRAWDATE request for raw date 050A3 09040000 IMM 358 UREQ 0 get the current time 050A4 E44050A0 1 359 ST R1 DFZONE and save the time zone 360 050A5 60005000 0 361 LD R0 FIRSTWEEK get starting time 050A6 E400509D 0 362 ST R0 WEEK and initialize start 363 364 ********************************************************************************** 365 * This is the loop that processes each week. * 366 ********************************************************************************** 367 000050A7 368 BYTHEWEEK LABEL 050A7 6000509D 0 369 LD R0 WEEK get the current week 050A8 E4000052 0 370 ST R0 PNUM and set up for scramble 371 050A9 DC401612 372 CALLNP SCRAMBLER mix up PNUM 050AA 60C40000 3 IMM 373 LD R3 0 get store index 000050AB 374 PWDUMPLOOP LABEL 050AB 60800052 2 375 LD R2 PNUM get the mangled value 050AC 78841FFF 2 IMM 376 AND R2 GRABMASK mask to table size 050AD 603415FA 0 2 @ 377 LD R0 @GRABBAGPTR(R2) get indicated character 050AE E4361001 0 3 @ 378 ST R0 @PWPTR(R3) store into PW location 050AF FA0250B6 0 379 JEQZ R0 PWDUMPFIN make special check for a terminator 050B0 602615F0 0 3 380 LD R0 INTVTAB(R3) get interval 050B1 98000052 0 381 ADDM R0 PNUM advance grabbag pointer 050B2 D012C000 3 REG 382 INC R3 advance store pointer 050B3 64C40007 3 IMM 383 CPR R3 MAXPWLEN check for past maximum size 050B4 FE0850AB 384 JLT PWDUMPLOOP loop if not there yet 385 * \ / 050B5 EC361001 3 @ 386 STZ @PWPTR(R3) null terminate the password 387 000050B6 388 PWDUMPFIN LABEL 050B6 60040000 0 IMM 389 LD R0 0 sign extend the week 050B7 6040509D 1 390 LD R1 WEEK in R0,1 050B8 1E0015FD 01 391 MUL2 R0 MSECSWEEK convert back to time 050B9 1A0015FB 01 392 ADD2 R0 FIRSTSUN and fix this bias too 050BA E600509E 01 393 ST2 R0 DATEFORM store onto stack 050BB DC001425 394 CALL PREPOUT call to print this table entry 050BC 4100509D 395 PAR WEEK pass week number 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 61 (PW2FILLER) F 18 050BD 4100509E 396 PAR DATEFORM pass actual date 050BE 41000000 397 PAR WPASSWORD and the password for that week 050BF 400050C5 398 PARL TBLINE 399 * \ / 400 401 ********************************************************************************** 402 * Okay, this week is done, on to next week. * 403 ********************************************************************************** 404 405 * \ / 050C0 BC00509D 0 406 INCL R0 WEEK advance to the next week 050C1 64005001 0 407 CPR R0 LASTWEEK check for beyond the end of time 050C2 FE0A50A7 408 JLE BYTHEWEEK loop if there's still time 409 * \ / 050C3 60040070 0 IMM 410 LD R0 URSTOP get stop request code 050C4 09040000 IMM 411 UREQ 0 do it 412 * --- 413 050C5 205C5432 414 TBLINE TEXTZ " \T2,30\ Wk \H1,4\ \C3\" 415 BYTHEWEEK 000050A7 F 18 368= 408j DATEFORM 0000509E F 18 351= 393s 396a DFZONE 000050A0 F 18 352= 359s +DUMP 000050A1 F 18 348 354= +FIRSTSUN 000015FB F 18 392 +FIRSTWEEK 00005000 F 18 361 +GRABBAGPTR 000015FA F 18 377 +GRABMASK 00001FFF F 18 376 +INTVTAB 000015F0 F 18 380 +LASTWEEK 00005001 F 18 407 +MAXPWLEN 00000007 F 18 383 +MSECSWEEK 000015FD F 18 391 +PNUM 00000052 F 18 370s 375 381s +PREPOUT 00001425 F 18 394 PWDUMPFIN 000050B6 F 18 379j 388= PWDUMPLOOP 000050AB F 18 374= 384j +PWPTR 00001001 F 18 378s 386s +SCRAMBLER 00001612 F 18 372 +SP 00138000 F 18 355 +STACKTOP 000000A3 F 18 355a TBLINE 000050C5 F 18 398a 414= WEEK 0000509D F 18 350= 362s 369 390 395a 406s +WPASSWORD 00000000 F 18 397a 416 END DUMP 417 418 ORG FROTZ restore to normal PSECT 208 +CHRSPTR 00001000 F 18 247 +CPW 00000004 F 18 39e 287 +DATETIME 0000004A F 17 87 +DTDMAKE 000015FF F 17 4 81 86= DUMP F 18 347= DUMP 000050A1 F 18 348 354= 416 ENDOFTIME 00001CD8 F 17 65= F 18 7x FILLER F 18 24= FILLER 00005012 F 18 25 49= 186 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 62 (PW2MAKE) F 17 FIRSTSUN 000015FB F 17 77= 88 F 18 392 FIRSTWEEK 00005000 F 18 6= 56 290 361 FROTZ 00001635 F 18 3= 418a GETRFCHAR 00005071 F 18 212 235= 236 241= 259 +GRABBAG 00000800 F 17 67a F 18 52a GRABBAGPTR 000015FA F 17 67= 97 F 18 94 143 146s 207 213s 377 +GRABLEN 00002000 F 18 53 205 287 +GRABMASK 00001FFF F 17 96 F 18 92 141 305 376 INTVTAB 000015F0 F 17 21= 100 F 18 105 149 317 380 LASTWEEK 00005001 F 18 7= 157 330 407 MAKERBLK F 17 80= 112 MAXPWLEN 00000007 F 17 6= 103 F 18 72 320 383 MSECSWEEK 000015FD F 17 78= 89 F 18 391 OBLIGE F 18 268= OBLIGE 0000507F F 18 269 283= 338 +PNUM 00000052 F 17 8a 9a 90s 95 102s F 18 85s 91 106s 135s 140 150s 179s 181 299s 304 318s 370s 375 381s PNUMBPTR 000015E1 F 17 8= 172 173s 174s PNUMGPTR 000015E2 F 17 9= 195 197s +PREPOUT 00001425 F 18 394 +PWPTR 00001001 F 17 98s 106s F 18 378s 386s RANDFILL F 18 195= RANDFILL 00005063 F 18 196 198= 222 +RANDINIT 00001083 F 18 201 SCRAMBLER 00001612 F 17 92 120= 121 123= 138 F 18 87 137 180 301 372 SCRAMINIT 0000161F F 17 124 146= 147 149= 155 SHUFFLER 00001623 F 17 126 128 130 132 134 164= 165 167= 179 SHUFPINIT 000015EF F 17 18= 150 +SHUFPTR 00000053 F 17 151s 170 171s SHUFTABLE 010015E3 F 17 11= 18a +SP 00138000 F 17 83 84e 123s 135 149s 152 167s 176 192s 199 F 18 50 199 238 239e 284 355 +STACKTOP 000000A3 F 18 50a 199a 284a 355a +STRNGINIT 00001063 F 18 202 +STRNGSHUFL 00001069 F 18 244 STRTOFTIME 00001A90 F 17 64= F 18 6x SUBSER 0000162C F 17 125 127 129 131 133 189= 190 192= 205 +WPASSWORD 00000000 F 18 397a 209 END PWGEN BATCHCHECK 00001059 F 7 37 155 160= BATCHCK F 7 154= 168 BYPASS 00001046 F 7 40j 75= BYPASSCODE 00000080 F 0 61= F 7 77 CH0 00000080 F 0 29= F 9 48 61 206s CHANCE2 00001049 F 7 61j 81= CHARM MACRO F 6 298= F 12 4 5 CHARSTRNG 02000006 F 0 75= 163a F 7 211a 558a CHKANS 000010CF F 7 60 489 494= CHRSPTR 00001000 F 0 163= F 7 245 246s 247s 351 F 18 247 COUNT 00000056 F 0 113= F 8 180s 206 CPP 00001000 F 0 28= 141e F 9 202 CPW 00000004 F 0 27= 28e 117 142 155 F 8 179 F 9 202 F 18 39e 287 DATETIME 0000004A F 0 97= F 7 30s F 9 204 F 17 87 DDPWFLAG 00001010 F 0 175= F 7 42 F 8 347 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 63 F 0 DIRACCESS 0008104C F 0 35= DIRACCOUNT 00160805 F 0 35= DIRBUFFER 02000057 F 0 115= F 8 44a 58a 65a DIRBUFRLEN 00000050 F 0 114= 115 DIRCREATD 00160804 F 0 35= DIRCUSE 0008050D F 0 35= DIREINFO 00000000 F 0 35e 35a 35= DIRENTLEN 00160800 F 0 35= DIRENTWIDE 00000011 F 0 35= F 8 43 57 DIREXT 00160803 F 0 35= F 8 68 DIRFBC 0008381C F 0 35= DIRFLAGS 00160801 F 0 35= 35e 35e 35e DIRFLOG 00083E1C F 0 35= DIRFOREIGN 00080211 F 0 35= DIRFWWSC 0008361C F 0 35= DIRGHOST 00083A1C F 0 35= DIRHINFO 00000000 F 0 35e 35a 35= DIRHLNTH 00160800 F 0 35= DIRHWIDE 00000008 F 0 35= F 8 43 DIRLACSD 00160805 F 0 35= DIRLBKUPD 00160807 F 0 35= DIRLMODD 00160806 F 0 35= DIRLRAF 0008021D F 0 35= DIRLUN 00000054 F 0 111= F 8 29s 32 45 49 59 96 110 290 DIRMWACS 0008010A F 0 35= DIRNAME 00160801 F 0 35= F 8 66 DIRNETWORK 00080411 F 0 35= DIRNOBKUP 0008321C F 0 35= DIRPRGFLG 0008301C F 0 35= DIRPRGINT 00160032 F 0 35= DIRPROJECT 00160807 F 0 35= DIRRACS 00080109 F 0 35= DIRRAFTYPE 0008182C F 0 35= DIRRCVRD 0008341C F 0 35= DIRROOTBLK 0008118B F 0 35= DIRSERNO 0016080F F 0 35= 35e DIRSHADOW 00080011 F 0 35= DIRSYSTEM 00160804 F 0 35= DIRTFL 0008218A F 0 35= DIRTOTRACS 00080108 F 0 35= DIRTOTWACS 00082108 F 0 35= DIRTRANS 00083C1C F 0 35= DIRTYPE 00160030 F 0 35= DIRUNITNM 00160810 F 0 35= DIRUSRFLD 0016080E F 0 35= DIRVOLUME 00160802 F 0 35= DIRWACS 00082109 F 0 35= DTDMAKE 000015FF F 7 44 F 17 4 81 86= DTYPECDR 0000000A F 0 36= DTYPECODE 00000003 F 0 36= DTYPECT 0000000D F 0 36= DTYPEDIR 00000005 F 0 36= DTYPELAST 00000010 F 0 36= DTYPELP 0000000B F 0 36= DTYPEMT 0000000C F 0 36= 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 64 F 0 DTYPENULL 00000006 F 0 36= DTYPEPATH 00000004 F 0 36= DTYPERAF 00000002 F 0 36= DTYPESAF 00000001 F 0 36= DTYPETASK 00000009 F 0 36= DTYPETERM 00000007 F 0 36= DTYPEUNDEF 00000000 F 0 36= DTYPEVOL 0000000E F 0 36= DTYPEVT 0000000F F 0 36= ENTRYSZ 00000002 F 0 57= 148e F 9 58 64 65 200a 202 FAILCODE 000000F0 F 0 62= F 7 97 F 9 52 62 FAILCODEB 000000F1 F 0 63= F 7 114 FAILURE 00001237 F 7 96 113 F 9 5 115= 116 122= FDRTYPAEOD 0000000B F 0 36= FDRTYPBIN 00000002 F 0 36= FDRTYPCOMM 00000005 F 0 36= FDRTYPEOD 00000009 F 0 36= F 8 62 FDRTYPEODB 00003E10 F 0 36= FDRTYPFM 00000008 F 0 36= FDRTYPLBL 00000004 F 0 36= FDRTYPSYSB 00003810 F 0 36= FDRTYPTEXT 00000000 F 0 36= FDRTYPTXTF 00000001 F 0 36= FDSTATAERR 00000010 F 0 36= FDSTATERR 00002AB0 F 0 36= FDSTATLP 00002810 F 0 36= FDSTATLUN 00000880 F 0 36= FDSTATRTYP 00002040 F 0 36= F 8 61 FILECHK F 9 3= 216 FILELUN 00000055 F 0 112= F 8 34s 73 77 84 93 107 FIRSTSPOT 0000004F F 0 101= F 7 499s 503 507 FIXEDPW 0000100C F 0 171= 173e F 7 23a FPWLEN 00000010 F 0 173= F 7 24 FRESHSTRNG 00001003 F 0 168= 169e F 7 209a FSACSAO 00000002 F 0 36= FSACSDR 00000005 F 0 36= FSACSMW 00000004 F 0 36= 36e FSACSNDA 00000007 F 0 36= FSACSNWB 00003E10 F 0 36= FSACSRO 00000001 F 0 36= FSACSRW 00000000 F 0 36= FSACSXO 00000003 F 0 36= FSPRIVBKUP 00000008 F 0 36= FSPRIVMOD 00000002 F 0 36= FSPRIVNOT 0000000F F 0 36= FSPRIVNWB 00003E10 F 0 36= FSPRIVRO 00000001 F 0 36= FSPRIVRW 00000000 F 0 36= FSPRIVXO 00000003 F 0 36= FSSTATABS 00002E10 F 0 36= FSSTATACS 00002630 F 0 36= FSSTATCRT 00002410 F 0 36= FSSTATDTYP 00003460 F 0 36= FSSTATPRIV 00001C40 F 0 36= FSSTATSAV 00003210 F 0 36= FSSTATWSC 00003010 F 0 36= 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 65 F 0 GRABBAG 00000800 F 0 155= F 8 350a 353a F 17 67a F 18 52a GRABLEN 00002000 F 0 152= 153e 155 F 18 53 205 287 GRABLOG 0000000D F 0 151= 152e GRABMASK 00001FFF F 0 153= F 17 96 F 18 92 141 305 376 HAPPYSTOP 00001042 F 7 67= 78j INBUF 0200000F F 0 81= F 7 419a 518a INBUFACT 00000014 F 0 82= F 7 422s 452 521 INBUFSIZE 00000014 F 0 79= 81 F 7 418 421 INBUFW 0000000F F 0 80= F 7 455 INITPSECT MACRO F 0 65 F 6 63= 72 F 10 15 20 F 16 8 INLUN 00000001 F 0 43= F 7 395 401 420 429 INPUTBLOK 0000109E F 7 56 386 392= INPUTRTNS F 7 385= 435 KILLBATCH 0000104F F 7 38j 112= KILLNOW 0000104B F 7 57j 95= KILLNOWX 0000104D F 7 98= 115j LOCALLUN 00000064 F 0 45= F 8 27 F 9 154 LOGLUN 00000051 F 0 102= F 9 93 129 156s 161 166 LOWCODE 00001000 F 0 160= F 8 357a 360a MYTITLE 00001013 F 7 18= 35a OPACCT 00000080 F 0 123= F 8 284s OPENBUF 0000007B F 0 119= 129e F 8 72a 223a 274a 289a OPENBUFL 0000003C F 0 129= F 8 275 OPEXT 00000087 F 0 127= F 8 69s 278s OPFILE 00000085 F 0 126= F 8 67s OPPROJ 00000082 F 0 124= F 8 286s OPSYS 0000007D F 0 121= OPVOL 0000007B F 0 120= OUTLUN 00000002 F 0 44= F 7 365 PARAMM MACRO F 6 280= PASSNUM 0000004E F 0 100= F 7 47s 65 82s PASSWORD 02000000 F 0 67= 164a 165a PIAAACCT 0016080B F 0 37= PIAAPROJ 0016080D F 0 37= PIAASYS 0016080A F 0 37= PIAAVOL 00160808 F 0 37= PIALIASACT 00160808 F 0 37e 37e 37= 37e 37e PIBATCH 00081E11 F 0 37= F 7 161 PIBUFFER 02000018 F 0 93= F 7 134a 136a F 9 207a PIBUFLEN 000000C8 F 0 92= 93 F 7 133 PICPULIM 00160814 F 0 37= PICPUUSED 00160813 F 0 37= PIDIALUP 00081A11 F 0 37= PIDSKLIM 00160815 F 0 37= PIDSKUSD 00160816 F 0 37= PIDSKWARN 0016081A F 0 37= PIENTLEN 00081F10 F 0 37= PIINHIB 00081811 F 0 37= PIINTER 00081C11 F 0 37= PILAACCT 00160805 F 0 37= PILAPROJ 00160807 F 0 37= PILASYS 00160804 F 0 37= PILAVOL 00160802 F 0 37= PILGFSESS 0016081E F 0 37= PILOG 00000005 F 0 37= PILOGACCT 00160802 F 0 37e 37e 37= 37e 37e 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 66 F 0 PILONG 0000001F F 0 37e 37= PIPARENT 0016081B F 0 37= PIPORTNUM 00082101 F 0 37= F 9 208 PIPROCNUM 000800F0 F 0 37= 37e PIPROGNAME 0016080E F 0 37= PIPROTO 00000000 F 0 37= 37a 37e PIRFP 00081611 F 0 37= F 7 192 PISESLIM 00160818 F 0 37= PISESUSD 00160817 F 0 37= PISHADA 00081211 F 0 37= PISHADL 00081411 F 0 37= PISHORT 00000002 F 0 37= PISITE 0016081C F 0 37= PISPECPROC 00081011 F 0 37= PISTATE 00160810 F 0 37= PISYSPROC 00080E11 F 0 37= PIWCTIME 00160812 F 0 37= PIWORDZ 00080101 F 0 37e 37= 37e 37e 37e 37e 37e 37e 37e 37e PIWSSIZE 00160819 F 0 37= PNUM 00000052 F 0 106= F 17 8a 9a 90s 95 102s F 18 85s 91 106s 135s 140 150s 179s 181 299s 304 318s 370s 375 381s PORTZERO F 7 185= 199 POSFIND F 7 547= 569 POSITION 000010E7 F 7 498 502 548 553= PREPOUT 00001425 F 0 182= F 7 33 F 8 222 363 F 9 54 68 80 88 F 18 394 PREPOUTM MACRO F 0 182 F 6 251= PRINTBLK F 7 339= 374 PRINTBLOK 0000108A F 7 55 340 345= PROCINFO F 7 125= 140 PROCINFOGT 00001052 F 7 36 126 131= PROG MACRO F 0 136 F 6 82= F 10 7 13 F 14 130 F 16 5 PROGRAM! 000015E1 F 0 65= 136a F 6 72= 72a 72e 72e F 10 5= 5e 7a F 16 8e 8e 8= 8a PSECT! 00000000 F 0 65= 136e 136e 136a 136a 136= F 6 72= F 10 5a 5e 5e 5a 5= 7= 7a 7a 7e 7e F 16 8= PSRMODIF 00000010 F 0 46= F 7 242 244 286 289 563 565 PWGEN F 17 3= 209 PWPTR 00001001 F 0 164= F 7 497 F 17 98s 106s F 18 378s 386s PWPTR1 00001002 F 0 165= F 7 500 RAFBUFPN 00000001 F 0 146= F 9 165 RAFBUFR 00000400 F 0 145= 146e 147e 148e F 9 60 77 200a 201a RAFCUR 00000400 F 0 147= F 9 210s RAFPREV 00000402 F 0 148= F 9 47 RANDINIT 00001083 F 7 49 270 306= 307 312= F 18 201 RANDNUM F 7 269= 323 RANDOM 00001079 F 7 241 271 279 284= RECNTR 0000004D F 0 99= F 7 53s 459s REDRAW 000010BE F 7 58 446 451= REDRAWREQ F 7 445= 472 REPRINT 00001037 F 7 54= 59j RESPONSE F 7 488= 529 RFPCHECK 0000105E F 7 39 186 191= SBUFFER 00000400 F 0 142= 145e F 8 174a 208a 210a 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 67 F 0 SBUFFLEN 00001000 F 0 141= 142 F 8 173 178 SCHK 000010F4 F 7 68 F 8 15 17= 18 24= SECONDTRY 00001032 F 7 48= 83j SHARECHEK F 8 14= 323 SHRACCESS 00160000 F 0 38= F 8 217 SHRACCT 00160802 F 0 38= F 8 224a SHRENLEN 00081F10 F 0 38= F 8 230 SHRLNTH 00000005 F 0 38= SHRPROJ 00160804 F 0 38= F 8 213 225a SHRPROTO 00000000 F 0 38e 38a 38= SHRPW 00081010 F 0 38= SHRSYS 00160801 F 0 38= SHUFPTR 00000053 F 0 107= F 17 151s 170 171s SKIPDDP 00001030 F 7 43j 45= SP 00138000 F 0 42= F 7 21 128 129e 157 158e 188 189e 205 206e 233 235e 238s 250 281 282e 309 310e 342 343e 388 390e 396s 425 448 449e 491 492e 550 551e F 8 20 22e 38s 112 130 131e 166 168e 171s 175 200 203e 209s 219s 220 231 270 271e 341 343e 346s 351s 354s 358s 361s 362 398 399e F 9 32 36e 39s 41s 43 50s 51a 78s 79a 118 120e 123s 125 146 147e 194 196e 199s 205 F 10 12 F 13 167 174e 201s 202s 208 226 256 257 283 285e 316s 334 339 388 389e 469 471e 480s 484 509 511e 515s 522s 551 576 577e 644 647e 655s 656s 658s 664 708 750 754e 757s 758s 760s 762s 763 772 812 816e 819s 820s 822s 826 838s 845s 850 856a 885 889e 896s 897s 899s 901s 905 911 916s 919 947 948e 977 980e 983s 984s 986 990 991 1018 1019e 1068 1071e 1074s 1075s 1077 1082 1083 F 14 151 289 296s 301s 347 359s 364 377s 386 398s 407 420s 429 441s 446 456s 461 490 510s 511s 513s 515s 517s 522s 525s 527s 536 538 545 555 561s 565 570s 573s 574s 578 587 597 605a 613a 619 626a 633 640a 649a 657 F 15 41 49e 52s 53s 54s 55s 56s 57s 59 62s 63s 66s 68 79s 85s 95s 105s 109s 111s 140 147e 150s 151s 152s 153s 154s 157 158 171s 178s 181 182 187 190s F 17 83 84e 123s 135 149s 152 167s 176 192s 199 F 18 50 199 238 239e 284 355 STACKTOP 000000A3 F 0 134= F 7 21a F 18 50a 199a 284a 355a START 0000101C F 0 40a F 7 20= STRINGINIT F 7 202= 216 STRINGSHF F 7 230= 254 STRNGINIT 00001063 F 7 50 203 208= F 18 202 STRNGSHUFL 00001069 F 7 51 231 237= F 18 244 STRNGSIZE 00000024 F 0 169= F 7 210 239 243 559 561 SUCCESS 000011EC F 7 63 76 F 9 6 29= 30 38= SUMME 000011A7 F 7 70 F 8 327 338= 339 345= SUMMER F 8 326= 455 TIMEZONE 0000004C F 0 98= F 7 31s F 9 40 TRIESALWD 00000003 F 0 47= F 7 46 64 VARIABLES! 00000149 F 0 65a 65e 65= 65e 136e 136= F 6 72= F 10 5a 7= 7e F 16 8= VARLINE 02000015 F 0 87= F 7 364a 372a VARLINESIZ 0000000B F 0 86= 87 F 7 346 363 VARS MACRO F 6 74= F 10 5 14 F 14 111 F 16 3 VERSION 00001011 F 7 17= 34a VERSIONHI 41383930 F 3 22= F 7 17x VERSIONLO 37000000 F 3 23= F 7 17x WPASSWORD 00000000 F 0 66= F 7 25a F 18 397a WPP 00000400 F 0 26= 28e 146e F 8 353a 360a 403 405 F 9 1 Assembler C9208 Share List Checker 12-Jul-93 10:35 PAGE 68 F 0 65 200a 201a X 00000005 F 0 71= F 7 285 291s 317s XREQBUFFER 0000006B F 0 117= F 8 136a 142a XREQBUFL 00000040 F 0 116= 117 F 8 137 140 185 END MAIN main program