[#1] [C] Pomoc w modyfikacji programu
Znalazłem taki stareńki programik (1985!), który wyświetla zajętość pamięci pod Workbenchem. Chciałbym go jednak zmodyfikować, jednak nie mam pojęcia jak Na szczęście - są źródła. Czy ktoś mógłby mi pomóc i nakierował by mnie, co i gdzie poczytać oraz jak zestawić sobie środowisko, żeby to później skompilować?

To, co chciałbym zmienić w programie:
- dodać parametry, które pozwolą uruchomić go w wybranej wielkości i pozycji na ekranie;
- dodać parametr, który wyłączy obramowanie i gadżety okna;
- dodać parametr, który pozwoli ustawić kolor tła programu (obecnie jest czarny);


[#2] Re: [C] Pomoc w modyfikacji programu

@_arti, post #1

a to jest to link
[#3] Re: [C] Pomoc w modyfikacji programu

@Dorian3d, post #2

No.... wiem?
[#4] Re: [C] Pomoc w modyfikacji programu

@_arti, post #1

- dodać parametr, który pozwoli ustawić kolor tła programu (obecnie jest czarny);

pod kick3.1 tło jest białe
[#5] Re: [C] Pomoc w modyfikacji programu

@_arti, post #1

Program jest napisany w dobrym stylu i czytelny, więc w miarę łatwo można znaleźć poszukiwane fragmenty.

Lubię te programy Public Domain z dysków Freda Fisha. Jestem prawie pewien, że znajdziesz na dyskach Freda Fisha jakiś dużo nowszy program do tego samego celu co GfxMem.

Na początku programu możesz dodać następujący kod. Trzeba też wprowadzić dwie modyfikacje do programu:

- Program dostosowuje rozmiar okna w przypadku gdy nie ma pamięci FAST w komputerze. Można to pominąć w przypadku gdy użytkownik wybiera rozmiar.

- Stały kolor 2 (czarny w systemie 1.3) zastąpić zmienną - color.

Trudniej jest usunąć całą ramkę i gadżety, bo program wtedy może stracić gadżet zamykania okna, który służy do zamykania programu. W poniższym kodzie usuwam tylko ramkę, a nie gadżety.

Żeby szybko zestawić środowisko do kompilacji najłatwiej chyba użyć DICE (Aminet) lub VBCC.

To dopisujesz na początku programu (parametry programu masz w zmiennej template: LEFT/N, TOP/N, WIDTH/N, HEIGHT/N, NOBORDER/S, COLOR/N):

#include <dos/rdargs.h>
#include <clib/dos_protos.h>

enum
{
    ARG_LEFT,
    ARG_TOP,
    ARG_WIDTH,
    ARG_HEIGHT,
    ARG_NOBORDER,
    ARG_COLOR,
    ARG_COUNT
};

UBYTE template[]="LEFT/N, TOP/N, WIDTH/N, HEIGHT/N, NOBORDER/S, COLOR/N";
ULONG args[ARG_COUNT] = { 0 };
WORD color = 2;

To dopisujesz na początku funkcji _main():

struct RDArgs *rda;

if (rda = ReadArgs(template, args, NULL))
{
    if (args[ARG_LEFT])
    {
        NewWindow.LeftEdge = *(ULONG *)args[ARG_LEFT];
    }
    if (args[ARG_TOP])
    {
        NewWindow.TopEdge = *(ULONG *)args[ARG_TOP];
    }
    if (args[ARG_WIDTH])
    {
        NewWindow.Width = *(ULONG *)args[ARG_WIDTH];
    }
    if (args[ARG_HEIGHT])
    {
        NewWindow.Height = *(ULONG *)args[ARG_HEIGHT];
    }

    if (args[ARG_NOBORDER])
    {
        NewWindow.Flags |= WFLG_BORDERLESS;
    }
    if (args[COLOR])
    {
        color = *(ULONG *)args[COLOR]);
    }
    FreeArgs(rda);
}

Wprowadzasz 2 drobne modyfikacje do programu:

#if 0
   if (FastMax == 0)			/* if no fast memory in system */
	NewWindow.Height = 30;		/* make window smaller */
#endif
if (refresh) {
      SetAPen(rp, color);
      SetBPen(rp, color);
      SetOPen(rp, color);
      RectFill(rp, LEFT, TOP, RIGHT, BOTTOM);

[#6] Re: [C] Pomoc w modyfikacji programu

@Hexmage960, post #5

Użycie ReadArgs() spowoduje, że program będzie wymagał kicka 2.0+. Autor wątku screenshotem sugeruje, że walczy pod 1.3.

Ostatnia aktualizacja: 10.10.2021 22:04:41 przez Krashan
[#7] Re: [C] Pomoc w modyfikacji programu

@Hexmage960, post #5

Super! Dzięki. Będę kminił OK

@Krashan
Jak to obejść?
[#8] Re: [C] Pomoc w modyfikacji programu

@_arti, post #7

Jak to obejść?
Obejść się nie da. Można samodzelnie parsować linę parametrów, ale to jest trochę roboty. Najlepiej wyjść z założenia, że nie po to wychodzą nowe kickstarty, żeby się męczyć ze starymi.
1
[#9] Re: [C] Pomoc w modyfikacji programu

@Krashan, post #6

Słuszna uwaga, dziękuję! Rzeczywiście nowe kickstarty ułatwiają nieco programowanie.

@Arti

Jeżeli chciałbyś, by to działało pod 1.3., musiałbyś obsłużyć argumenty poprzez argc i argv[], które są parametrami funkcji main albo skorzystać z icon.library i ToolTypes. Pozostawiam to już jako ćwiczenie domowe.

Ostatnia aktualizacja: 10.10.2021 22:35:40 przez Hexmage960
1
[#10] Re: [C] Pomoc w modyfikacji programu

@Krashan, post #8

Czy w dobie whdload jest w ogole jakiś pojedyczny techniczny argument, żeby korzystać z 1.3/1.2?
[#11] Re: [C] Pomoc w modyfikacji programu

@michal_zukowski, post #10

Żaden. Ale pracuję nad dystrybucją 1.x - do celów muzealno/eventowo/pokazowych.
[#12] Re: [C] Pomoc w modyfikacji programu

@_arti, post #11

to nie ma sie co bawic w emulowanie readargsów, zrób na szybko parsowanie z argv[]
1
[#13] Re: [C] Pomoc w modyfikacji programu

@Krashan, post #8

wiele osób bawi sie pod kickiem 1.3 i uzywa wb 1.3. np dla mnie nie istnieje kick i wb > 1.3
[#14] Re: [C] Pomoc w modyfikacji programu

@Greczkin, post #13

Mam nadzieje, że bez rozszerzenia pod klapką bo jak z dodatkowym 512kB to słabo.
4
[#15] Re: [C] Pomoc w modyfikacji programu

@_arti, post #7

Mozesz uzyc GADS z arp.library
[#16] Re: [C] Pomoc w modyfikacji programu

@_arti, post #1

jak zestawić sobie środowisko, żeby to później skompilować?


Najpierw w kodzie źródłowym zamień wszystkie _main na main i _exit na exit.

instrukcja dla VBCC:

- pobierz i zainstaluj http://aminet.net/package/dev/c/vbcc_bin_amigaos68k, następnie http://aminet.net/package/dev/c/vbcc_target_m68k-amiga
- z http://www.haage-partner.de/download/AmigaOS/NDK39.lha wypakuj katalog include_h i wklej do vbcc:
- w user-startup dopisz Assign >NIL: vincludeos3: vbcc:include_h ADD
- kompilujesz wpisując w CLI: vc gfxmem.c +aos68k -o gfxmem
[#17] Re: [C] Pomoc w modyfikacji programu

@forge, post #16

OK

A czemu służy ta zamiana _main na main?
[#18] Re: [C] Pomoc w modyfikacji programu

@docent, post #15

Coś więcej o tym?
[#19] Re: [C] Pomoc w modyfikacji programu

@_arti, post #17

Ponieważ poprawna forma to main. Jednak autor postąpił inaczej bo:

/*
 *  Main function.  Call intution to create a new window for us on the
 *  screen.  Go from there.
 *
 * We no longer have our main() function called main();  instead we
 * use _main().  This keeps the standard _main.c function from Lattice
 * from creating a window for us that's not going to get used, and will
 * just clutter things. They figure that they are going to help us out, and
 * create a CON: type window for us.  This is ugly, and of no use to
 * us.  Gak!  Why don't they worry about their stupid compiler 
 * generating good (or even correct!) code with out this feeping
 * creaturism.  Flame off. 
 */
[#20] Re: [C] Pomoc w modyfikacji programu

@Greczkin, post #13

Kick 3.1? A na co to komu?
https://www.youtube.com/watch?v=OO3FANjwKHY
[#21] Re: [C] Pomoc w modyfikacji programu

@forge, post #19

A dlaczego tak się działo w tym całym Lattice?
[#22] Re: [C] Pomoc w modyfikacji programu

@_arti, post #18

ARP - AmigaDOS Replacement Project to byla taka inicjatywa grupy developerow amigowych popularna pod koniec lat 80, zawiazana w celu pozbycia sie bcpl przy pracy z dos.library w Kickstarcie 1.2 i 1.3. W sklad wchodzila m.in. arp.library, ktora udostepniala funkcje dosu z interfejsem c oraz zawierala wiele rozszerzen i dodatkowych funkcji np. arp filerequester itp. W pakiecie bylo tez wiele zamiennikow komend systemowych, napisanych w c. Czesc z tego trafila potem do systemu 2.
4
[#23] Re: [C] Pomoc w modyfikacji programu

@_arti, post #21

Lattice chciało być „miłe dla nieamigowego programisty” i czy trzeba, czy nie trzeba otwierało okno konsoli, żeby mieć wejście i wyjście dla biblioteki standardowej. W momencie, gdy program posiada GUI, takie okno jest doskonale zbędne i inne kompilatory pozwalają na pozbycie się go.
1
[#24] Re: [C] Pomoc w modyfikacji programu

@Krashan, post #23

A nie pomogłoby odpalenie programu z redyrekcją do NIL: ? ( >NIL: )
[#25] Re: [C] Pomoc w modyfikacji programu

@wali7, post #24

Tego nie wiem, nie kompilowałem pod Lattice. Ale może być tak, że kod startowy otwiera konsolę zawsze i wtedy nie pomoże. Z drugiej strony – tak czy inaczej wymaga to dodatkowego działania użytkownika...
[#26] Re: [C] Pomoc w modyfikacji programu

@wali7, post #24

Nie pomogloby, poniewaz to kod startup kompilatora otwiera okno konsoli. >NIL: jest parsowany i interpretowany przez shell wiec do aplikacji nie dochodzi jako parametr i nie moze ona na niego zareagowac.
[#27] Re: [C] Pomoc w modyfikacji programu

@_arti, post #21

Nie znam Lattice, gdybam że autor być może wybrał niewłaściwy kod startowy, jeśli komuś nie pasuje coś w defaultowym kodzie to może napisać własny lub użyć minimalnego, zamiast tworzyć jakieś hacki.

@Hexmage960
Program jest napisany w dobrym stylu

Zawsze można się do czegoś przyczepić, kod między 187-204 linią wygląda mało elegancko.

@_arti, jak idą postępy?
[#28] Re: [C] Pomoc w modyfikacji programu

@forge, post #27

Czekam do weekendy. Póki co... Javascript.
[#29] Re: [C] Pomoc w modyfikacji programu

@_arti, post #1

Po przeróbkach skompilowałem go w SAS/C i ten program wymaga wielu poprawek. Jak masz za dużo fastu to okienko chip jest małe i napis ile wolnego się nie wyświetla. Jak masz bardzo dużo fastu to okienko fast wychodzi poza okno. Jak dla mnie funkcja skalująca do poprawy.
1
[#30] Re: [C] Pomoc w modyfikacji programu

@cholok, post #29

Myślę, że biorąc pod uwagę fakt, że będzie on dedykowany Amigom z maks. 4MB pamięci w ogóle, chyba nie powinno to być problemem. Ile to "dużo"?
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem