5 ! PROGRAM USERSSORT.SYS 10 ! PROGRAM TO LIST USERS AND SORT BY NAMES 20 DIM NA%(4),RE$[64],NA$[12],DR$[60],RF$[76] 21 ! FORMAT OF PDSUPF RECORD (LENGTH=64 BYTES) 22 ! NAME (8 BYTES) 23 ! UIC (2 BYTES) 24 ! PASSW (4 BYTES, COMPLEMENT OF RAD50) 25 ! BLANK (2 BYTES) 26 ! PRIV (2 BYTES) 27 ! BLANK (22. BYTES) ACCOUNTING INFORMATION WE DON'T USE 28 ! DEVICE (4 BYTES) IN ASCII XXN: 29 ! BLANK (20. BYTES) BATCH PRI,BATCH PW # TASKS, ETC 40 ! FIRST LIST ALL USERS 45 OPEN #5, "PDSUPF.SRN/FX/LN:76/WR" : ! OUT IS ASCII NAME + FULL RECORD 60 OPEN #4,"[1,100]PDSUPF.DAT/BN/LN:64/RN/RO/SH" 62 RE=1 70 INPUT #4@RE,FU%,LU%,DR$ 75 NU=LU%-FU%+1 92 RE=FU% 93 NX=0 94 FOR IC=1 TO NU 100 INPUT #4@RE,NA%(1),NA%(2),NA%(3),NA%(4) : ! RAD50 NAME ONLY 101 INPUT #4@RE,RE$ : ! AND THEN INPUT WHOLE RECORD 105 IF NA%(1)=0 THEN 115 : ! IGNORE IF A HOLE 110 NA$=R5A$(NA%(1))+R5A$(NA%(2))+R5A$(NA%(3))+R5A$(NA%(4)) 112 PRINT #5,NA$;RE$ 113 NX=NX+1 115 RE=RE+1 120 NEXT IC 130 CLOSE 135 B=0 139 ! DO TAG SORT OF NAMES 140 CALL "SPAWNB"("SRT PDSUPF.SRN=PDSUPF.SRN/SI:76/PR:R/KE:1.12",B) 200 ! NOW CAN CREATE NEW PDSUPF FILE 210 OPEN #4,"PDSUPF.DAT/BN/LN:64/RN/RO/SH" 215 OPEN #5,"PDSUPF.NEW/BN/LN:64/WR/FX" 220 FOR I=1 TO FU%-1 : ! COPY FIXED PART 225 INPUT #4@I,RE$ 230 PRINT #5,RE$ 245 NEXT I 250 CLOSE 4 260 OPEN #3,"PDSUPF.SRN/BN/LN:76/RN" 265 N=NRC(3) 270 FOR I=1 TO N 275 INPUT #3@I,NA$,RF$ 280 PRINT #5,SBS$(RF$,13,64) 285 NEXT I 290 CLOSE 300 ! NOW CAN OPEN NEW FILE AS VIRTUAL TO REWRITE NAMES 310 OPEN #4,"PDSUPF.NEW/BL/UP" 315 DIM #4,DD%(255,31) 320 LU%=FU%+N-1 : ! UPDATE LAST USER POINTER 325 DD%(0,1)=LU% 330 FOR I=1 TO FU%-2 335 FOR J=0 TO 31 340 DD%(I,J)=0 : !ZERO ALL NAMES IN NAME TABLE 345 NEXT J 350 NEXT I 355 FOR I=1 TO N 360 RN=INT((I-1)/8)+1 : WN=4*(I-(RN-1)*8)-4 365 FOR J=1 TO 4 370 DD%(RN,WN+J-1)=DD%(I+FU%-2,J-1) 375 NEXT J 380 NEXT I 390 CLOSE 400 CALL "SPAWNB"("PIP PDSUPF.SRN;*/DE",B) 405 CALL "SPAWNB"("PIP PDSUPF.NEW/PU",B) 410 PRINT "NEW FILE IS PDSUPF.NEW" 420 RUN "USERSMENU.SYS"