1 .* ***********************************************************
 2 .* *                                                         *
 3 .* *                                                         *
 4 .* * Copyright, (C) Honeywell Information Systems Inc., 1981 *
 5 .* *                                                         *
 6 .* *                                                         *
 7 .* ***********************************************************
 8 .*  03/03/77 jaf Modified to handle point pages
 9 .*  07/17/77 jaf Modified to improve error messages, reduce overhead
10 .*  03/02/81 jaf Added optional digit prefix to specify which index
11 .*  07/02/81 jaf Removed "before" page and lineno
12 .*  ???????? jaf need to add =XYZ prefix to rename |->X ~->Y ;->Z
13 .sr LASTCALLER   ;.sr LASTCALLER_1 ;.sr LASTCALLER_2
14 .sr LASTCALLER_3 ;.sr LASTCALLER_4 ;.sr LASTCALLER_5
15 .sr LASTCALLER_6 ;.sr LASTCALLER_7 ;.sr LASTCALLER_8
16 .sr LASTCALLER_9 ;.sr HIT_STRT "|" ;.sr HIT_END ";"
17 .sr SCNDX 1
18 .*
19 .indctl on
20 .sr HIT_TYPE "%Parameter% "(1,1)        ;.* extract hit type char
21 .*
22 .if "%HIT_TYPE%" = "="                  ;.* delimiter change?
23 .then     .sr HIT_STRT "%Parameter% "(2,1) ;.* key starter
24           .sr HIT_END "%Parameter% "(4,1) ;.* key ender
25           .sr HIT_TYPE "%Parameter%  "(5,1) ;.* extract hit type char again
26           .sr SCNDX 5                   ;.* set scan index
27 .endif
28 .*
29 .ur .if %%[index ""0123456789"" "%HIT_TYPE%"]%% ^= 0 ;.* if type is numeric
30 .then     .sr INDEX_which "_%HIT_TYPE%" ;.* use it for filename suffix
31           .sr SCNDX %SCNDX% + 1         ;.* step over it
32           .sr HIT_TYPE "%Parameter% "(%SCNDX%,1) ;.* extract hit type char again
33 .else     .sr INDEX_which ""            ;.* no filename suffix
34 .endif
35 .*
36 .ur .if %%[index ""ULIANSK"" "%HIT_TYPE%"]%% = 0 ;.* check hit type char
37 .then     .ur .err Unknown hit type %HIT_TYPE% ;.* report error
38           .go ret
39 .endif
40 .*
41 .sr SCNDX %SCNDX% + 1
42 .sr INDEX_G ("%Parameter% "(%SCNDX%,1) = "%HIT_STRT%") ;.* set key starter flag
43 .ur .go type_%HIT_TYPE%                 ;.* go to selected type
44 .*
45 .la type_U          ;.* UPPER case permute
46 .la type_L          ;.* lower case permute
47 .la type_I          ;.* initial cap permute
48 .la type_A          ;.* as-is permute
49 .ts %INDEX_G%
50 .go finish          ;.* no text to output
51 .*
52 .la type_N          ;.* explicitly omitted reference
53 .sr INDEX_X "%Parameter% "(%SCNDX%)
54 .go gen
55 .*
56 .la type_S          ;.* "see" reference
57 .ts %INDEX_G%
58 .go finish
59 .err Format must be "S|...".
60 .go ret
61 .*
62 .la type_K                              ;.* keys supplied
63 .ts %INDEX_G%                           ;.* are we at the key starter?
64 .go finish                    ;.* yep
65 .*                                      find it
66 .ur .srv I %%[index ""%Parameter%%HIT_STRT%""(%SCNDX%) "%HIT_STRT%"]%%
67 .*
68 .*  - - - - - Extract the text string found
69 .sr I %I% - %SCNDX%
70 .sr INDEX_X "%Parameter% "(%SCNDX%,%I%)
71 .*
72 .la gen
73 .if "%INDEX_X% "(1,1)="."
74 .then     .ur %PAD%%INDEX_X%
75 .else     .ur %INDEX_X%
76 .endif
77 .la finish
78 .*                                      generate hit into .chars file
79 .ur .if "%%CallingFileName%%" = "%%LASTCALLER%INDEX_which%%%" ;.* same caller?
80 .else     .ur .wrt %FileName%%INDEX_which%.chars %CallingFileName% ;.* write caller
81           .ur .sr LASTCALLER%INDEX_which% "%%CallingFileName%%" ;.* and record him
82 .endif
83 .ur .wrt %FileName%%INDEX_which%.chars %CallingLineNo%      .~ HIT %Parameter%%HIT_END%%PageNo% %PageLine%
84 .*
85 .la ret
86 .indctl
87 .*.ts %INDEX_G%
88 .*.rt
89 .*.ts %FillMode%+1
90 .*.err Not in fill mode.