Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,273 @@
PL/M-86 COMPILER SDIR - SORT MODULE PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE SORT
OBJECT MODULE PLACED IN SORT
COMPILER INVOKED BY: :F0: SORT.PLM DEBUG OBJECT(SORT) OPTIMIZE(3) XREF
$title ('SDIR - Sort Module')
1 sort:
do;
/* sort module for extended dir */
$include(comlit.lit)
=
2 1 = declare
= lit literally 'literally',
= dcl lit 'declare',
= true lit '0ffh',
= false lit '0',
= boolean lit 'byte',
= forever lit 'while true',
= cr lit '13',
= lf lit '10',
= tab lit '9',
= ctrlc lit '3',
= ff lit '12',
= page$len$offset lit '1ch',
= nopage$mode$offset lit '2Ch',
= sectorlen lit '128';
3 1 print: procedure(str$adr) external; /* in util.plm */
4 2 dcl str$adr address;
5 2 end print;
6 1 dcl sorted boolean public; /* set by this module if successful sort */
$include(finfo.lit)
=
= /* file info record for SDIR - note if this structure changes in size */
= /* the multXX: routine in the sort.plm module must also change */
=
7 1 = declare
= f$info$structure lit 'structure(
= usr byte, name (8) byte, type (3) byte, onekblocks address,
= kbytes address, recs$lword address, recs$hbyte byte,
= hash$link address, x$i$adr address)';
8 1 = declare
= x$info$structure lit 'structure (
= create (4) byte,
= update (4) byte,
= passmode byte)';
=
9 1 declare
buf$fcb$adr address external, /* index into directory buffer */
buf$fcb based buf$fcb$adr (32) byte,
/* fcb template for dir */
PL/M-86 COMPILER SDIR - SORT MODULE PAGE 2
(f$i$adr, first$f$i$adr, last$f$i$adr, x$i$adr, filesfound)
address external,
/* indices into file$info array */
file$info based f$i$adr f$info$structure,
mid$adr address,
mid$file$info based mid$adr f$info$structure;
10 1 mult23: procedure(index) address public;
11 2 dcl index address; /* return address of file$info numbered by index */
12 2 return shl(index, 4) + shl(index,2) + shl(index,1) + index + first$f$i$adr;
/* index * size(file$info) + base of file$info array */
13 2 end mult23;
14 1 lessthan: procedure( str1$adr, str2$adr) boolean;
15 2 dcl (i,c1,c2) byte, /* true if str1 < str2 */
(str1$adr, str2$adr) address, /* sorting on name and type field */
str1 based str1$adr (1) byte, /* only, assumed to be first in */
str2 based str2$adr (1) byte; /* file$info record */
16 2 do i = 1 to 11;
17 3 if (c1:=(str1(i) and 7fh)) <> (c2:=(str2(i) and 7fh)) then
18 3 return(c1 < c2);
19 3 end;
20 2 return(false);
21 2 end lessthan;
22 1 dcl f$i$indices$base address public,
f$i$indices based f$i$indices$base (1) address;
23 1 qsort: procedure(l,r); /* no recursive quick sort, sorting largest */
24 2 dcl (l,r,i,j,temp) address,/* partition first */
stacksiz lit '14', /* should always be able to sort 2 ** stacksiz */
stack (stack$siz) structure (l address, r address),
sp byte;
25 2 sp = 0; stack(0).l = l; stack(0).r = r;
28 2 do while sp < stack$siz - 1;
29 3 l = stack(sp).l; r = stack(sp).r; sp = sp - 1;
32 3 do while l < r;
33 4 i = l; j = r;
35 4 mid$adr = mult23(f$i$indices(shr(l+r,1)));
36 4 do while i <= j;
37 5 f$i$adr = mult23(f$i$indices(i));
38 5 do while lessthan(f$i$adr,mid$adr);
39 6 i = i + 1;
40 6 f$i$adr = mult23(f$i$indices(i));
41 6 end;
42 5 f$i$adr = mult23(f$i$indices(j));
43 5 do while lessthan(mid$adr,f$i$adr);
44 6 j = j - 1;
45 6 f$i$adr = mult23(f$i$indices(j));
46 6 end;
47 5 if i <= j then
48 5 do; temp = f$i$indices(i); f$i$indices(i) = f$i$indices(j);
51 6 f$i$indices(j) = temp;
PL/M-86 COMPILER SDIR - SORT MODULE PAGE 3
52 6 i = i + 1;
53 6 if j > 0 then j = j - 1;
55 6 end;
56 5 end; /* while i <= j */
57 4 if j - l < r - i then /* which partition is larger */
58 4 do; if i < r then
60 5 do; sp = sp + 1; stack(sp).l = i; stack(sp).r = r;
64 6 end;
65 5 r = j; /* continue sorting left partition */
66 5 end;
else
67 4 do; if l < j then
69 5 do; sp = sp + 1; stack(sp).l = l; stack(sp).r = j;
73 6 end;
74 5 l = i; /* continue sorting right partition */
75 5 end;
76 4 end; /* while l < r */
77 3 end; /* while sp < stack$siz - 1 */
78 2 if sp <> 255 then
79 2 call print(.(cr,lf,lf,'Sort Stack Overflow',cr,lf,'$'));
80 2 else sorted = true;
81 2 end qsort;
82 1 sort: procedure public;
83 2 dcl i address;
84 2 f$i$indices$base = last$f$i$adr + size(file$info);
85 2 if filesfound < 2 then
86 2 return;
87 2 if shr((x$i$adr - f$i$indices$base),1) < filesfound then
88 2 do;
89 3 call print(.('Not Enough Memory for Sort',cr,lf,'$'));
90 3 return;
91 3 end;
92 2 do i = 0 to filesfound - 1;
93 3 f$i$indices(i) = i; /* initialize f$i$indices */
94 3 end;
95 2 call qsort(0,filesfound - 1);
96 2 sorted = true;
97 2 end sort;
98 1 end sort;
PL/M-86 COMPILER SDIR - SORT MODULE PAGE 4
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
2 BOOLEAN. . . . . . LITERALLY 6 14
9 0000H 32 BUFFCB . . . . . . BYTE BASED(BUFFCBADR) ARRAY(32)
9 0000H 2 BUFFCBADR. . . . . WORD EXTERNAL(1) 9
15 0046H 1 C1 . . . . . . . . BYTE 17 18
15 0047H 1 C2 . . . . . . . . BYTE 17 18
2 CR . . . . . . . . LITERALLY 79 89
2 CTRLC. . . . . . . LITERALLY
2 DCL. . . . . . . . LITERALLY
2 FALSE. . . . . . . LITERALLY 20
2 FF . . . . . . . . LITERALLY
9 0000H 2 FIADR. . . . . . . WORD EXTERNAL(2) 9 37 38 40 42 43 45
22 0000H 2 FIINDICES. . . . . WORD BASED(FIINDICESBASE) ARRAY(1) 35 37 40 42 45 49
50 51 93
22 0002H 2 FIINDICESBASE. . . WORD PUBLIC 22 35 37 40 42 45 49 50 51 84
87 93
9 0000H 23 FILEINFO . . . . . STRUCTURE BASED(FIADR) 84
9 0000H 2 FILESFOUND . . . . WORD EXTERNAL(6) 85 87 92 95
7 FINFOSTRUCTURE . . LITERALLY 9
9 0000H 2 FIRSTFIADR . . . . WORD EXTERNAL(3) 12
2 FOREVER. . . . . . LITERALLY
9 0013H 2 HASHLINK . . . . . WORD MEMBER(MIDFILEINFO)
9 0013H 2 HASHLINK . . . . . WORD MEMBER(FILEINFO)
15 0045H 1 I. . . . . . . . . BYTE 16 17
24 0004H 2 I. . . . . . . . . WORD 33 36 37 39 40 47 49 50 52 57 59 62
74
83 0042H 2 I. . . . . . . . . WORD 92 93
10 0004H 2 INDEX. . . . . . . WORD PARAMETER AUTOMATIC 11 12
24 0006H 2 J. . . . . . . . . WORD 34 36 42 44 45 47 50 51 53 54 57 65
68 72
9 000EH 2 KBYTES . . . . . . WORD MEMBER(MIDFILEINFO)
9 000EH 2 KBYTES . . . . . . WORD MEMBER(FILEINFO)
23 0006H 2 L. . . . . . . . . WORD PARAMETER AUTOMATIC 24 26 29 32 33 35 57 68
71 74
24 0000H 2 L. . . . . . . . . WORD MEMBER(STACK) 26 29 62 71
9 0000H 2 LASTFIADR. . . . . WORD EXTERNAL(4) 84
14 0025H 66 LESSTHAN . . . . . PROCEDURE BYTE STACK=0006H 38 43
2 LF . . . . . . . . LITERALLY 79 89
2 LIT. . . . . . . . LITERALLY 2 7 8 24
9 0000H 2 MIDADR . . . . . . WORD 9 35 38 43
9 0000H 23 MIDFILEINFO. . . . STRUCTURE BASED(MIDADR)
10 0000H 37 MULT23 . . . . . . PROCEDURE WORD PUBLIC STACK=0004H 35 37 40 42 45
9 0001H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(MIDFILEINFO)
9 0001H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(FILEINFO)
2 NOPAGEMODEOFFSET . LITERALLY
9 000CH 2 ONEKBLOCKS . . . . WORD MEMBER(MIDFILEINFO)
9 000CH 2 ONEKBLOCKS . . . . WORD MEMBER(FILEINFO)
2 PAGELENOFFSET. . . LITERALLY
3 0000H PRINT. . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 79 89
23 0067H 373 QSORT. . . . . . . PROCEDURE STACK=000EH 95
PL/M-86 COMPILER SDIR - SORT MODULE PAGE 5
23 0004H 2 R. . . . . . . . . WORD PARAMETER AUTOMATIC 24 27 30 32 34 35 57 59
63 65
24 0002H 2 R. . . . . . . . . WORD MEMBER(STACK) 27 30 63 72
9 0012H 1 RECSHBYTE. . . . . BYTE MEMBER(MIDFILEINFO)
9 0012H 1 RECSHBYTE. . . . . BYTE MEMBER(FILEINFO)
9 0010H 2 RECSLWORD. . . . . WORD MEMBER(MIDFILEINFO)
9 0010H 2 RECSLWORD. . . . . WORD MEMBER(FILEINFO)
2 SECTORLEN. . . . . LITERALLY
SHL. . . . . . . . BUILTIN 12
SHR. . . . . . . . BUILTIN 35 87
SIZE . . . . . . . BUILTIN 84
1 0000H SORT . . . . . . . PROCEDURE STACK=0000H
82 01DCH 102 SORT . . . . . . . PROCEDURE PUBLIC STACK=0012H
6 0044H 1 SORTED . . . . . . BYTE PUBLIC 80 96
24 0048H 1 SP . . . . . . . . BYTE 25 28 29 30 31 61 62 63 70 71 72 78
24 000AH 56 STACK. . . . . . . STRUCTURE ARRAY(14) 26 27 29 30 62 63 71 72
24 STACKSIZ . . . . . LITERALLY 24 28
15 0000H 1 STR1 . . . . . . . BYTE BASED(STR1ADR) ARRAY(1) 17
14 0006H 2 STR1ADR. . . . . . WORD PARAMETER AUTOMATIC 15 17
15 0000H 1 STR2 . . . . . . . BYTE BASED(STR2ADR) ARRAY(1) 17
14 0004H 2 STR2ADR. . . . . . WORD PARAMETER AUTOMATIC 15 17
3 0000H 2 STRADR . . . . . . WORD PARAMETER 4
2 TAB. . . . . . . . LITERALLY
24 0008H 2 TEMP . . . . . . . WORD 49 51
2 TRUE . . . . . . . LITERALLY 80 96
9 0009H 3 TYPE . . . . . . . BYTE ARRAY(3) MEMBER(MIDFILEINFO)
9 0009H 3 TYPE . . . . . . . BYTE ARRAY(3) MEMBER(FILEINFO)
9 0000H 1 USR. . . . . . . . BYTE MEMBER(MIDFILEINFO)
9 0000H 1 USR. . . . . . . . BYTE MEMBER(FILEINFO)
9 0015H 2 XIADR. . . . . . . WORD MEMBER(MIDFILEINFO)
9 0015H 2 XIADR. . . . . . . WORD MEMBER(FILEINFO)
9 0000H 2 XIADR. . . . . . . WORD EXTERNAL(5) 87
8 XINFOSTRUCTURE . . LITERALLY
MODULE INFORMATION:
CODE AREA SIZE = 0242H 578D
CONSTANT AREA SIZE = 0036H 54D
VARIABLE AREA SIZE = 0049H 73D
MAXIMUM STACK SIZE = 0012H 18D
149 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION