MODULE›; D:DIR.ACT BY BOB TURNER 04/10/84›; AN EXAMPLE IN THE USE OF POINTERS›; AND ARRAY MANIPULATION.›BYTE POINTER PTR›;›PROC FORMNAME(BYTE ARRAY DPTR,BUF)›BYTE POINTER BPTR›BYTE J›J=3 ; INIT INPUT BUFFER INDEX›DPTR(0)=2 ; INIT STRING COUNT›DPTR(1)='D : DPTR(2)=':›BPTR=DPTR+3 ; POINT PAST :›WHILE BUF(J) # $20 › DO› BPTR^=BUF(J) ; MOVE IN NEXT BYTE› BPTR==+1 ; BUMP POINTER› DPTR(0)==+1 ; UP STRING COUNT› J==+1 ; BUMP INDEX TO INPUT BUFFER› ; *** DONT EXCEED 8 CHARS IN PRIMARY NAME› IF J=11 THEN EXIT FI› OD››; DEBLANK INPUT BUFFER›WHILE BUF(J) = $20› DO› J==+1› IF J = 14 THEN RETURN FI; NO EXT!› OD›BPTR^='. : BPTR==+1 : DPTR(0)==+1›; FILL IN EXT›WHILE BUF(J) # $20› DO› BPTR^=BUF(J) : J==+1› BPTR==+1 : DPTR(0)==+1› OD››RETURN››PROC MAIN()››BYTE I=[0]›BYTE ARRAY BUF(19)›BYTE ARRAY DIR_STRING(960)›CARD ARRAY DVECT(64) ; DOPE VECTOR››PTR = DIR_STRING ; INIT POINTER›OPEN(1,"D:*.*",6,0)›INPUTSD(1,BUF) ; GET FIRST FILE›; DONT FORMAT # OF SECTORS FREE MSG ›WHILE BUF(2) = $20 ; A GOOD A STOPPER AS ANY OTHER› DO› DVECT(I) = PTR ; KEEP A DOPE VECTOR› PRINT(BUF) : PRINT("-->")› FORMNAME(PTR,BUF)› PRINTE(PTR) ; PRINT FILE NAME FORMED› PTR==+PTR(0)+1 ; POINT TO NEXT SUBSTRING› INPUTSD(1,BUF)› I==+1› OD›DVECT(I)=0; MARK LAST FILE FOUND›CLOSE(1); CLOSE DIR›; PRINT OUT USING CARD ARRAY AS POINTERS›PRINTE("FILES FROM TABLE")›I = 0›WHILE DVECT(I)#0› DO› PRINTF("%I) %S%E",I,DVECT(I))› I==+1› OD››RETURN››