Przejdź do treści

BinaryMachines

Ten pakiet pozwala tworzyć i zapisywać własne pliki w dowolnym miejscu w systemie plików.

Zależności

Brak

Inicjalizacja

Brak

Implementacja

BinaryMachines.d na GitHub

BinaryWriter

BW_NewFile

Tworzy plik o nazwie file i otwiera strumień. Nie działa, jeśli strumień jest już otwarty.

func int BW_NewFile(var string file)
Parametry
  • var string file
    Nazwa tworzonego pliku

Zwracana wartość

Funkcja zwraca TRUE jeśli plik został pomyślnie utworzony i zainicjalizowany, w przeciwnym razie zwracane jest FALSE.

BW_Close

Zamyka aktualny strumień zapisu.

func void BW_Close()

BW

Zapisuje length bajtów z data do strumienia, maksymalnie 4 bajty.

func void BW(var int data, var int length)
Parametry
  • var int data
    Wartość bajtów
  • var int length
    Liczba bajtów

BW_Int

Zapisuje 4 bajty z data do strumienia. To samo co BW(data, 4).

func void BW_Int(var int data)
Parametry
  • var int data
    Wartość całkowita do zapisania

BW_Char

Zapisuje pierwszy znak z data do strumienia. To samo co BW(Str_GetCharAt(data, 0), 1).

func void BW_Char(var string data)
Parametry
  • var string data
    Znak do zapisania

BW_String

Zapisuje data zakończone znakiem \0 do strumienia.

func void BW_String(var string data)
Parametry
  • var string data
    Ciąg znaków do zapisania

BW_Byte

Zapisuje bajt z data do strumienia. To samo co BW(data, 1).

func void BW_Byte(var int data)
Parametry
  • var int data
    Wartość bajtowa do zapisania

BW_Bytes

Zapisuje length bajtów ze wskaźnika dataPtr do strumienia.

func void BW_Bytes(var int dataPtr, var int length)
Parametry
  • var int dataPtr
    Wskaźnik danych do zapisania
  • var int length
    Liczba bajtów

BW_Text

Zapisuje ciąg znaków do strumienia bez jego zakończenia. Nie można go już odczytać.

func void BW_Text(var string data)
Parametry
  • var string data
    Tekst do zapisania

BW_NextLine

Zapisuje akapit do strumienia.

func void BW_NextLine()

BinaryReader

BR_OpenFile

Otwiera plik o nazwie file i otwiera strumień. Nie działa, jeśli strumień jest już otwarty.

func int BR_OpenFile(var string file)
Parametry
  • var string file
    Plik, który ma być otwarty

Zwracana wartość

Funkcja zwraca TRUE jeśli plik został pomyślnie otworzony i zainicjalizowany, w przeciwnym razie zwracane jest FALSE.

BR_Close

Zamyka aktualny strumień odczytu.

func void BR_Close()

BR

Odczytuje bajty ze strumienia.

func int BR(var int length)
Parametry
  • var int length
    Liczba bajtów do odczytania (maksymalnie 4)

Zwracana wartość

Funkcja zwraca odczytaną wartość bajtów.

BR_Int

Odczytuje 4 bajty ze strumienia. To samo co BR(4).

func int BR_Int()
Zwracana wartość

Funkcja zwraca odczytaną liczbę całkowitą.

BR_Char

Odczytuje znak ze strumienia. To samo co BR(1).

func string BR_Char()
Zwracana wartość

Funkcja zwraca odczytany znak jako string.

BR_String

Odczytuje ciąg znaków zakończony znakiem \0 ze strumienia.

func string BR_String()
Zwracana wartość

Funkcja zwraca odczytany ciąg znaków.

BR_Byte

Odczytuje bajt ze strumienia.

func int BR_Byte()
Zwracana wartość

Funkcja zwraca odczytany bajt.

BR_Bytes

Odczytuje bajty ze strumienia.

func int BR_Bytes(var int length)
Parametry
  • var int length
    Liczba bajtów do odczytania

Zwracana wartość

Funkcja zwraca wskaźnik do odczytanych bajtów.

BR_TextLine

Odczytuje linię ze strumienia.

func string BR_TextLine()
Zwracana wartość

Funkcja zwraca odczytaną linię.

BR_Text

Odczytuje ciąg znaków o podanej długości ze strumienia.

func string BR_Text(var int length)
Parametry
  • var int length
    Liczba znaków do odczytania

Zwracana wartość

Funkcja zwraca odczytany ciąg znaków.

BR_NextLine

Zmienia pozycję odczytu na następny akapit, utworzony za pomocą BW_NextLine.

func void BR_NextLine()

Wywołania funkcji silnika

WIN_GetLastError

Wywołanie funkcji GetLastError z Win32 API.

func int WIN_GetLastError()
Zwracana wartość

Funkcja zwraca kod ostatniego błędu wątku wywołującego.

WIN_CreateFile

Wywołanie funkcji CreateFileA z Win32 API.

func int WIN_CreateFile(var string lpFileName,var int dwDesiredAccess,var int dwShareMode,var int lpSecurityAttributes,var int dwCreationDisposition,var int dwFlagsAndAttributes,var int hTemplateFile)
Parametry

Pełny opis parametrów można znaleźć tutaj

Zwracana wartość

Informacje o zwracanej wartości znajdziesz tutaj

WIN_WriteFile

Wywołanie funkcji WriteFile z Win32 API.

func void WIN_WriteFile(var int hFile,var int lpBuffer,var int nNumberOfBytesToWrite,var int lpNumberOfBytesWritten,var int lpOverlapped)
Parametry

Pełny opis parametrów można znaleźć tutaj

WIN_ReadFile

Wywołanie funkcji ReadFile z Win32 API.

func void WIN_ReadFile(var int hFile,var int lpBuffer,var int nNumberOfBytesToRead,var int lpNumberOfBytesRead,var int lpOverlapped)
Parametry

Pełny opis parametrów można znaleźć tutaj

WIN_CloseHandle

Wywołanie funkcji CloseHandle z Win32 API.

func void WIN_CloseHandle(var int hObject)
Parametry

Pełny opis parametrów można znaleźć tutaj

WIN_GetFileSize

Wywołanie funkcji GetFileSize z Win32 API.

func int WIN_GetFileSize(var int hFile,var int lpFileSizeHigh)
Parametry

Pełny opis parametrów można znaleźć tutaj

Zwracana wartość

Informacje o zwracanej wartości znajdziesz tutaj

Constants

Dodatkowo istnieją pewne stałe zdefiniowane do użycia z określonymi wywołaniami funkcji silnika.

1
2
3
4
5
6
7
8
const int CREATE_ALWAYS = 2;
const int OPEN_EXISTING = 3;
const int GENERIC_ALL = 1073741824;
const int GENERIC_READ = -2147483648;
const int FILE_SHARE_READ = 1;
const int FILE_SHARE_WRITE = 2;
const int FILE_SHARE_DELETE = 4;
const int FILE_ATTRIBUTE_NORMAL = 128;

Przykłady

Zapisywanie i wczytywanie zmiennych

const string filename = "System\MySave.sav";

var string s0; // ciąg znaków
var int    i1; // liczba całkowita
var int    b2; // bajt
var string c3; // znak

func void SaveMyData()


{
    if(BW_NewFile(filename))  // Utwórz nowy plik:
    { 
        BW_String(s0);
        BW_Int(i1);
        BW_Byte(b2);
        BW_Char(c3);          // Zapisz dane...
        BW_Close();           // ...i zamknij.
    };
};

func void LoadMyData() {
    if(BR_OpenFile(filename)) // Spróbuj otworzyć plik:
    { 
        s0 = BR_String();
        i1 = BR_Int();
        b2 = BR_Byte();
        c3 = BR_Char();       // Odczytaj wartości...
        BR_Close();           // ...i zamknij.
    }
    else 
    {
        SaveMyData();         // W przeciwnym razie utwórz plik z zapisem.
    };
};

Gratulacje dla gracza

func void Certificate(var string Username, var int Score) 
{
    var string filename; filename = ConcatStrings(Username, "'s Certificate.txt");
    BW_NewFile(filename); // Nazwa użytkownika + "s Certificate.txt". Plik jest w katalogu Gothic.
    BW_Text("Gratulacje "); BW_Text(Username);
    BW_TextLine("!");

    BW_Text("Zdobyłeś ");
    BW_Text(IntToString(Score)); // Nie BW_Int!
    BW_TextLine(" punktów w tej grze.");

    BW_NextLine();

    BW_Text("Z wyrazami szacunku, Autor");
    BW_Close();

    /*
       Przy wywołaniu:  Certificate("Player", 1000);
       zostanie utworzony plik o nazwie 'Player's Certificate.txt', który zawierać będzie:

        Gratulacje NazwaGracza!
        Zdobyłeś 1000 punktów w tej grze.

        Z wyrazami szacunku, Autor
    */
};

Położenie postaci NPC

func void BW_NpcPosition(var C_NPC slf) 
{
    var int ptr; ptr = MEM_Alloc(60);                // 16 * 4
    MEM_CopyBytes(MEM_InstToPtr(slf) + 60, ptr, 60); // Skopiuj slf.trafoObjToWorld
    BW_Bytes(ptr, 60);                               // Zapisz skopiowane 60 bajtów
    MEM_Free(ptr);                                   // I posprzątaj...
};

func void BR_NpcPosition(var C_NPC slf) 
{
    var int ptr; ptr = BR_Bytes(60);                 // Odczytaj 60 bajtów
    MEM_CopyBytes(ptr, MEM_InstToPtr(slf) + 60, 60); // Wklej z powrotem do slf
    MEM_Free(ptr);                                   // I posprzątaj ponownie...
};

/*
   Użycie standardowe:
     BW_NewFile(file);
     BW_NpcPosition(hero);
     BW_Close();
*/

Uwaga

Przykłady zostały pierwotnie napisane przez Gottfrieda i opublikowane na forum World of Gothic.

`