C vs BASIC (Was: Powerbas

 BBS: Inland Empire Archive
Date: 04-05-92 (23:45)             Number: 127
From: DANIEL CORBIER               Refer#: 126
  To: DARYL POSNETT                 Recvd: NO  
Subj: C vs BASIC (Was: Powerbas      Conf: (2) Quik_Bas
' Small (tiny) application that does the following:
' COMBINE  : combines any number of source files into target files
' example of usage  : combine test *.bas
' ( concatenates all .bas files in current dir into file test )
' Challenge from Daryl Posnett.  Written by Daniel Corbier
' See previous posting from Daryl Posnett for full description.
On error goto ErrorHandler

Print "COMBINE - Copyright 1992 by Daniel Corbier"

Blank$      = chr$(9)  + chr$(32)
ParseLine$  = command$ + " "
TargetFile$ = NextArgument$( ParseLine$, blank$ )

'***  If less then TWO parameters then exit with -1
If len( ParseLine$ ) = Tally( ParseLine$, any blank$ ) then
        Print "Error:  Not enough parameters"
        End -1
End If

Open TargetFile$ for append as #1

Do '**  dir$() accepts all DOS wildcards for source filenames
        FileDescription$ = NextArgument$( ParseLine$, blank$ )
        NextFile$        = dir$(FileDescription$)

        Do '**  If file exists, then concatinate to TargetFile$ **
                If NextFile$<> "" then call AppendFile(NextFile$)
                NextFile$ = dir$        '** dir$ is a PB variable
        Loop while NextFile$ <> ""

Loop Until len( ParseLine$ ) = Tally( ParseLine$, any blank$ )

'***  Procedure to append FileName$ to TargetFile$  ***
Sub AppendFile(FileName$)
        Print FileName$,
        Open FileName$ for binary as #2

        LengthOfFile = lof(2)  '**  variable so file can copy to itself

        '***  Copy file in chunks of <= 32Kb  ***
        While loc(2) < LengthOfFile
                Get$ #2, min(32700,LengthOfFile-loc(2)), chunk$
                Print #1,chunk$;
        Close #2
End Sub

'***  Function to parse the command line  ***
Function NextArgument$( text$, blank$ )
        Argument$     = extract$( ltrim$(text$,any blank$), any blank$ )
        Text$         = mid$(text$,instr(text$,argument$)+len(argument$))
        NextArgument$ = Argument$
End Function

Print "done"

        reg 1,&h5900              '** Load AH with DOS function 59h
        call interrupt &h21       '** Call function request interrupt
        print"DOS error";reg(1)   '** Print DOS critical error
End reg(1)                        '** Exit with errorlevel at AX register

----- A FEW NOTES The program was compiled with PB 2.10a as it is. No include files, no linked files, no ASM inline. Works like a charm. Incorporates every feature described by Daryl P. plus more. Smallest .EXE size: 18556 bytes Speed: Roughly same as DOS copy Lines: 64 Statements: 42 The following concepts from the program are probably foreign to QB4.5: ANY -- Usable in most string functions. For instance instr("abcdef", any "aef") finds the first character that is either an 'a', 'e', or 'f'. DIR$ -- DIR$() and DIR$ returns a matching file name. EXTRACT$ -- Portion of string leading up to first occurrence. REG -- Loads or retrieves info from a register. TALLY -- Counts the number of occurrences in a string$. END n -- Exits to DOS with errorlevel set to n. --- Maximus 2.01wb * Origin: The Programmer's Workshop (1:135/317)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET