ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 1 1 .TITLE ALPHLIST 2 ;----------------------------------------------------------------------- 3 4 ; THIS ROUTINE WILL ARRANGE THE ACCOUNT FILE OF THE CALLING [UIC] 5 ; INTO ALPHABETIC ORDER FOR LATER LISTING WITH PIP. 6 ; 7 ;-------------------------------------------------------------------------- 8 9 ; OUTPUT MACRO 10 .MACRO TYPOUT ADDRESS 11 JSR R5,TYP 12 .WORD ADDRESS 13 .ENDM TYPOUT 14 15 .MCALL EXIT$S,FSRSZ$,FDBDF$,NMBLK$,DIR$,GET$,FDRC$R 16 .MCALL FDOP$R,OPEN$M,CLOSE$S,PUT$R,WTSE$S,GET$R 17 .MCALL QIO$S,OPEN$M,FDAT$R,GTSK$ 18 ; 19 000000 FSRSZ$ 1 20 000000 ACCFDB: FDBDF$ ; USER INDEX IN ACCOUNT [0,0] 21 000140 000000 000000 ACCFIL: .WORD 0,0 ; DEFAULT TO SY0: 22 000144 000005 000166' .WORD ACCS,ACC 23 000150 000012 000154' .WORD SIZ,NAME 24 000154 060 060 060 NAME: .ASCII /000000.DIR/ 000157 060 060 060 000162 056 104 111 000165 122 25 000012 SIZ=.-NAME 26 000166 133 060 054 ACC: .ASCII /[0,0]/ 000171 060 135 27 000005 ACCS=.-ACC 28 .EVEN 29 000174 BEGIN: 30 ; 31 32 ; LOAD THE DEFAULT UIC (IE: CURRENT ACCOUNT) 33 34 000174 DIR$ #GETPAR ; GET TASK PARAMETERS 35 000202 116701 001371 MOVB BUF+17,R1 ; GROUP 36 000206 012700 000154' MOV #NAME,R0 ; FILE NAME BUFFER 37 000212 005202 INC R2 ; ALLOW LEADING ZEROES 38 000214 004767 000000G CALL $CBTMG ; CONVERT TO ASCII 39 40 000220 116701 001352 MOVB BUF+16,R1 ; MEMBER 41 000224 005202 INC R2 42 000226 004767 000000G CALL $CBTMG 43 44 ; OPEN THE ACCOUNT FILE IN [0,0] 45 46 000232 FDRC$R #ACCFDB,#FD.RAN,#BUF,#16. 47 000260 FDOP$R #ACCFDB,#3,#ACCFIL 48 000300 OPEN$M #ACCFDB,,,,,,ER5 49 000324 10$: 50 000324 005067 000474 CLR LOOP 51 000330 20$: 52 000330 004767 000302 CALL FILL ; FILL BUFFER WITH OLD DIRECTORY 53 000334 103002 BCC 30$ ; CONTINUE IF CARRY CLEAR ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 1-1 54 55 000336 000167 000654 JMP EX 56 000342 30$: 57 000342 016767 000450 000450 MOV LASTRC,SIZE 58 000350 004767 000010 CALL SORT ; SORT THE RECORDS INTO ALPHABETIC 59 ; ORDER (IN PLACE BUBBLE SORT) 60 61 000354 40$: 62 000354 004767 000144 CALL PUT ; WRITE BACK DIRECTORY 63 000360 000167 000632 JMP EX 64 65 66 ;----------------------------------------------------------------------- 67 ; THIS SECTION WILL SORT THE RECORDS INTO ALPHABETIC ORDER 68 ;------------------------------------------------------------------------- 69 70 000364 SORT: 71 000364 012703 001560' MOV #BUF,R3 ; POINT AT THE TWO BUFFERS 72 000370 012704 001560' MOV #BUF,R4 73 000374 062704 000020 ADD #16.,R4 74 000400 005067 000416 CLR FLAG ; CLEAR SWAP FLAG 75 000404 016702 000406 MOV LASTRC,R2 76 000410 005302 DEC R2 77 78 000412 10$: 79 000412 026364 000006 000006 CMP 6(R3),6(R4) ; FIRST WORD 80 000420 001404 BEQ 30$ ; IF THE SAME GO ON TO NEXT 81 000422 101402 BLOS 20$ ; GO TO NEXT RECORD 82 000424 004767 000332 CALL SWAP ; SWAP RECORDS IF NEEDED 83 000430 20$: 84 000430 000417 BR 80$ 85 000432 30$: 86 000432 026364 000010 000010 CMP 10(R3),10(R4) ; SECOND WORD 87 000440 001404 BEQ 50$ 88 000442 101402 BLOS 40$ 89 000444 004767 000312 CALL SWAP 90 000450 40$: 91 000450 000407 BR 80$ 92 93 000452 50$: 94 000452 026364 000012 000012 CMP 12(R3),12(R4) ; THIRD WORD 95 000460 001403 BEQ 80$ 96 000462 101402 BLOS 80$ 97 000464 004767 000272 CALL SWAP 98 000470 80$: 99 000470 062703 000020 ADD #16.,R3 ; NEXT LINE 100 000474 062704 000020 ADD #16.,R4 101 000500 077234 SOB R2,10$ ; LOOP UNTIL FINISHED 102 000502 90$: 103 000502 005767 000314 TST FLAG ; ANY SWAPS 104 000506 001404 BEQ 100$ 105 000510 005367 000304 DEC SIZE ; MAXIMUM NUMBER OF LOOPS 106 000514 001401 BEQ 100$ 107 000516 000722 BR SORT ; GO AROUND AGAIN 108 000520 100$: 109 000520 000241 CLC 110 000522 000207 RTS PC ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 1-2 111 112 ; 113 114 ;------------------------------------------------------------------------ 115 ; THIS SECTION WILL WRITE BACK THE DIRECTORY 116 ;---------------------------------------------------------------------- 117 118 119 000524 PUT: 120 000524 012767 000000 000272 MOV #0,LOOP ; RESET ERROR FLAG 121 000532 012767 001560' 000020 MOV #BUF,PU+6 ; SET BUFFER ADDRESS 122 000540 012767 000001 000246 MOV #1,REC 123 000546 016704 000244 MOV LASTRC,R4 ; # OF RECORDS 124 000552 PU: 125 000552 PUT$R #ACCFDB,#BUF,#16.,REC,,ER1 ; WRITE RECORD 126 000612 005767 000206 TST LOOP ; LOOK FOR ERRORS 127 000616 001006 BNE 20$ 128 000620 062767 000020 177732 ADD #16.,PU+6 ; MOVE DOWN BUFFER 1 RECORD 129 000626 005267 000162 INC REC 130 000632 077431 SOB R4,PU 131 000634 20$: 132 000634 000207 RTS PC 133 134 135 ;------------------------------------------------------------------------ 136 ; THIS SECTION WILL LOAD THE REQUESTED DIRECTORY 137 ;------------------------------------------------------------------------ 138 139 000636 FILL: 140 000636 005067 000162 CLR LOOP 141 000642 012767 000001 000144 MOV #1,REC ; START WITH FIRST RECORD 142 000650 012767 001560' 000012 MOV #BUF,FI+6 ; SET BUFFER ADDRESS 143 000656 012704 001750 MOV #1000.,R4 144 145 000662 FI: 146 000662 GET$R #ACCFDB,#BUF,#16.,REC,,ER1 147 000722 005767 000076 TST LOOP 148 000726 001006 BNE 20$ ; QUIT IF ZERO 149 000730 062767 000020 177732 ADD #16.,FI+6 ; NEXT RECORD 150 000736 005267 000052 INC REC 151 000742 077431 SOB R4,FI ; AND LOOP UNTIL FINISHED 152 000744 20$: 153 000744 005367 000044 DEC REC 154 000750 016767 000040 000040 MOV REC,LASTRC ; SAVE NUMBER OF RECORDS 155 000756 000241 CLC ; CLEAR ERROR FLAG 156 000760 000207 RTS PC 157 ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 2 159 ;------------------------------------------------------------------------- 160 ; THIS SECTION WILL SWAP THE TWO RECORDS 161 ;---------------------------------------------------------------------- 162 163 000762 SWAP: 164 000762 004767 000000G CALL $SAVAL ; SAVE REGISTERS 165 000766 10$: 166 000766 010300 MOV R3,R0 167 000770 010401 MOV R4,R1 168 000772 012703 000010 MOV #8.,R3 169 000776 20$: 170 000776 011002 MOV (R0),R2 ; SAVE FIRST RECORD 171 001000 011120 MOV (R1),(R0)+ ; MOVE SECOND RECORD 172 001002 010221 MOV R2,(R1)+ ; REPLACE FIRST RECORD 173 001004 077304 SOB R3,20$ 174 001006 005267 000010 INC FLAG ; SET FLAG 175 176 001012 000207 RTS PC 177 178 ;------------------------------------------------------------------ 179 180 001014 000000 REC: .WORD 0 ; RECORD NUMBER 181 182 001016 000000 LASTRC: .WORD 0 ; # OF RECORDS 183 001020 001020' SIZE: .WORD SIZE 184 001022 000000 FLAG: .WORD 0 ; FLAG SET BY SWAP 185 001024 000000 LOOP: .WORD 0 ; FLAG SET BY LAST RECORD 186 001026 GETPAR: GTSK$ BUF ; GET TASK PARAMETERS 187 188 ;--------------------------------------------------------------------- 189 ; ROUTINE USED TO PRINT ERROR MESSAGES 190 ;--------------------------------------------------------------------- 191 192 001032 TYP: 193 001032 012500 MOV (R5)+,R0 ; LOAD MEESAGE ADDRESS 194 195 ; FIND THE FIRST NULL CHARACTER 196 197 001034 012701 177777 MOV #-1,R1 198 001040 1$: 199 001040 005201 INC R1 ; BUMP COUNTER 200 001042 105720 TSTB (R0)+ ; IS CHARACTER NULL? 201 001044 001375 BNE 1$ ; NO LOOP AGAIN 202 203 001046 QIO$S #IO.WLB,#5,#1,,,,<-2(R5),R1,#40> 204 001116 WTSE$S #1 205 001130 000205 RTS R5 ; RETURN 206 ;-------------------------------------------------------------------- 207 ; ERROR MESSAGES 208 ;-------------------------------------------------------------------- 209 210 001132 ER1: 211 001132 126727 176714 177766 CMPB ACCFDB+52,#-10. ; END OF FILE 212 001140 001405 BEQ 10$ 213 001142 TYPOUT MER2 214 001150 000167 000042 JMP EX 215 001154 10$: ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 2-1 216 001154 005267 177644 INC LOOP 217 001160 000207 RTS PC 218 219 001162 ER3: 220 001162 TYPOUT MER3 ; ERROR IN WRITING 221 001170 000167 000022 JMP EX 222 001174 ER4: 223 001174 TYPOUT MER4 224 001202 000167 000010 JMP EX 225 001206 ER5: 226 001206 TYPOUT MER5 ; ERROR IN OPENING ACCOUNT FILE 227 001214 000400 BR EX 228 001216 EX: 229 001216 CLOSE$ #ACCFDB ; CLOSE ACCOUNT FILE 230 001226 EXIT$S 231 232 ;--------------------------------------------------------------------- 233 234 235 .NLIST BEX 236 001234 012 015 105 MER1: .ASCIZ <12><15>/ERROR IN READING RECORD 1 / 237 001271 012 015 105 MER2: .ASCIZ <12><15>/ERROR IN READING SECOND RECORD/ 238 001332 012 015 105 MER3: .ASCIZ <12><15>/ERROR IN WRITING FIRST RECORD/ 239 001372 012 015 105 MER4: .ASCIZ <12><15>/ERROR IN WRITING SECOND RECORD/ 240 001433 012 015 105 MER5: .ASCIZ <12><15>/ERROR IN OPENING FILE / 241 001464 012 015 112 MES1: .ASCIZ <12><15>/JOB FINISHED / 242 001504 012 015 124 MES2: .ASCIZ <12><15>/TYPE IN XXXXXX WHERE XXXXXX IS USER ID. / 243 .EVEN 244 001560 BUF: .BLKW 8100. 245 000174' .END BEGIN ALPHLIST MACRO M1110 25-FEB-80 09:46 PAGE 2-2 SYMBOL TABLE ACC 000166R F.FACC= ****** GX G.TSSY= 000034 PU 000552R S.FNTY= 000004 ACCFDB 000000R F.LUN = ****** GX G.TSTN= 000000 PUT 000524R S.FTYP= 000002 ACCFIL 000140R F.NRBD= ****** GX G.TSTS= 000032 REC 001014R S.NFEN= 000020 ACCS = 000005 F.RACC= ****** GX G.TSVA= 000026 RX$IAS= 000003 TYP 001032R BEGIN 000174R F.RCNM= ****** GX G.TSVL= 000030 RX$11D= 000000 $CBTMG= ****** GX BUF 001560R F.URBD= ****** GX IO.WLB= ****** GX RX$11M= 000001 $SAVAL= ****** GX ER1 001132R GETPAR 001026R LASTRC 001016R RX$11S= 000002 $$$ARG= 000002 ER3 001162R G.TSBA= 000002 LOOP 001024R SIZ = 000012 $$$OST= 000004 ER4 001174R G.TSDU= 000036 MER1 001234R SIZE 001020R $$$T1 = 000067 ER5 001206R G.TSFW= 000024 MER2 001271R SORT 000364R .CLOSE= ****** G EX 001216R G.TSGC= 000017 MER3 001332R SWAP 000762R .FSRCB= ****** G FD.RAN= ****** GX G.TSMT= 000022 MER4 001372R S.BFHD= 000020 .GET = ****** G FI 000662R G.TSNL= 000020 MER5 001433R S.FDB = 000140 .OPEN = ****** G FILL 000636R G.TSPC= 000016 MES1 001464R S.FNAM= 000006 .PUT = ****** G FLAG 001022R G.TSPN= 000004 MES2 001504R S.FNB = 000036 ...PC1= 000000R FO.MFY= ****** GX G.TSPR= 000014 NAME 000154R S.FNBW= 000017 ...TPC= 000140 F.DSPT= ****** GX G.TSRN= 000010 PAR$$$= 000027 . ABS. 000000 000 041270 001 $$FSR1 001020 002 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 4542 WORDS ( 18 PAGES) DYNAMIC MEMORY: 5092 WORDS ( 19 PAGES) ELAPSED TIME: 00:00:28 ALPHLIST,ALPHLIST/-SP=ALPHLIST