Sudoku

Omdat het niet altijd over mountainbike hoeft te gaan...... Zet een boompje op over alles wat NIET met mountainbike te maken heeft maar hou het wel deftig.
Post Reply
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Buffer.cp
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// a PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#include "Buffer.h"

#include "BlockMove.h"
#include "bool.h"
#include "Coordinaten.h"
#include "Debug.h"
#include "RandomGenerator.h"

Buffer::Buffer()
{
}

Buffer::Buffer(cpc_n1 tabel)
{
    ::BlockMove(tabel,
                m_byte,
                aVakken);
}

bool Buffer::IsOplossing() const
{
    bool isGevondenInRij[aVakken];
    bool isGevondenInKolom[aVakken];
    bool isGevondenInKot[aVakken];
    for (n1 i=0;i<aVakken;i++)
        {
        isGevondenInRij[i]=false;
        isGevondenInKolom[i]=false;
        isGevondenInKot[i]=false;
        }
    for (n1 index=0;index<aVakken;index++)
        {
        c_n1 cijfer=m_byte[index];
        if (!cijfer)
            {
            return false;
            }
        c_n1 k=static_cast<n1>(cijfer-1);
        rc_Coordinaten c=coordinaten[index];
        // opm: isGevondenInRij[rij_k] wil zeggen:
        // cijfer k+1 is gevonden in rij "rij" enz.
        c_n1 rij_k=MaakIndex2(c.rij,
                              k);
        if (isGevondenInRij[rij_k])
            {
            return false;
            }
        isGevondenInRij[rij_k]=true;
        c_n1 kolom_k=MaakIndex2(c.kolom,
                                k);
        if (isGevondenInKolom[kolom_k])
            {
            return false;
            }
        isGevondenInKolom[kolom_k]=true;
        c_n1 kot_k=MaakIndex2(c.kot,
                              k);
        if (isGevondenInKot[kot_k])
            {
            return false;
            }
        isGevondenInKot[kot_k]=true;
        }
    return true;
}

void Buffer::MaakRandom()
{
    // opm: een random puzzel is een willekeurige volledig ingevulde puzzel.

    static c_n1 normaal[aVakken]=
        {
        8,3,5,9,6,7,2,4,1,
        9,7,4,3,1,2,8,6,5,
        2,6,1,5,4,8,3,9,7,
        3,9,8,2,7,5,6,1,4,
        6,4,7,8,9,1,5,3,2,
        5,1,2,6,3,4,9,7,8,
        4,5,6,7,8,9,1,2,3,
        7,8,9,1,2,3,4,5,6,
        1,2,3,4,5,6,7,8,9
        };
    static c_n1 getransponeerd[aVakken]=
        {
        8,9,2,3,6,5,4,7,1,
        3,7,6,9,4,1,5,8,2,
        5,4,1,8,7,2,6,9,3,
        9,3,5,2,8,6,7,1,4,
        6,1,4,7,9,3,8,2,5,
        7,2,8,5,1,4,9,3,6,
        2,8,3,6,5,9,1,4,7,
        4,6,9,1,3,7,2,5,8,
        1,5,7,4,2,8,3,6,9
        };

    c_bool transponeer=rg.Geef_randomBool();
    if (transponeer)
        {
        RoerDooreen(getransponeerd);
        }
    else
        {
        RoerDooreen(normaal);
        }
}

void Buffer::RoerDooreen(cpc_n1 normaal)
{
    // opm: SPECIALE KEUZE.
    // Rijen en kolommen mogen verwisseld worden per drie
    // (zodanig dat volledige kottekens worden verplaatst).
    // Ze mogen ook per één worden verwisseld, maar dan moeten
    // ze binnen hetzelfde kot blijven.

    n1 rijVolgordePerKot[aKot];
    n1 kolomVolgordePerKot[aKot];
    n1 rijVolgordePer1[aKot][kotGrootte];
    n1 kolomVolgordePer1[aKot][kotGrootte];
    rg.Geef_random012(rijVolgordePerKot[0],
                      rijVolgordePerKot[1],
                      rijVolgordePerKot[2]);
    rg.Geef_random012(kolomVolgordePerKot[0],
                      kolomVolgordePerKot[1],
                      kolomVolgordePerKot[2]);
    for (n1 i=0;i<orde;i++)
        {
        rg.Geef_random012(rijVolgordePer1[i][0],
                          rijVolgordePer1[i][1],
                          rijVolgordePer1[i][2]);
        rg.Geef_random012(kolomVolgordePer1[i][0],
                          kolomVolgordePer1[i][1],
                          kolomVolgordePer1[i][2]);
        }
    for (n1 kot_rij=0;kot_rij<aKot;kot_rij++)
        {
        c_n1 kot_rij_dooreen=rijVolgordePerKot[kot_rij];
        for (n1 kot_kolom=0;kot_kolom<aKot;kot_kolom++)
            {
            c_n1 kot_kolom_dooreen=kolomVolgordePerKot[kot_kolom];
            for (n1 kot_sub_r=0;kot_sub_r<kotGrootte;kot_sub_r++)
                {
                c_n1 kot_sub_r_dooreen=rijVolgordePer1[kot_rij][kot_sub_r];
                c_n1 rij=MaakIndex(kot_rij,
                                   kot_sub_r);
                c_n1 rij_dooreen=MaakIndex(kot_rij_dooreen,
                                           kot_sub_r_dooreen);
                for (n1 kot_sub_k=0;kot_sub_k<kotGrootte;kot_sub_k++)
                    {
                    c_n1 kot_sub_k_dooreen=kolomVolgordePer1[kot_kolom][kot_sub_k];
                    c_n1 kolom=MaakIndex(kot_kolom,
                                         kot_sub_k);
                    c_n1 kolom_dooreen=MaakIndex(kot_kolom_dooreen,
                                                 kot_sub_k_dooreen);
                    c_n1 index=MaakIndex2(rij,
                                          kolom);
                    c_n1 index_dooreen=MaakIndex2(rij_dooreen,
                                                  kolom_dooreen);
                    m_byte[index_dooreen]=normaal[index];
                    }
                }
            }
        }
}

void Buffer::Schrap(c_n1 aLegeVakken,
                    r_Buffer opgave) const
{
    // opm: we gaan de indexen van de vakken in een tabel zetten.
    n1 over[aVakken];
    for (n1 index=0;index<aVakken;index++)
        {
        over[index]=index;
        }

    // opm: we kiezen aLegeVakken.
    // Het i-de gekozen vak j vervangen we door het i-de vak.
    // Daardoor zitten op de plaatsen i+1 tot en met aVakken_1
    // de vakken waaruit we het i+1-de vak moeten kiezen.
    n1 i;
    for (i=0;i<aLegeVakken;i++)
        {
        c_n1 j=rg.Geef_random(i,
                              aVakken_1);
        c_n1 index=over[j];
        if (i!=j)
            {
            over[j]=over[i];
            }
        opgave.m_byte[index]=0;
        }

    // opm: daardoor zitten op de plaatsen i+1 tot en met aVakken_1
    // de vakken die we gewoon kopi‘ren.
    while (i<aVakken)
        {
        c_n1 index=over[i];
        opgave.m_byte[index]=m_byte[index];
        i++;
        }
}

void Buffer::Debug_Dump() const
{
    Debug_DumpLijn();
    for (n1 kot_rij=0;kot_rij<aKot;kot_rij++)
        {
        for (n1 kot_sub_r=0;kot_sub_r<kotGrootte;kot_sub_r++)
            {
            c_n1 rij=MaakIndex(kot_rij,
                               kot_sub_r);
            window.Schrijf("\p|");
            for (n1 kot_kolom=0;kot_kolom<aKot;kot_kolom++)
                {
                for (n1 kot_sub_k=0;kot_sub_k<kotGrootte;kot_sub_k++)
                    {
                    c_n1 kolom=MaakIndex(kot_kolom,
                                         kot_sub_k);
                    c_n1 index=MaakIndex2(rij,
                                          kolom);
                    Debug_DumpCijfer(index);
                    }
                window.Schrijf("\p|");
                }
            window.SchrijfLn();
            }
        Debug_DumpLijn();
        }
}

void Buffer::Debug_DumpLijn() const
{
    window.Schrijf("\p+");
    for (n1 i=0;i<aKot;i++)
        {
        for (n1 j=0;j<kotGrootte;j++)
            {
            window.Schrijf("\p-");
            }
        window.Schrijf("\p+");
        }
    window.SchrijfLn();
}

void Buffer::Debug_DumpCijfer(c_n1 index) const
{
    c_n1 cijfer=m_byte[index];
    if (cijfer)
        {
        window.Schrijf(cijfer);
        }
    else
        {
        window.Schrijf("\p ");
        }
}

void Buffer::Cpp_Dump() const
{
    window.Schrijf("\p{");
    window.SchrijfLn();
    for (n1 rij=0;rij<puzzelGrootte;rij++)
        {
        window.Schrijf("\p    ");
        bool isEerste=true;
        for (n1 kolom=0;kolom<puzzelGrootte;kolom++)
            {
            if (isEerste)
                {
                isEerste=false;
                }
            else
                {
                window.Schrijf("\p,");
                }
            c_n1 index=MaakIndex2(rij,
                                  kolom);
            Cpp_DumpCijfer(index);
            }
        if (rij<puzzelGrootte_1)
            {
            window.Schrijf("\p,");
            }
        window.SchrijfLn();
        }
    window.Schrijf("\p}");
}

void Buffer::Cpp_DumpCijfer(c_n1 index) const
{
    c_n1 cijfer=m_byte[index];
    window.Schrijf(cijfer);
}

void Buffer::Java_Dump() const
{
    window.Schrijf("\p{");
    window.SchrijfLn();
    for (n1 rij=0;rij<puzzelGrootte;rij++)
        {
        window.Schrijf("\p    {");
        bool isEerste=true;
        for (n1 kolom=0;kolom<puzzelGrootte;kolom++)
            {
            if (isEerste)
                {
                isEerste=false;
                }
            else
                {
                window.Schrijf("\p,");
                }
            c_n1 index=MaakIndex2(rij,
                                  kolom);
            Java_DumpCijfer(index);
            }
        window.Schrijf("\p}");
        if (rij<puzzelGrootte_1)
            {
            window.Schrijf("\p,");
            }
        window.SchrijfLn();
        }
    window.Schrijf("\p}");
}

void Buffer::Java_DumpCijfer(c_n1 index) const
{
    c_n1 cijfer=m_byte[index];
    window.Schrijf(cijfer);
}
Last edited by Puzzle on Tue 06 Feb 2007 15:47, edited 1 time in total.
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Buffer.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "orde.h"

// opm: een buffer is een tabel waarvan de grootte gegarandeerd juist is.

class Buffer;
    typedef Buffer* p_Buffer;
    typedef const p_Buffer cp_Buffer;
typedef const Buffer c_Buffer;
    typedef c_Buffer* pc_Buffer;
    typedef const pc_Buffer cpc_Buffer;
typedef Buffer& r_Buffer;
typedef p_Buffer& rp_Buffer;
typedef cp_Buffer& rcp_Buffer;
typedef c_Buffer& rc_Buffer;
typedef pc_Buffer& rpc_Buffer;
typedef cpc_Buffer& rcpc_Buffer;

class Buffer
{
public:
    n1 m_byte[aVakken];
    Buffer();
    Buffer(pc_n1 tabel);
    bool IsOplossing() const;
    void MaakRandom();
private:
    void RoerDooreen(pc_n1 normaal);
public:
    void Schrap(n1 aLegeVakken,
                r_Buffer opgave) const;
    void Debug_Dump() const;
private:
    void Debug_DumpLijn() const;
    void Debug_DumpCijfer(n1 index) const;
public:
    void Cpp_Dump() const;
private:
    void Cpp_DumpCijfer(n1 index) const;
public:
    void Java_Dump() const;
private:
    void Java_DumpCijfer(n1 index) const;
};
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: collect.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "z2.h"

// opm: collectDetailed geeft informatie over de calling tree, dus
// de tijd die gespendeerd wordt in alle routines en in hun subroutines.
// Dat gebruikt meer geheugen.
// collectSummary geeft alleen de tijd in alle routines zonder rekening
// te houden met de calling tree.

c_z2 collectDetailed=0;
c_z2 collectSummary=1;
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Coordinaten.cp
// Date: 6 Januari 2007.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#include "Coordinaten.h"

Coordinaten coordinaten[aVakken];

void Init_Coordinaten()
{
    for (n1 kot_rij=0;kot_rij<aKot;kot_rij++)
        {
        for (n1 kot_kolom=0;kot_kolom<aKot;kot_kolom++)
            {
            c_n1 kot=MaakIndex(kot_rij,
                               kot_kolom);
            for (n1 kot_sub_r=0;kot_sub_r<kotGrootte;kot_sub_r++)
                {
                c_n1 rij=MaakIndex(kot_rij,
                                   kot_sub_r);
                for (n1 kot_sub_k=0;kot_sub_k<kotGrootte;kot_sub_k++)
                    {
                    c_n1 kolom=MaakIndex(kot_kolom,
                                         kot_sub_k);
                    c_n1 index=MaakIndex2(rij,
                                          kolom);
                    r_Coordinaten c=coordinaten[index];
                    c.rij=rij;
                    c.kolom=kolom;
                    c.kot=kot;
                    }
                }
            }
        }
}
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Coordinaten.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "orde.h"

struct Coordinaten;
    typedef Coordinaten* p_Coordinaten;
    typedef const p_Coordinaten cp_Coordinaten;
typedef const Coordinaten c_Coordinaten;
    typedef c_Coordinaten* pc_Coordinaten;
    typedef const pc_Coordinaten cpc_Coordinaten;
typedef Coordinaten& r_Coordinaten;
typedef p_Coordinaten& rp_Coordinaten;
typedef cp_Coordinaten& rcp_Coordinaten;
typedef c_Coordinaten& rc_Coordinaten;
typedef pc_Coordinaten& rpc_Coordinaten;
typedef cpc_Coordinaten& rcpc_Coordinaten;

// opm: de Coordinaten van een vak zijn de indexen van zijn rij,
// kolom en kot.

struct Coordinaten
    {
    n1 rij;
    n1 kolom;
    n1 kot;
    };

extern Coordinaten coordinaten[aVakken];

void Init_Coordinaten();
Last edited by Puzzle on Tue 06 Feb 2007 15:27, edited 1 time in total.
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Debug.cp
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// a PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#include "Debug.h"

#if STANDAARD_C_CONSOLE_APP
    #include "SIOUX.h"
    #include <iostream>
    using namespace std;
#else
    #include "BlockMove.h"
    #include "DebugStr.h"
#endif

#include "ExitToShell.h"

cpc_n1 Debug::getalTekst[256]=
    {
    "\p0","\p1","\p2","\p3","\p4","\p5","\p6","\p7","\p8","\p9","\p10",
    "\p11","\p12","\p13","\p14","\p15","\p16","\p17","\p18","\p19",
    "\p20","\p21","\p22","\p23","\p24","\p25","\p26","\p27","\p28",
    "\p29","\p30","\p31","\p32","\p33","\p34","\p35","\p36","\p37",
    "\p38","\p39","\p40","\p41","\p42","\p43","\p44","\p45","\p46",
    "\p47","\p48","\p49","\p50","\p51","\p52","\p53","\p54","\p55",
    "\p56","\p57","\p58","\p59","\p60","\p61","\p62","\p63","\p64",
    "\p65","\p66","\p67","\p68","\p69","\p70","\p71","\p72","\p73",
    "\p74","\p75","\p76","\p77","\p78","\p79","\p80","\p81","\p82",
    "\p83","\p84","\p85","\p86","\p87","\p88","\p89","\p90","\p91",
    "\p92","\p93","\p94","\p95","\p96","\p97","\p98","\p99","\p100",
    "\p101","\p102","\p103","\p104","\p105","\p106","\p107","\p108",
    "\p109","\p110","\p111","\p112","\p113","\p114","\p115","\p116",
    "\p117","\p118","\p119","\p120","\p121","\p122","\p123","\p124",
    "\p125","\p126","\p127","\p128","\p129","\p130","\p131","\p132",
    "\p133","\p134","\p135","\p136","\p137","\p138","\p139","\p140",
    "\p141","\p142","\p143","\p144","\p145","\p146","\p147","\p148",
    "\p149","\p150","\p151","\p152","\p153","\p154","\p155","\p156",
    "\p157","\p158","\p159","\p160","\p161","\p162","\p163","\p164",
    "\p165","\p166","\p167","\p168","\p169","\p170","\p171","\p172",
    "\p173","\p174","\p175","\p176","\p177","\p178","\p179","\p180",
    "\p181","\p182","\p183","\p184","\p185","\p186","\p187","\p188",
    "\p189","\p190","\p191","\p192","\p193","\p194","\p195","\p196",
    "\p197","\p198","\p199","\p200","\p201","\p202","\p203","\p204",
    "\p205","\p206","\p207","\p208","\p209","\p210","\p211","\p212",
    "\p213","\p214","\p215","\p216","\p217","\p218","\p219","\p220",
    "\p221","\p222","\p223","\p224","\p225","\p226","\p227","\p228",
    "\p229","\p230","\p231","\p232","\p233","\p234","\p235","\p236",
    "\p237","\p238","\p239","\p240","\p241","\p242","\p243","\p244",
    "\p245","\p246","\p247","\p248","\p249","\p250","\p251","\p252",
    "\p253","\p254","\p255"
    };

cpc_n1 Debug::waarTekst="\ptrue";

cpc_n1 Debug::onwaarTekst="\pfalse";

bool Debug::s_uitvoer=false;

void Debug::Init()
{
    #if STANDAARD_C_CONSOLE_APP
        SIOUXSettings.initializeTB=true;
        SIOUXSettings.standalone=true;
        SIOUXSettings.setupmenus=true;
        SIOUXSettings.autocloseonquit=false;
        SIOUXSettings.asktosaveonclose=true;
        SIOUXSettings.showstatusline=false;
        SIOUXSettings.columns=50;
        SIOUXSettings.rows=100;
        SIOUXSettings.toppixel=40;
        SIOUXSettings.leftpixel=5;
        SIOUXSettings.enabledraganddrop=true;
        SIOUXSettings.outlinehilite=true;
    #endif
}

void Debug::Exit()
{
    if (debug)
        {
        window.Schrijf("\pExit.");
        }
    ::ExitToShell();
}

void Debug::StartUitvoer()
{
    s_uitvoer=true;
}

void Debug::StopUitvoer()
{
    s_uitvoer=false;
}

Debug::Debug()
{
    *m_tekst=0;
}

void Debug::Schrijf(cpc_n1 tekst)
{
    if (!s_uitvoer)
        {
        return;
        }
    #if STANDAARD_C_CONSOLE_APP
        cout.write((char*)tekst+1,
                   *tekst);
    #else
        if (*m_tekst+*tekst>255)
            {
            SchrijfLn();
            }
        ::BlockMove(tekst+1,
                    m_tekst+*m_tekst+1,
                    *tekst);
        *m_tekst+=*tekst;
    #endif
}

void Debug::Schrijf(c_n1 getal)
{
    cpc_n1 tekst=getalTekst[getal];
    Schrijf(tekst);
}

void Debug::Schrijf(c_bool waar)
{
    if (waar)
        {
        Schrijf(waarTekst);
        }
    else
        {
        Schrijf(onwaarTekst);
        }
}

void Debug::SchrijfLn()
{
    if (!s_uitvoer)
        {
        return;
        }
    #if STANDAARD_C_CONSOLE_APP
        cout << std::endl;
    #else
        ::DebugStr(m_tekst);
        *m_tekst=0;
    #endif
}

Debug window;
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: Debug.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "bool.h"
#include "Link.h"
#include "n1.h"

// opm: dit programma kan op twee manieren gelinkt worden om te debuggen:
// - als standaard c-console.
// - met DebugStr traps (bij sommige compilers komt de tekst dan in
//   een log-window).
// Deze klasse dient om er voor te zorgen dat daar in de rest van het
// programma niets van te merken is.

// opm: alle Schrijf-aanroepen moeten in een "if (debug)" staan.

c_bool debug=DEBUG;

class Debug;
    typedef Debug* p_Debug;
    typedef const p_Debug cp_Debug;
typedef const Debug c_Debug;
    typedef c_Debug* pc_Debug;
    typedef const pc_Debug cpc_Debug;
typedef Debug& r_Debug;
typedef p_Debug& rp_Debug;
typedef cp_Debug& rcp_Debug;
typedef c_Debug& rc_Debug;
typedef pc_Debug& rpc_Debug;
typedef cpc_Debug& rcpc_Debug;

class Debug
{
private:
    static cpc_n1 getalTekst[256];
    static cpc_n1 waarTekst;
    static cpc_n1 onwaarTekst;
    static bool s_uitvoer;
public:
    static void Init();
    static void Exit();
    static void StartUitvoer();
    static void StopUitvoer();
private:
    n1 m_tekst[256];
public:
    Debug();
    void Schrijf(pc_n1 tekst);
    void Schrijf(n1 getal);
    void Schrijf(bool waar);
    void SchrijfLn();
};

extern Debug window;
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: DebugStr.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// a PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "n1.h"

__declspec(dllimport) extern pascal void DebugStr(p_n1 debuggerMsg);
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: DrawString.h
// Date: 10 Januari 2007.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// a PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

#include "n1.h"

__declspec(dllimport) extern pascal void DrawString(pc_n1 s);
User avatar
Puzzle
Mountainbiker
Posts: 178
Joined: Sat 19 Aug 2006 11:15
Location: MBK Super Sprint

Post by Puzzle »

Code: Select all

// File: ExitToShell.h
// Date: 17 December 2006.
// Version: 197 microseconds on PowerMac G3/233 MHz.
//
// Copyright (c) 2006 Cliff Huylebroeck. All Rights Reserved.
//
// Permission to use, copy, modify, and distribute this software
// and its documentation for NON-COMMERCIAL purposes and without
// fee is hereby granted provided that this copyright notice
// appears in all copies.
//
// Cliff Huylebroeck MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
// SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// a PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Cliff Huylebroeck SHALL NOT
// BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

#pragma once

__declspec(dllimport) extern pascal void ExitToShell();
Post Reply