QuickBasic compiler clone


0. Contents

   1. Purpose
      1.1. Project status
      1.2. Feature list
      1.3. Features which are gained for free
         1.3.1. Memory allocation
         1.3.2. Hardware services
      1.4. Extra features
         1.4.1. Multitasking
   2. Copying
      2.1. Documentation
   3. Requirements
   4. "I want to start programming"
   5. Downloading

1. Purpose

This is a DEVELOPMENT PROJECT. It is NOT A FINISHED PRODUCT.

Purpose is to provide tools for running QuickBASIC programs in Linux and other non-MS-DOS -environments.

It currently seems like it will become a QuickBASIC to C++ translator. In fact, it already translates a large subset of QuickBASIC to C++. However, the resulting code is not maintainable, and the library which it requires, is not finished. But it is being developed, in hopes it will one day enable running complicated DOS-specific QuickBASIC programs such as this, under Linux.

UPDATE 2008-01-27: First significant milestone: It actually compiles the BAS file linked above and runs it successfully (with only a few visual glitches)! Microsoft Nibbles also runs, with similar constraints.

1.1. Project status

  • Compiler is almost finished.
  • Runtime library implementation is being developed; simple programs already run.

1.2. Feature list

Feature Status Comments
Numeric labels Ok Not reflected in ERL yet
Symbolic labels Ok
INTEGER type Ok Signed 16-bit integer datatype. Suffix: %
LONG type Ok Signed 32-bit integer datatype. Suffix: &
STRING type Ok Also allowed in user types. Suffix: $
SINGLE type Ok Suffix: !
DOUBLE type Ok Suffix: #
_FLOAT type Ok QB64 extension. Suffix: ##
_BYTE type Ok QB64 extension. Signed 8-bit integer datatype. Suffix: %%
_UNSIGNED _BYTE type Ok QB64 extension. Unsigned 8-bit integer datatype. Suffix: ~%%
_UNSIGNED INTEGER type Ok QB64 extension. Unsigned 16-bit integer datatype. Suffix: ~%
_UNSIGNED LONG type Ok QB64 extension. Unsigned 32-bit integer datatype. Suffix: ~&
_OFFSET type Ok QB64 extension. Signed integer datatype equivalent to std::ssize_t. Suffix: %&
_UNSIGNED _OFFSET type Ok QB64 extension. Unsigned integer datatype equivalent to std::size_t. Suffix: ~%&
_BIT*n type Buggy QB64 extension; parsed, not implemented . Suffix: `n
_UNSIGNED _BIT*n type Buggy QB64 extension; parsed, not implemented. Suffix: ~`n
STRING*n type Buggy Length constraint is ignored. Suffix: $n
TYPE ... END TYPE Ok
Variable type suffixes Ok As indicated above
Implicit scalar variables Ok Warning is given when a variable is declared implicitly
Implicit array variables Ok Warning is given when a variable is declared implicitly
SELECT CASE Ok
CASE expr Ok Same as CASE IS = expr
CASE IS expr Ok Same as CASE IS = expr
CASE IS operator expr Ok Accepted operators: <, <=, =, >=, >, <>, NOT and mispellings: =<, =>, ><
CASE expr TO expr Ok When all the CASE expressions are integer constants and the TO range spans more than 512 values, the compiled code requires GCC, ICC or Clang++ to build.
CASE expr, expr, ... Ok
SELECT CASE with constant integer values Ok Translated into switch{} in C++, as long as there are no CASE IS options with an operator other than =
SELECT CASE with constant string values Ok Translated into switch{} in C++ with a hashmap, as long as there are no CASE IS options with an operator other than =, or ranged cases
SELECT CASE with non-constant values, or with comparator operands, or with float values Ok Translated into a series of if(). CASE expressions are only evaluated once.
SELECT CASE with a non-constant expression Ok The select-expression is evaluated only once
ON ... GOTO/GOSUB Ok Translated into a very optimal SELECT CASE internally. If you are aiming for QuickBASIC compatibility, ON..GOTO is preferred over SELECT CASE, because QuickBASIC optimizes the former but not the latter. In QBC, either is fine. (In QB64, neither is fine. Nothing is fine.)
WHILE ... WEND Ok Same as DO WHILE ... LOOP, except does not provide a scope for "EXIT DO". WEND and LOOP cannot be interchanged.
DO ... LOOP Ok
DO WHILE ... LOOP Ok
DO UNTIL ... LOOP Ok Interpreted as DO WHILE NOT ... LOOP
DO ... LOOP WHILE Ok
DO ... LOOP UNTIL Ok Interpreted as DO ... LOOP WHILE NOT
DO WHILE/UNTIL ... LOOP WHILE/UNTIL Disputable Having two exit conditions is illegal in QuickBASIC. QBC produces a warning message, but accepts it anyway. In many situations where QBC produces a warning/error message, it still tries to do what makes most sense.
FOR ... NEXT Ok
Non-constant end-values in FOR ... NEXT Ok End-value is evaluated only once
Non-constant steps in FOR ... NEXT Ok Step is evaluated only once
NEXT a,b,c Ok Shortcut syntax (same as NEXT a: NEXT b: NEXT c)
NEXT Ok Shortcut syntax (loop variable name can be omitted)
IF... THEN... ELSEIF... ELSE... ENDIF (multi-line) Ok
IF... THEN... ELSE... (single-line) Ok
IF... GOTO... Ok Shortcut syntax (THEN can be omitted when immediately followed by GOTO)
IF... THEN numeric-label ELSE numeric-label Ok Shortcut syntax (GOTO can be omitted when between THEN/ELSE and a numeric label)
IF... THEN REM comment Ok This is a single-line IF.
IF... THEN 'comment Ok This is a multi-line IF.
SUB ... END SUB Ok
FUNCTION ... END FUNCTION Ok
DEF FN ... END DEF Ok END SUB, END FUNCTION and END DEF are interchangeable just like in QuickBASIC IDE. (They are not interchangeable in QuickBASIC's commandline compiler, though.)
DECLARE FUNCTION Ok Mandatory only when the FUNCTION is used before definition. (To disambiguate from implicit array access.)
DECLARE SUB Ok Semi-mandatory when the SUB is used before definition. The compiler makes a guess of the prototype based on first use, but it may be wrong.
BYVAL parameters Ok Arrays cannot be passed "BYVAL" though.
SEG parameters Partial SEG attribute is ignored
Other parameters Ok Automatically converted into BYVAL if can be done without changing program semantics. Non-numeric parameters (STRING and usertypes) are passed by const-reference when automatic BYVAL is inserted, by copy when explicit BYVAL is used and by reference otherwise.
ANY parameters Ok Array element type will be deduced from either the first call or the definition, and fixed at that point
$STATIC arrays into array parameters Ok Number of dimensions deduced at call-time, can vary from call to call
$DYNAMIC arrays into array parameters Ok Number of dimensions deduced at call-time, can vary from call to call
STATIC statement Ok Accepts explicit array bounds, even though QuickBASIC does not.
SHARED statement Ok Accepts explicit array bounds, even though QuickBASIC does not. If the SHARED variable does not exist, creates one.
STATIC clause Ok Attached to SUB/FUNCTION/DEF declaration
SHARED clause Ok Attached to DIM/REDIM
DIM, REDIM statements, COMMON Ok REDIM cannot be used for parameter arrays. REDIM does not erase array contents, but may change their order.
COMMON statement Partial Interpreted as DIM
DEF FNxx(...) = ...Ok All variables from the main program are visible to DEF functions as if they were SHARED variables, regardless of whether you use the single-line or multi-line DEF syntax. They are a bit like closures in modern languages.
Redefining FNxx Unsupported GW-BASIC allows redefining FNxx functions at runtime. (Example program.) While this would technically be doable, it is hard to optimize. QuickBASIC does not support this either.
CONST Ok Anything is accepted as long as the expression can be evaluated at compile time. (User functions are not accepted in CONSTs.)
LET Ok There are no situations where the LET keyword is mandatory. It can however speed up compilation when dealing with implicitly declared arrays.
Sub calls (implicit) Ok
CALL (explicit sub call) Ok CALL is mandatory when calling a SUB without parameters in the beginning of a line containing multiple statements. It can otherwise speed up compilation in some cases, when the compiler does not need to waste time differentiating between array access and subfunction call syntax.
OPTION BASE Ok
$DYNAMIC, $STATIC Ok Only valid in the beginning of comments (either REM or ')
$INCLUDE: '...' Ok Only valid in the beginning of comments (either REM or ')
DATA, RESTORE, READ Ok
ERASE Ok
OPEN ... AS Ok
OPEN ... , (old syntax) Ok If mode string is compile-time constant, will be translated into new-style OPEN (more efficient code)
RANDOM/OUTPUT/INPUT/APPEND/BINARY (OPEN modes)Ok
ACCESS READ/WRITE/READ WRITE (OPEN modes)Ok
SHARED/LOCK READ/LOCK WRITE/LOCK READ WRITE (OPEN modes)Ok
PRINT/PRINT #/LPRINT Partial LPRINT does not work
? Ok Shortcut syntax (? is interpreted as PRINT)
USING (PRINT attribute) Buggy Comma and period are interpreted even when should not, otherwise ok
SPC, TAB (print attributes) Ok
Trailing semicolon or comma (PRINT/LPRINT) Ok
WRITE #/WRITE Ok
INPUT/LINE INPUT/INPUT #/LINE INPUT # Ok
REM Ok Only valid after a numeric label, a statement separator, or a THEN/ELSE keyword.
DEFINT,DEFLNG,DEFSTR,DEFSNG,DEFDBL Ok
_DEFINE range AS type Ok QB64 extension
Error handling: ON ERROR GOTO n, ON ERROR GOTO 0, RESUME, RESUME NEXT, ERROR Partial Bug: ON ERROR GOTO 0 in error handler will not cause a runtime error.
Control flow: GOTO, GOSUB, RETURN Ok Compiled code requires GCC, ICC or Clang++ to build.
GO TO Ok Interpreted as GOTO. "GO" is not a reserved word though.
Control flow: EXIT FOR, EXIT DO, EXIT SUB, EXIT FUNCTION, EXIT DEF Ok EXIT SUB/EXIT FUNCTION/EXIT DEF are interchangeable. WHILE...WEND is transparent to EXIT DO. There is no EXIT SELECT.
Control flow: STOP, END, SYSTEM Ok
Logical operators: XOR, OR, AND, NOT Ok
Logical operator: EQV Ok a EQV b is translated to NOT(a XOR b) behind the scenes
Logical operator: IMP Ok a IMP b is translated to (NOT a)OR(b) behind the scenes
Logical operators: _SHL, _SHR Ok QBC extensions (arithmetic left and right shifts)
Comparators: <, <=, >, >=, =, <> Ok ><, =<, => are accepted misspellings
Duality of AND, OR, NOT Ok Compiler automatically decides where AND is converted into & and where into &&; similarly for OR into | or ||, and NOT into ! or ~
Shortcut evaluation of AND and OR Ok Where compiler automatically deduced the desired action is comparison and not the calculation of binary value
Arithmetic operators: +, -, *, ^ Ok
Arithmetic operator: / Ok Implicit conversion to SINGLE (for INTEGER operands and smaller), DOUBLE (for LONG operands) or _FLOAT (for _OFFSET operands)
Arithmetic operator: \ Ok
Automatic conversion of 2^n into 1 _SHL nOk Category: optimization. Only when n is integer. Otherwise generates _EXP2(n).
Automatic conversion of m*(1 _SHL n) into m _SHL nOk Category: optimization
Automatic conversion of m\(1 _SHL n) into m _SHR nOk Category: optimization
Numeric functions: SIN, COS, TAN, ATN, SQR, LOG, EXP Ok No range checking
Numeric functions: _ASIN, _ACOS Ok QBC extensions. They will be generated automatically also if the program attempts to construct them from standard QB functions, such as EXP(x)-EXP(-x) which is automatically converted into _SINH(x)*2.
Numeric functions: _SINH, _COSH, _TANH Ok QBC extensions. Automatic conversions.
Numeric functions: _ASINH, _ACOSH, _ATANH Ok QBC extensions. Automatic conversions.
Numeric functions: _ATAN2, _EXP2, _LOG2, _LOG10 Ok QBC extensions
Numeric functions: INT, FIX, CINT, CLNG, CSNG, CDBL, ABS, SGN Ok
Implicit rounding towards nearest when assigning (LET or VAL) a non-integer value into an integer variable Ok As if CINT/CLNG was called (rather than INT/FIX, which round towards zero and truncate respectively)
Implicit rounding towards nearest when READing or INPUTting a non-integer value into an integer variable Broken untested
Pseudo random generator: RANDOMIZE, RND Ok
Array functions: LBOUND, UBOUND Ok
File functions: LOC, LOF, FREEFILE, INPUT$ Ok
File functions: FILEATTR Unimplemented
I/O: INP, PEEK, OUT, POKE, WAIT, DEF SEG=n Partial Emulates some common PC hardware:
  • OPL3 sound synthesizer: Full support (IN/OUT &H388-&H38B)
  • VGA DAC (IN/OUT &H387-&H389): Partial support in SCREEN 13
  • VGA SEQ/CRTC (IN/OUT &H3C2-&H3C5,&H3D4-&H3D5): Support for unchained "tweaked" modes
  • VGA VRAM (DEF SEG=&HA000): Supported in SCREEN 13
  • VGA VRAM (DEF SEG=&HB800): Supported in text modes
  • Raw keyboard input (IN &H60): Fully supported in graphics modes, partially in text modes
Memory functions: VARSEG, VARPTR, VARPTR$ Ok VARPTR and VARSEG produce 32-bit (LONG) values. These two in conjunction produce a 64-bit offset on 64-bit systems.
Memory functions: LEN Ok When non-string parameters. Usually evaluated at compile-time.
Memory functions: FRE, SADD Unimplemented
String functions: STR$, LTRIM$, RTRIM$, LCASE$, UCASE$, INSTR, LEN, ASC, CHR$, HEX$, OCT$ Ok Always evaluated at compile-time if possible. Some combinations are replaced with efficient inline code where possible, to avoid creating string temporaries.
String functions: MID$, LEFT$, RIGHT$ Ok Combinations of MID$, LEFT$ and RIGHT$ are optimized as an unit.
String functions: SPACE$, STRING$ Ok Sometimes evaluated at compile-time.
String functions: _BIN$ Ok QBC extension.
String functions: VAL Ok VAL also accepts &Bxxx values (QB64 extension).
System functions: TIME$, DATE$, TIMER, COMMAND$, ENVIRON$ Ok
Conversion functions: MKI$, MKL$, CVI, CVL Ok Portable
Conversion functions: MKD$, MKS$, CVS, CVD Ok Supported, but portable only on compatible platforms (32-bit float and 64-bit double)
Visual functions: CSRLIN, POS Ok
Visual functions: POINT, SCREEN Partial
Visual functions: _NEWIMAGE Partial QB64 extension
PLAY statement Ok Three-channel sound support (Tandy emulation)
PLAY function Partial
SOUND, BEEP Ok
NOISE statement Ok Tandy emulation
ON PLAY ... GOSUB, PLAY ON, PLAY OFF, PLAY STOP Partial Timings may differ from QuickBASIC
_SNDRAWLEN, _SNDRATE, _SNDRAW Ok QB64 extensions
_SNDOPEN, _SNDPAUSED, _SNDPLAYING, _SNDCOPY, _SNDBAL, _SNDRAWOPEN, _SNDRAWDONE, _SNDCLOSE, _SNDSTOP, _SNDPAUSE, _SNDPLAY, _SNDPLAYCOPY Unimplemented QB64 extensions
INKEY$ Partial Fully implemented in graphics modes, support is partial in text modes
_KEYDOWN Unimplemented QB64 extension. Use INP(&H60) instead; it is fully implemented in graphics modes and partially in text modes.
String statements: LSET, RSET, MID$ Ok
String statements: ASC Ok QB64 extension. This is not the ASC function. This is the statement: ASC(string,position) = bytevalue
Control statements: SWAP, CLEAR Ok
File statements: CLOSE, GET, PUT, FIELD Ok
File statements: KILL, FILES, SEEK, CHDIR, MKDIR, RMDIR, WIDTH Unimplemented
Visual statements: LOCATE, SCREEN, COLOR, PALETTE, WIDTH, PALETTE USING Partial
Visual statements: VIEW PRINT, VIEW, WINDOW Partial
Visual statements: GET, PUT Unimplemented
Visual statements: CIRCLE, LINE, PAINT, PSET, DRAW, CLS Ok In supported graphics modes
KEY ON, KEY OFF, KEY LIST, KEY, KEY(n) ON, KEY(n) OFF, KEY(n) STOP, ON KEY(n) GOSUB Unimplemented
STRIG(n) ON, STRIG(n) OFF, STRIG(n) STOP, ON STRIG(n) GOSUB Unimplemented
COM(n) ON, COM(n) OFF, COM(n) STOP, ON COM(n) GOSUB Unimplemented
PEN ON, PEN OFF, PEN STOP, ON PEN GOSUB Unimplemented
TIMER ON, TIMER OFF, TIMER STOP, ON TIMER GOSUB Unimplemented

1.3. Features which are gained for free

1.3.1. Memory allocation

In modern operating systems, the memory allocation is designed so that the user doesn't have to care about it. We don't have to meddle with EMS/XMS or any other kind of perverse system the hardware requires for memory allocation.
So if you want to say DIM area(1048576) AS INTEGER, it's fine!

1.3.2. Hardware services

In *nix systems, all the devices have been designed so that you can use them by just opening the appropriate file from /dev directory. For example, if you wanted to record and play with your soundcard, you could do OPEN "/dev/dsp" FOR BINARY AS #1, and that's fine. You read there (record), you write there (play).
Of course this won't work in Windows systems.
Other examples could be floppy disks, frame buffer consoles etc.
This isn't the whole truth. Some devices require you to do ioctls before you can do anything useful. This will be considered.

1.4. Extra features

There are no plans for extra features yet, but internationalizations like UTF-8 support would be nice.

1.4.1. Multitasking

QuickBasic programs are usually designed to take 100% of the CPU time all the time. This badly fits to multitasking environments we nowadays have in modern operating systems.
But history is history, and we have to support it.
But we don't have to limit ourselves to it. Even if we couldn't detect and convert Ti#=TIMER:WHILE TIMER<Ti#+1:WEND style loops to USLEEP 1000000, we could support things like USLEEP and FORK. Just maybe.
See your favourite POSIX manual if you don't know what those functions mean.

The ON PLAY(n) mechanism (and ON KEY(n), and ON TIMER(n), and ON STRIG(n), and ON PEN, and ON COM(n)) could also be implemented as threads. That way, we wouldn't need to prefix each statement with a call to a checking routine as is done by QuicBASIC. (We still need to do that for ON ERROR, though, because of RESUME which may require repeating the same statement.)

2. Copying

qbc has been written by Joel Yliluoma, a.k.a. Bisqwit,
and is distributed under the terms of the General Public License (GPL).

If you utilize qbc or parts of it for any purpose, the author wishes to hear of it (and possibly participate), but it is not mandatory for using this software.

2.1. Documentation

Extensive documentation of the design of this compiler can be found in the source package in the doc/ directory.

3. Requirements

Requirements:
  • GCC or Clang++
  • libSDL (often a package called libsdl1.2-dev)
  • libSlang (often a package called libslang2-dev)
  • GNU make is recommended for building QBC.

4. "I want to start programming"

Then learn programming. It's a slow journey which requires patience and eagerness to learn new things.

If you want to start programming with BASIC, go and see DarkBasic.

5. Downloading

Downloading help

  • Do not download everything - you only need one file (newest version for your platform)!
  • Do not use download accelerators or you will be banned from this server before your download is complete!

The most recent source code (bleeding edge) for qbc can also be downloaded by cloning the Git repository by:

Date (Y-md-Hi) acc        Size Name                
2014-0528-0321 r--      206051 qbc-0.7.0.tar.bz2
2014-0528-0321 r--      246113 qbc-0.7.0.tar.gz
2014-0514-2251 r--      188907 qbc-0.6.0.tar.bz2
2014-0514-2251 r--      233642 qbc-0.6.0.tar.gz
2008-0127-0452 r--      180236 qbc-0.5.1.tar.bz2
2008-0127-0452 r--      219353 qbc-0.5.1.tar.gz
2008-0127-0452 r--       16528 patch-qbc-0.5.0-0.5.1.bz2
2008-0127-0452 r--       17292 patch-qbc-0.5.0-0.5.1.gz
2008-0126-2030 r--      176975 qbc-0.5.0.tar.bz2
2008-0126-2030 r--      214984 qbc-0.5.0.tar.gz
2008-0126-2030 r--       50002 patch-qbc-0.4.5-0.5.0.bz2
2008-0126-2030 r--       54068 patch-qbc-0.4.5-0.5.0.gz
2008-0124-1505 r--      145829 qbc-0.4.5.tar.bz2
2008-0124-1505 r--      181985 qbc-0.4.5.tar.gz
2008-0124-1505 r--       50256 patch-qbc-0.4.4-0.4.5.bz2
2008-0124-1505 r--       60158 patch-qbc-0.4.4-0.4.5.gz
2008-0122-1735 r--      136432 qbc-0.4.4.tar.bz2
2008-0122-1735 r--      168426 qbc-0.4.4.tar.gz
2008-0122-1735 r--       49836 patch-qbc-0.4.3-0.4.4.bz2
2008-0122-1735 r--       57630 patch-qbc-0.4.3-0.4.4.gz
2007-0314-0126 r--      100675 qbc-0.4.3.tar.bz2
2007-0314-0126 r--      122547 qbc-0.4.3.tar.gz
2007-0314-0126 r--        8308 patch-qbc-0.4.2-0.4.3.bz2
2007-0314-0126 r--        8189 patch-qbc-0.4.2-0.4.3.gz
2007-0215-0215 r--       98229 qbc-0.4.2.tar.bz2
2007-0215-0215 r--      119154 qbc-0.4.2.tar.gz
2007-0215-0215 r--        5892 patch-qbc-0.4.1-0.4.2.bz2
2007-0215-0215 r--        5810 patch-qbc-0.4.1-0.4.2.gz
2007-0214-2011 r--       97018 qbc-0.4.1.tar.bz2
2007-0214-2011 r--      117838 qbc-0.4.1.tar.gz
2007-0214-2011 r--       10046 patch-qbc-0.4.0-0.4.1.bz2
2007-0214-2011 r--       10302 patch-qbc-0.4.0-0.4.1.gz
2007-0214-0043 r--       95349 qbc-0.4.0.tar.bz2
2007-0214-0043 r--      114740 qbc-0.4.0.tar.gz
2007-0214-0043 r--       24540 patch-qbc-0.3.13-0.4.0.bz2
2007-0214-0043 r--       30107 patch-qbc-0.3.13-0.4.0.gz
2007-0125-0027 r--       93376 qbc-0.3.13.tar.bz2
2007-0125-0027 r--      113308 qbc-0.3.13.tar.gz
2007-0125-0027 r--       25878 patch-qbc-0.3.12-0.3.13.bz2
2007-0125-0027 r--       31150 patch-qbc-0.3.12-0.3.13.gz
2007-0124-0146 r--       11654 patch-qbc-0.3.11-0.3.13.bz2
2007-0124-0146 r--       12760 patch-qbc-0.3.11-0.3.13.gz
2007-0124-0147 r--       88083 qbc-0.3.12.tar.bz2
2007-0124-0147 r--      105469 qbc-0.3.12.tar.gz
2007-0124-0147 r--       12842 patch-qbc-0.3.11-0.3.12.bz2
2007-0124-0147 r--       14097 patch-qbc-0.3.11-0.3.12.gz
2007-0123-0158 r--       83448 qbc-0.3.11.tar.bz2
2007-0123-0158 r--       99228 qbc-0.3.11.tar.gz
2007-0123-0158 r--        5814 patch-qbc-0.3.10-0.3.11.bz2
2007-0123-0158 r--        5804 patch-qbc-0.3.10-0.3.11.gz
2007-0122-1625 r--       82262 qbc-0.3.10.tar.bz2
2007-0122-1625 r--       97672 qbc-0.3.10.tar.gz
2007-0122-1625 r--       12742 patch-qbc-0.3.9-0.3.10.bz2
2007-0122-1625 r--       13655 patch-qbc-0.3.9-0.3.10.gz
2006-1117-0136 r--       79141 qbc-0.3.9.tar.bz2
2006-1117-0136 r--       93867 qbc-0.3.9.tar.gz
2006-1117-0136 r--       19777 patch-qbc-0.3.8-0.3.9.bz2
2006-1117-0136 r--       20562 patch-qbc-0.3.8-0.3.9.gz
2006-1112-0245 r--       68248 qbc-0.3.8.tar.bz2
2006-1112-0245 r--       78076 qbc-0.3.8.tar.gz
2006-1112-0245 r--       10684 patch-qbc-0.3.7-0.3.8.bz2
2006-1112-0245 r--       11632 patch-qbc-0.3.7-0.3.8.gz
2006-1102-1521 r--       65768 qbc-0.3.7.tar.bz2
2006-1102-1521 r--       75003 qbc-0.3.7.tar.gz
2006-1102-1521 r--        4729 patch-qbc-0.3.6-0.3.7.bz2
2006-1102-1521 r--        4785 patch-qbc-0.3.6-0.3.7.gz
2006-1101-0005 r--       65246 qbc-0.3.6.tar.bz2
2006-1101-0005 r--       74239 qbc-0.3.6.tar.gz
2006-1101-0005 r--        4774 patch-qbc-0.3.5-0.3.6.bz2
2006-1101-0005 r--        4801 patch-qbc-0.3.5-0.3.6.gz
2006-1029-0531 r--       64179 qbc-0.3.5.tar.bz2
2006-1029-0531 r--       72893 qbc-0.3.5.tar.gz
2006-1029-0531 r--        8111 patch-qbc-0.3.4-0.3.5.bz2
2006-1029-0531 r--        8331 patch-qbc-0.3.4-0.3.5.gz
2006-1027-0109 r--       61709 qbc-0.3.4.tar.bz2
2006-1027-0109 r--       69802 qbc-0.3.4.tar.gz
2006-1027-0109 r--        6771 patch-qbc-0.3.3-0.3.4.bz2
2006-1027-0109 r--        6915 patch-qbc-0.3.3-0.3.4.gz
2006-1025-2339 r--       59739 qbc-0.3.3.tar.bz2
2006-1025-2339 r--       67374 qbc-0.3.3.tar.gz
2006-1025-2339 r--       16138 patch-qbc-0.3.2-0.3.3.bz2
2006-1025-2339 r--       18473 patch-qbc-0.3.2-0.3.3.gz
2006-1025-1502 r--       58077 qbc-0.3.2.tar.bz2
2006-1025-1502 r--       64966 qbc-0.3.2.tar.gz
2006-1025-1502 r--        3381 patch-qbc-0.3.1-0.3.2.bz2
2006-1025-1502 r--        3332 patch-qbc-0.3.1-0.3.2.gz
2006-1024-1823 r--       58146 qbc-0.3.1.tar.bz2
2006-1024-1823 r--       65066 qbc-0.3.1.tar.gz
2006-1024-1823 r--       33656 patch-qbc-0.3.0-0.3.1.bz2
2006-1024-1823 r--       39143 patch-qbc-0.3.0-0.3.1.gz
2006-1023-1436 r--       44153 qbc-0.3.0.tar.bz2
2006-1023-1436 r--       47543 qbc-0.3.0.tar.gz
2006-1023-1436 r--       36034 patch-qbc-0.2.3-0.3.0.bz2
2006-1023-1436 r--       41007 patch-qbc-0.2.3-0.3.0.gz
2006-1013-2240 r--       31036 qbc-0.2.3.tar.bz2
2006-1013-2240 r--       31872 qbc-0.2.3.tar.gz
2006-1013-2240 r--       13311 patch-qbc-0.2.2-0.2.3.bz2
2006-1013-2240 r--       13474 patch-qbc-0.2.2-0.2.3.gz
2004-1009-1958 r--       26275 qbc-0.2.2.tar.bz2
2004-1009-1958 r--       48553 patch-qbc-0.2.1-0.2.2.bz2
2003-1117-0431 r--       58372 qbc-0.2.1.tar.bz2
2003-1117-0431 r--       65106 patch-qbc-0.2.0-0.2.1.bz2
2003-1117-0333 r--       62101 qbc-0.2.0.tar.bz2
2003-1117-0333 r--       70740 patch-qbc-0.1.1.8-0.2.0.bz2
2003-1117-0333 r--       88751 patch-qbc-0.1.1-0.2.0.bz2
2003-0530-0259 r--       57172 qbc-0.1.1.8.tar.bz2
2003-0530-0259 r--       22912 patch-qbc-0.1.1.7-0.1.1.8.bz2
2003-0206-2140 r--       55990 qbc-0.1.1.7.tar.bz2
2003-0206-2140 r--        1839 patch-qbc-0.1.1.6-0.1.1.7.bz2
2003-0206-2043 r--       55387 qbc-0.1.1.6.tar.bz2
2003-0206-2043 r--        3186 patch-qbc-0.1.1.5-0.1.1.6.bz2
2002-1214-1644 r--       55469 qbc-0.1.1.5.tar.bz2
2002-1214-1644 r--       11430 patch-qbc-0.1.1.4-0.1.1.5.bz2
2002-1020-1257 r--       55560 qbc-0.1.1.4.tar.bz2
2002-1020-1257 r--        5868 patch-qbc-0.1.1.3-0.1.1.4.bz2
2002-0719-1642 r--       53250 qbc-0.1.1.3.tar.bz2
2002-0719-1642 r--        1643 patch-qbc-0.1.1.2-0.1.1.3.bz2
2002-0710-2203 r--       53205 qbc-0.1.1.2.tar.bz2
2002-0710-2203 r--        3804 patch-qbc-0.1.1.1-0.1.1.2.bz2
2002-0514-1755 r--       52559 qbc-0.1.1.1.tar.bz2
2002-0514-1755 r--       11007 patch-qbc-0.1.1-0.1.1.1.bz2
2002-0408-1431 r--       43463 qbc-0.1.1.tar.bz2
2002-0408-1431 r--       39554 patch-qbc-0.1.0-0.1.1.bz2
2002-0330-1611 r--        6013 qbc-0.1.0.tar.bz2
2002-0330-1611 r--       14721 patch-qbc-0.0.2-0.1.0.bz2
2002-0328-2338 r--       16758 qbc-0.0.2.tar.bz2
2002-0328-2338 r--       10421 patch-qbc-0.0.1-0.0.2.bz2
2000-0926-1507 r--       11897 qbc-0.0.1.rar
2000-0926-1507 r--       13472 qbc-0.0.1.tar.bz2
2000-0926-1507 r--       21030 qbc-0.0.1.zip
2000-0926-1507 r--         617 patch-qbc-0.0.0-0.0.1.bz2
2000-0926-1505 r--       11636 qbc-0.0.0.rar
2000-0926-1505 r--       13133 qbc-0.0.0.tar.bz2
2000-0926-1505 r--       21008 qbc-0.0.0.zip
Back to the source directory index at Bisqwit's homepage