home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 December
/
simtel1292_SIMTEL_1292_Walnut_Creek.iso
/
msdos
/
procomm
/
pcplusrt.arc
/
PCPLUSRT.BAS
next >
Wrap
BASIC Source File
|
1988-02-11
|
4KB
|
160 lines
'QuickBASIC 4.0 SOURCE FILE: PCPLUSRT.BAS
'----------------------------------------------------------------------------
' PROCOMM+ Directory Sort Utility V1.0
' (c) 1988 Software Associates of Houston, Texas
' Written by: Ed Galle, 02/11/88
'----------------------------------------------------------------------------
'Subroutine Declarations
DECLARE FUNCTION DirFile$ ()
DECLARE SUB SortDirEntries (Astart AS INTEGER, Aend AS INTEGER)
OPTION BASE 1 'Let's use one as first array element
'Structure of PROCOMM+ Dialing Directory Entry:
TYPE DirRecord
DirName AS STRING * 25
Junk AS STRING * 49
END TYPE
DIM DFile AS STRING ' Directory file name
DIM K AS STRING * 1 ' Y/N keystroke
DIM Header AS STRING * 250 ' 250-byte header common to all .DIR files
DIM I AS INTEGER ' Array Index
'200 Entries in a .DIR file
DIM SHARED DirEntry(200) AS DirRecord
'Intro...
CLS
PRINT "PCPLUSRT - PROCOMM+ Dialing Directory Sort Utility"
PRINT "(c) 1988 Software Associates"
PRINT "This program will sort your PROCOMM+ Dialing Directory"
PRINT
'Get .DIR file name from command line...
DFile = DirFile
'Double-check user input...
PRINT "Directory chosen: "; DFile
PRINT
PRINT "Do you want to sort this directory (Y/N)?"
DO
K = UCASE$(INKEY$)
LOOP WHILE ((K <> "Y") AND (K <> "N"))
'File error handler...(not much!)
ON ERROR GOTO Errorhandle
'Main code:
IF (K = "Y") THEN 'Sort the file
'Open files in binary mode:
OPEN DFile FOR BINARY AS #1 'Input file
OPEN "TEMP$$$$.$$$" FOR BINARY AS #2 'Workfile
'Transfer header
GET #1, , Header
PUT #2, , Header
'Read directory entries into array, marking blank records
' so that they end up at bottom of sorted list
FOR I = 1 TO 200
GET #1, , DirEntry(I)
IF (LEFT$(DirEntry(I).DirName, 1) = " ") THEN
MID$(DirEntry(I).DirName, 1, 1) = CHR$(255)
END IF
NEXT
'Close the old file and rename it .OLD, don't need it anymore:
CLOSE #1
NAME DFile AS LEFT$(DFile, INSTR(DFile, ".") - 1) + ".OLD"
'Now sort the directories using Quicksort:
SortDirEntries 1, 200
'Write sorted table to workfile, unmarking blank records as we go:
FOR I = 1 TO 200
IF (LEFT$(DirEntry(I).DirName, 1) = CHR$(255)) THEN
MID$(DirEntry(I).DirName, 1, 1) = " "
END IF
PUT #2, , DirEntry(I)
NEXT
'Close workfile and rename it as original input file:
CLOSE #2
NAME "TEMP$$$$.$$$" AS DFile
'All done
PRINT
PRINT "Sort complete!"
END
ELSE 'User aborted
PRINT "Sort aborted..."
END
END IF
'Error handler code:
Errorhandle:
PRINT "File error occured...aborting"
CLOSE
KILL "TEMP$$$$.$$$"
END
'Function to get the directory filename from command line:
'Quicksort the directory entries:
FUNCTION DirFile$
DIM C AS STRING, Lc AS INTEGER, I AS INTEGER, M AS STRING * 1
C = COMMAND$
Lc = LEN(C)
IF (Lc) THEN
FOR I = 1 TO Lc
M = MID$(C, I, 1)
IF ((M = " ") OR (M = CHR$(9))) THEN EXIT FOR
NEXT
DirFile$ = LEFT$(C, I - 1)
ELSE
PRINT
PRINT "Usage: PCPLUSRT <directory file>"
PRINT
PRINT " <directory file> = PROCOMM+ directory file name"
END
END IF
END FUNCTION
SUB SortDirEntries (Astart AS INTEGER, Aend AS INTEGER)
DIM Pivot AS STRING * 25
DIM Low AS INTEGER, High AS INTEGER
Low = Astart
High = Aend
Pivot = DirEntry((High + Low) \ 2).DirName
DO WHILE (Low <= High)
DO WHILE (DirEntry(Low).DirName < Pivot)
Low = Low + 1
LOOP
DO WHILE (DirEntry(High).DirName > Pivot)
High = High - 1
LOOP
IF (Low < High) THEN
SWAP DirEntry(Low), DirEntry(High)
Low = Low + 1
High = High - 1
ELSEIF (Low = High) THEN
Low = Low + 1
END IF
LOOP
IF (Astart < High) THEN SortDirEntries Astart, High
IF (Low < Aend) THEN SortDirEntries Low, Aend
END SUB