# This goes through the password file and prints out all its elements
# after it has sorted the entries by name order. You'll need to have
# allow_ur_path set to YES in the init file for this to work.
alias 1 TRUE
proc main
var @a @linearray st line pos cnt s v i
# Open file and set stream
if [trap [set st [open to read "/etc/passwd"]]]
printnl "Unable to open file."; exit 1;
endif
in st
# Go through password file and load each line as an element of
# the array linearray
set cnt 1
while TRUE
input line
if $eof; break; endif
# Go through individual line and replace colons with spaces
set pos 1
while TRUE
set pos [instr line ":" pos]
if pos=0; break; endif
set line [overstr line " " pos]
wend
# Print result
set linearray:cnt line
inc cnt
wend
close st
call sort_array linearray [arrsize linearray]
call print_data linearray
endproc
# Sort the array containing the lines of the file into order
proc sort_array *@a cnt
var i j name1 name2 tmp
for i 1 to cnt
for j i to cnt
set name1 [midstr a#i 1 [instr a#i " " 1]]
set name2 [midstr a#j 1 [instr a#j " " 1]]
if name1>name2;
set tmp a#i; set a#i a#j; set a#j tmp
endif
next
next
endproc
# Print out the individual fields of each line entry
proc print_data @a
var s v @ela
foreach s v in a
printnl
printnl "Line: " s
set ela v
foreach s v in ela
printnl " " s ": " v
nexteach
nexteach
endproc