/*
    Sort Mem List
    SML.c © 1990 by Oliver Wagner

    sortiert MemList nach angegeben Parametern. Ersatz für "FastMemFirst"
    oder für Testzwecke

    Beispiel:
    SML "expansion ram" 5 "Fast Memory" 0

    "expansion ram", echtes (!) Fast-RAM im 500er (z.B. GolemBox), erhält
    höchste Priorität.

    "Fast Memory", kickstartkonfigurierte interne Speichererweiterung im
    500er oder alten 2000ern (z.B. 512k oder 1.8/2.0MB intern) erhält
    Priorität 0

    "Chip Memory" behält Priorität -10 (nach Systemstart so vorgegeben)

    ----------------------------------------------------------------------

    für Lettuce C V5.1

    Weitergabe außerhalb des Z-Netz ohne
    schriftliche Genehmigung des Autors
    untersagt!

    Oliver Wagner
    Landsberge 5
    4322 Sprockhövel
    Großdoitschland/Gau West
    Tel.: 02339/3086
    Z-Netz: Oliver_Wagner@TTB.ZER
    Fido: Oliver Wagner, 2:244/14.4265

*/

#include <proto/dos.h>
#include <proto/exec.h>
#include <exec/execbase.h>
#include <string.h>

#define print(s) Write(output,s,strlen(s))

extern void _exit(int);
extern int atoi(char*);

void main(int argc, char **argv)
{
    BPTR output=Output();
    struct ExecBase *SysBase=*(struct SysBase**)4;
    struct Node *node;
    struct List *memlist=&SysBase->MemList;
    int c=1;

    print("\x9b33;3;4m SortMemList \x9b0m by Oliver Wagner © 1990");
    if(argc<3||!(argc&1)) {
	print("\nUsage: SML \"chunk-name\" priority [chunk-name priority]...\n");
	_exit(20);
    }
    while(c<argc) {
	if(!(node=FindName(memlist,argv[c]))) {
	    print("\nUnable to locate memnode \"\x9b1m");
	    print(argv[c]);
	    print("\x9b0m\" in memlist!\n\x07");
	    _exit(20);
	}
	Forbid();
	Remove(node);
	node->ln_Pri=atoi(argv[c+1]);
	Enqueue(memlist,node);
	Permit();
	c+=2;
    }
    print(" - OK.\n");
    _exit(0);
}
