dosemu, powerbasic program, centos 5 and Fedora 10

Frank Cox theatre at sasktel.net
Thu Mar 12 04:56:36 UTC 2009


I seem to have uncovered some sort of a bug, but I'm not sure in what.

I have a computer set up with Fedora 10/x86_64, another with Fedora 10/ie86, and
another with Centos 5/i386. All have dosemu 1.4.0 installed.

I have a program that's written in powerbasic that runs fine on the Centos box
but crashes dosemu on the Fedora boxes.  The dosemu window closes without
any error reported -- the window just disappears.

I have narrowed the problem down to some interaction between a "DEFINT A-Z"
compiler directive and a word wrap subroutine that's part of the program.  If I
either remove the DEFINT directive, comment-out the word wrap subroutine or
remove the parts of the program that actually call that subroutine, the program
doesn't crash on Fedora 10.

I'm sure this program worked fine up until at least fairly recently.  I see
that the last time I modified it was in October of 2008, so it apparently worked
fine on Fedora 9, which is what I was running on this machine at that
time.

I have included the word wrap routine here so you can see what it does.  It
runs fine as-is on Centos 5/i386 but crashes on Fedora 10.  Removing the
DEFINT line makes it work fine on all three machines.  It's just this routine
alone that's causing the problem because the crash occurs when attempting to
run the compiled version of exactly what you see here.  If anyone else would
like to try this, I have put the powerbasic-compiled version of the following
program on my website at http://www.melvilletheatre.com/dosemu-crash.tar.bz2

Again, it runs fine on Centos 5/i386 but crashes on Fedora 10.

$cpu 80386
$float npx
$lib all off
DEFINT A-Z     ' -- If this line commented out it works.

WordWrap text$,1,76,5

' ********************************
' text$, column, wrap length, row
SUB WordWrap (text$, x1, x2, y1)
        shared wrapped.text$()
        x=0
    savetext$ = text$
    s = x2 - x1
    y = y1
    ' LOCATE y, x1
    IF LEN(text$) > s THEN
       DO
         IF LEN(text$) = 0 THEN EXIT DO
         text$ = LTRIM$(text$)
         IF LEN(text$) >= s THEN
            tmp$ = LEFT$(text$, s)
         ELSE
            tmp$ = text$
         END IF
         stmp$ = tmp$
         GOSUB ReverseTmp
         IF MID$(text$, s + 1, 1) = " " THEN
            wrapped.text$(x)= stmp$
            incr x
            text$ = MID$(text$, s + 1)
         ELSE
         a = INSTR(tmp$, " ")
         IF a = 0 THEN
            wrapped.text$(x)= stmp$
            incr x
            text$ = MID$(text$, s + 1)
         ELSE
            wrapped.text$(x)= LEFT$(text$, s - a)
            incr x
            text$ = MID$(text$, s - a + 1)
         END IF
         END IF
         incr y
         ' LOCATE y, x1
       LOOP
    ELSE
       wrapped.text$(x)=text$
    END IF
    text$ = savetext$
    EXIT SUB

ReverseTmp:
    t$ = ""
    FOR I = LEN(tmp$) TO 1 STEP -1
        t$ = t$ + MID$(tmp$, I, 1)
    NEXT I
    tmp$ = t$
    RETURN
END SUB



-- 
MELVILLE THEATRE ~ Melville Sask ~ http://www.melvilletheatre.com




More information about the fedora-list mailing list