From: Frank.Neumann@arbi.informatik.uni-oldenburg.de (Frank Neumann)
Subject: Probleme mit RKM Libs-Beispiel und Dice
Organization: University of Oldenburg, Germany
Date: Wed, 7 Oct 1992 14:31:19 GMT


Halloda,
ich habe ein Problem mit einem Listing aus dem RKM Libs 2.0 unter Dice
2.06.40R. Das Listing ist aus dem Kapitel Exec/Tasks, Seite 467/468.
Genau gesagt habe ich zwei Probleme:

a) Wenn Dice kompiliert, meldet er beim Linken:
6.Wrk1:work/c/lca/tst> dcc rkmtask.c -o rkmtask
Multiply defined symbol within the same library!: _CreateTask

(Das Programm ist aber trotzdem ausfuehrbar, also ist das oben wohl
eher als Warnung zu verstehen...ist da in der amiga(s|p)20.lib etwas
schlecht sortiert ?)

Interessanterweise habe vorher selbst schon mal was mit CreateTask()
ausprobiert, und da gab's beim Linken keine Probleme..allerdings
lief DAS Programm auch noch nicht :\ Dann habe ich halt das "Referenz-
Programm" genommen, denn 'was im RKM Libs steht, wird ja wohl funktionieren'.

b) Das Programm macht nicht, was es soll. Eigentlich sollte es beim
Start einen kleinen Zaehler hochrennen lassen, bis der Zaehler entweder
bei 0x8000000 ist, oder man Return drueckt. Dann wird der Zaehler
ausgegeben. Bei mir ist und bleibt der aber Null!

Huelf, liebe Welt :-}

Und um euch den Aerger des Abtippens zu ersparen, haenge ich das Listing
hier mal unten 'ran - es ist zwar nicht HAARGENAU wie das im Buch
(haehae, so entkomme ich den drohenden Law suits wegen Postens von
Copyrighted stuff :^), aber die Aenderungen sind minimal und aus Tipp-
faulheit entstanden.


Schoene Gruesse,
Frank

------ schnippel fetz -----------------------------------

/* RKM Libs 2.0, pp. 467/468 */

#include <exec/types.h>
#include <exec/memory.h>
#include <exec/tasks.h>
#include <libraries/dos.h>

#include <clib/exec_protos.h>
#include <clib/alib_protos.h>

#include <stdlib.h>
#include <stdio.h>

#define STACK_SIZE 1000L

struct Task *task = NULL;
char *simpletaskname ="SimpleTask";

ULONG sharedvar;

void simpletask( void );
void cleanexit( UBYTE *, LONG );


void main(int argc, char **argv)
{
    sharedvar = 0L;

    task = CreateTask(simpletaskname, 0, simpletask, STACK_SIZE);
    if (!task)
        cleanexit("Can't create task", RETURN_FAIL);

    printf("Program is running..\n");
    printf("Press Return:");
    getchar();

    printf("sharedvar came up to: %ld\n", sharedvar);

    Forbid();
    DeleteTask(task);
    Permit();
    cleanexit("", RETURN_OK);

}

void simpletask()
{
    while(sharedvar < 0x800000)
        sharedvar++;

    Wait(0L);
}


void cleanexit(UBYTE *s, LONG e)
{
    if (*s)
        printf("%s\n", s);

    exit(e);
}

-------- ratz fetz knabber beiss -------------------------------
-- 
+ Frank Neumann, Hauptstr. 107, 2900 Oldenburg, FRG   The Amiga is it.   +
+       InterNet: Frank.Neumann@arbi.informatik.uni-oldenburg.de         +
+       UUCP: neumann@uniol.uucp   \\//    InHouse:amigo@faramir         +
+ Zerberus: neumann@uniol.zer BitNet:295391@DOLUNI1.BITNET IRC: Franky   +
+ "All die Manta-Computer-User - Hauptsache vorne leuchtet 33Mhz auf..." +
+        - Stefan Schulze in fido.ger.amiga, 04.08.1992                  +
Newsgroups: de.comp.sys.amiga.misc