Subversion Repositories SvarDOS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1674 → Rev 1675

/install/tags/20240130/cdrom.c
0,0 → 1,30
/*
* CD-ROM detection routines
* Copyright (C) 2016 Mateusz Viste
*/
 
#include <dos.h>
#include "cdrom.h" /* include self for control */
 
/* returns 1 if drive drv is a valid CDROM, zero if not, negative if no MSCDEX (0=A:, etc) */
int cdrom_drivecheck(int drv) {
union REGS r;
r.x.ax = 0x150B;
r.x.cx = drv;
int86(0x2F, &r, &r);
if (r.x.bx != 0xADAD) return(-1); /* look for the MSCDEX signature */
if (r.x.ax == 0) return(0);
return(1);
}
 
/* returns the identifier of the first CDROM drive (0=A:, etc), or a negative value on error */
int cdrom_findfirst(void) {
int i;
for (i = 2; i < 26; i++) { /* check drives from C to Z */
int cdres = cdrom_drivecheck(i);
if (cdres == 0) continue;
if (cdres == 1) return(i);
break;
}
return(-1);
}
/install/tags/20240130/cdrom.h
0,0 → 1,15
/*
* CD-ROM detection routines
* Copyright (C) 2016 Mateusz Viste
*/
 
#ifndef CDROM_H_SENTINEL
#define CDROM_H_SENTINEL
 
/* returns 1 if drive drv is a valid CDROM, zero if not, negative if no MSCDEX (0=A:, etc) */
int cdrom_drivecheck(int drv);
 
/* returns the identifier of the first CDROM drive (0=A:, etc), or a negative value on error */
int cdrom_findfirst(void);
 
#endif
/install/tags/20240130/install.c
0,0 → 1,1061
/*
* SVARDOS INSTALL PROGRAM
*
* PUBLISHED UNDER THE TERMS OF THE MIT LICENSE
*
* COPYRIGHT (C) 2016-2024 MATEUSZ VISTE, ALL RIGHTS RESERVED.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* http://svardos.org
*/
 
#include <dos.h>
#include <direct.h> /* mkdir() */
#include <stdio.h> /* printf() and friends */
#include <stdlib.h> /* system() */
#include <string.h> /* memcpy() */
#include <unistd.h>
 
#include "mdr\cout.h"
#include "mdr\dos.h"
#include "svarlang.lib\svarlang.h"
 
/* keyboard layouts and locales */
#include "keylay.h"
#include "keyoff.h"
 
/* prototype of the int24hdl() function defined in int24hdl.asm */
void int24hdl(void);
 
 
/* color scheme (preset for color) */
static unsigned char COLOR_TITLEBAR = 0x70;
static unsigned char COLOR_TITLEVER = 0x78;
static unsigned char COLOR_BODY = 0x17;
static unsigned char COLOR_BODYWARN = 0x1F;
static unsigned char COLOR_SELECT = 0x70;
static unsigned char COLOR_SELECTCUR = 0x1F;
 
/* build release string, populated at startup by reading floppy's label */
static char BUILDSTRING[13];
 
/* how much disk space does SvarDOS require (in MiB) */
#define SVARDOS_DISK_REQ 8
 
/* menu screens can output only one of these: */
#define MENUNEXT 0
#define MENUPREV -1
#define MENUQUIT -2
 
/* a convenience 'function' used for debugging */
#define DBG(x) { video_putstringfix(24, 0, 0x4F00u, x, 80); }
 
struct slocales {
char lang[4];
const char *keybcode;
unsigned int codepage;
int egafile;
int keybfile;
int keyboff;
int keyblen;
unsigned int keybid;
};
 
 
/* put a string on screen and fill it until w chars with whilte space */
static void video_putstringfix(unsigned char y, unsigned char x, unsigned char attr, const char *s, unsigned char w) {
unsigned char i;
 
/* print the string up to w characters */
i = mdr_cout_str(y, x, s, attr, w);
 
/* fill in left space (if any) with blanks */
mdr_cout_char_rep(y, x + i, ' ', attr, w - i);
}
 
 
/* reboot the computer */
static void reboot(void) {
void ((far *bootroutine)()) = (void (far *)()) 0xFFFF0000L;
int far *rstaddr = (int far *)0x00400072L; /* BIOS boot flag is at 0040:0072 */
*rstaddr = 0x1234; /* 0x1234 = warm boot, 0 = cold boot */
(*bootroutine)(); /* jump to the BIOS reboot routine at FFFF:0000 */
}
 
 
/* returns 1 if file exists, zero otherwise */
static int fileexists(const char *fname) {
FILE *fd;
fd = fopen(fname, "rb");
if (fd == NULL) return(0);
fclose(fd);
return(1);
}
 
 
/* outputs a string to screen with taking care of word wrapping. returns amount of lines. */
static unsigned char putstringwrap(unsigned char y, unsigned char x, unsigned char attr, const char *s) {
unsigned char linew, lincount;
linew = 80 - (x << 1);
 
for (lincount = 1; y+lincount < 25; lincount++) {
int i, len = linew;
for (i = 0; i <= linew; i++) {
if (s[i] == ' ') len = i;
if (s[i] == '\n') {
len = i;
break;
}
if (s[i] == 0) {
len = i;
break;
}
}
mdr_cout_str(y++, x, s, attr, len);
s += len;
if (*s == 0) break;
s += 1; /* skip the whitespace char */
}
return(lincount);
}
 
 
/* an NLS wrapper around video_putstring(), also performs line wrapping when
* needed. returns the amount of lines that were output */
static unsigned char putstringnls(unsigned char y, unsigned char x, unsigned char attr, unsigned char nlsmaj, unsigned char nlsmin) {
const char *s = svarlang_str(nlsmaj, nlsmin);
if (s == NULL) s = "";
return(putstringwrap(y, x, attr, s));
}
 
 
/* copy file f1 to f2 using buff as a buffer of buffsz bytes. f2 will be overwritten if it
* exists already! returns 0 on success. */
static int fcopy(const char *f2, const char *f1, void *buff, size_t buffsz) {
FILE *fd1, *fd2;
size_t sz;
int res = -1; /* assume failure */
 
/* open files */
fd1 = fopen(f1, "rb");
fd2 = fopen(f2, "wb");
if ((fd1 == NULL) || (fd2 == NULL)) goto QUIT;
 
/* copy data */
for (;;) {
sz = fread(buff, 1, buffsz, fd1);
if (sz == 0) {
if (feof(fd1) != 0) break;
goto QUIT;
}
if (fwrite(buff, 1, sz, fd2) != sz) goto QUIT;
}
 
res = 0; /* success */
 
QUIT:
if (fd1 != NULL) fclose(fd1);
if (fd2 != NULL) fclose(fd2);
return(res);
}
 
 
/* display a menu with items and return user's choice.
* ypos: starting line where the menu is drawn
* height: number of items to display inside the menu
* list: NULL-terminated list of items
* maxlistlen: limit list to this many items tops */
static int menuselect(unsigned char ypos, unsigned char height, const char **list, int maxlistlen) {
int i, offset = 0, res = 0, count;
unsigned char y, xpos, width = 0;
 
/* count how many positions there are, and check their width */
for (count = 0; (list[count] != NULL) && (count != maxlistlen); count++) {
int len = strlen(list[count]);
if (len > width) width = len;
}
width++; /* it's nice to have a small margin to the right of the widest item */
 
/* if xpos negative, means 'center out' */
xpos = 39 - (width >> 1);
 
mdr_cout_char_rep(ypos, xpos, 0xC4, COLOR_SELECT, width + 2); /* top line */
mdr_cout_char(ypos, xpos+width+2, 0xBF, COLOR_SELECT); /* \ */
mdr_cout_char(ypos, xpos-1, 0xDA, COLOR_SELECT); /* / */
ypos++; /* from now on ypos relates to the position of the content */
mdr_cout_char(ypos+height, xpos-1, 0xC0, COLOR_SELECT); /* \ */
mdr_cout_char(ypos+height, xpos+width+2, 0xD9, COLOR_SELECT);/* / */
mdr_cout_char_rep(ypos+height, xpos, 0xC4, COLOR_SELECT, width + 2);
 
for (;;) {
int key;
 
/* draw side borders of the menu + the cursor */
if (count <= height) { /* no need for a cursor, all fits on one page */
i = 255;
} else {
i = offset * (height - 1) / (count - height);
}
 
for (y = ypos; y < (ypos + height); y++) {
mdr_cout_char(y, xpos-1, 0xB3, COLOR_SELECT); /* left side */
if (y - ypos == i) {
mdr_cout_char(y, xpos+width+2, '=', COLOR_SELECT); /* cursor */
} else {
mdr_cout_char(y, xpos+width+2, 0xB3, COLOR_SELECT); /* right side */
}
}
 
/* list of selectable items */
for (i = 0; i < height; i++) {
if (i + offset == res) {
mdr_cout_char(ypos + i, xpos, 16, COLOR_SELECTCUR);
mdr_cout_char(ypos + i, xpos+width+1, 17, COLOR_SELECTCUR);
mdr_cout_locate(ypos + i, xpos);
video_putstringfix(ypos + i, xpos+1, COLOR_SELECTCUR, list[i + offset], width);
} else if (i + offset < count) {
mdr_cout_char(ypos + i, xpos, ' ', COLOR_SELECT);
mdr_cout_char(ypos + i, xpos+width+1, ' ', COLOR_SELECT);
video_putstringfix(ypos + i, xpos+1, COLOR_SELECT, list[i + offset], width);
} else {
mdr_cout_char_rep(ypos + i, xpos, ' ', COLOR_SELECT, width+2);
}
}
key = mdr_dos_getkey();
if (key == 0x0D) { /* ENTER */
return(res);
} else if (key == 0x148) { /* up */
if (res > 0) {
res--;
if (res < offset) offset = res;
}
} else if (key == 0x150) { /* down */
if (res+1 < count) {
res++;
if (res > offset + height - 1) offset = res - (height - 1);
}
} else if (key == 0x147) { /* home */
res = 0;
offset = 0;
} else if (key == 0x14F) { /* end */
res = count - 1;
if (res > offset + height - 1) offset = res - (height - 1);
} else if (key == 0x1B) { /* ESC */
return(-1);
}/* else {
char buf[8];
snprintf(buf, sizeof(buf), "0x%02X ", key);
video_putstring(1, 0, COLOR_BODY, buf, -1);
}*/
}
}
 
static void newscreen(unsigned char statusbartype) {
const char *msg;
mdr_cout_cls(COLOR_BODY);
msg = svarlang_strid(0x00); /* "SVARDOS INSTALLATION" */
mdr_cout_char_rep(0, 0, ' ', COLOR_TITLEBAR, 80);
mdr_cout_str(0, 40 - (strlen(msg) >> 1), msg, COLOR_TITLEBAR, 80);
mdr_cout_str(0, 80 - strlen(BUILDSTRING), BUILDSTRING, COLOR_TITLEVER, 12);
 
switch (statusbartype) {
case 1:
msg = svarlang_strid(0x000B); /* "Up/Down = Select entry | Enter = Validate your choice | ESC = Quit to DOS" */
break;
case 2:
msg = svarlang_strid(0x0005); /* "Press any key..." */
break;
case 3:
msg = "";
break;
default:
msg = svarlang_strid(0x000A); /* "Up/Down = Select entry | Enter = Validate your choice | ESC = Previous screen" */
break;
}
mdr_cout_char(24, 0, ' ', COLOR_TITLEBAR);
video_putstringfix(24, 1, COLOR_TITLEBAR, msg, 79);
mdr_cout_locate(25,0);
}
 
/* fills a slocales struct accordingly to the value of its keyboff member */
static void kblay2slocal(struct slocales *locales) {
const char *m;
for (m = kblayouts[locales->keyboff]; *m != 0; m++); /* skip layout name */
m++;
/* skip keyb code and copy it to locales.keybcode */
locales->keybcode = m;
for (; *m != 0; m++);
/* */
locales->codepage = ((unsigned short)m[1] << 8) | m[2];
locales->egafile = m[3];
locales->keybfile = m[4];
locales->keybid = ((unsigned short)m[5] << 8) | m[6];
}
 
static int selectlang(struct slocales *locales) {
int choice, x;
const char *msg;
const char *langlist[] = {
"English",
"Brazilian",
"French",
"German",
"Italian",
"Polish",
"Russian",
"Slovene",
"Swedish",
"Turkish",
NULL
};
 
/* do not ask for language on non-multilang setups */
if (!fileexists("INSTALL.LNG")) {
choice = 0;
goto SkipLangSelect;
}
 
newscreen(1);
msg = svarlang_strid(0x0100); /* "Welcome to SvarDOS" */
x = 40 - (strlen(msg) >> 1);
mdr_cout_str(4, x, msg, COLOR_BODY, 80);
mdr_cout_char_rep(5, x, '=', COLOR_BODY, strlen(msg));
 
/* center out the string "Please select your language..." */
msg = svarlang_str(1, 1); /* "Please select your language from the list below:" */
if (strlen(msg) > 74) {
putstringwrap(8, 1, COLOR_BODY, msg);
} else {
mdr_cout_str(8, 40 - (strlen(msg) / 2), msg, COLOR_BODY, 80);
}
 
choice = menuselect(11, 9, langlist, -1);
if (choice < 0) return(MENUPREV);
 
SkipLangSelect:
 
/* populate locales with default values */
memset(locales, 0, sizeof(struct slocales));
switch (choice) {
case 1:
strcpy(locales->lang, "BR");
locales->keyboff = OFFLOC_BR;
locales->keyblen = OFFLEN_BR;
break;
case 2:
strcpy(locales->lang, "FR");
locales->keyboff = OFFLOC_FR;
locales->keyblen = OFFLEN_FR;
break;
case 3:
strcpy(locales->lang, "DE");
locales->keyboff = OFFLOC_DE;
locales->keyblen = OFFLEN_DE;
break;
case 4:
strcpy(locales->lang, "IT");
locales->keyboff = OFFLOC_IT;
locales->keyblen = OFFLEN_IT;
break;
case 5:
strcpy(locales->lang, "PL");
locales->keyboff = OFFLOC_PL;
locales->keyblen = OFFLEN_PL;
break;
case 6:
strcpy(locales->lang, "RU");
locales->keyboff = OFFLOC_RU;
locales->keyblen = OFFLEN_RU;
break;
case 7:
strcpy(locales->lang, "SI");
locales->keyboff = OFFLOC_SI;
locales->keyblen = OFFLEN_SI;
break;
case 8:
strcpy(locales->lang, "SV");
locales->keyboff = OFFLOC_SV;
locales->keyblen = OFFLEN_SV;
break;
case 9:
strcpy(locales->lang, "TR");
locales->keyboff = OFFLOC_TR;
locales->keyblen = OFFLEN_TR;
break;
default:
strcpy(locales->lang, "EN");
locales->keyboff = 0;
locales->keyblen = OFFCOUNT;
break;
}
/* populate the slocales struct accordingly to the keyboff member */
kblay2slocal(locales);
/* */
return(MENUNEXT);
}
 
 
static int selectkeyb(struct slocales *locales) {
int menuheight, choice;
if (locales->keyblen == 1) return(MENUNEXT); /* do not ask for keyboard layout if only one is available for given language */
newscreen(0);
putstringnls(5, 1, COLOR_BODY, 1, 5); /* "SvarDOS supports different keyboard layouts */
menuheight = locales->keyblen;
if (menuheight > 11) menuheight = 11;
choice = menuselect(10, menuheight, &(kblayouts[locales->keyboff]), locales->keyblen);
if (choice < 0) return(MENUPREV);
/* (re)load the keyboard layout & codepage setup */
locales->keyboff += choice;
kblay2slocal(locales);
return(MENUNEXT);
}
 
 
/* returns 0 if installation must proceed, non-zero otherwise */
static int welcomescreen(void) {
int c;
const char *choice[3];
choice[0] = svarlang_strid(0x0001);
choice[1] = svarlang_strid(0x0002);
choice[2] = NULL;
newscreen(0);
putstringnls(4, 1, COLOR_BODY, 2, 0); /* "You are about to install SvarDOS */
c = menuselect(13, 2, choice, -1);
if (c < 0) return(MENUPREV);
if (c == 0) return(MENUNEXT);
return(MENUQUIT);
}
 
 
/* returns 1 if drive is removable, 0 if not, -1 on error */
static int isdriveremovable(int drv) {
union REGS r;
r.x.ax = 0x4408;
r.h.bl = drv;
int86(0x21, &r, &r);
/* CF set on error, AX set to 0 if removable, 1 if fixed */
if (r.x.cflag != 0) return(-1);
if (r.x.ax == 0) return(1);
return(0);
}
 
 
/* returns total disk space of drive drv (in MiB, max 2048), or -1 if drive invalid */
static int disksize(int drv) {
long res;
union REGS r;
r.h.ah = 0x36; /* DOS 2+ get free disk space */
r.h.dl = drv; /* A=1, B=2, etc */
int86(0x21, &r, &r);
if (r.x.ax == 0xffffu) return(-1); /* AX set to FFFFh if drive invalid */
res = r.x.ax; /* sectors per cluster */
res *= r.x.dx; /* dx contains total clusters, bx contains free clusters */
res *= r.x.cx; /* bytes per sector */
res >>= 20; /* convert bytes to MiB */
return(res);
}
 
 
/* returns 0 if disk is empty, non-zero otherwise */
static int diskempty(int drv) {
unsigned int rc;
int res;
char buff[8];
struct find_t fileinfo;
snprintf(buff, sizeof(buff), "%c:\\*.*", 'A' + drv - 1);
rc = _dos_findfirst(buff, _A_NORMAL | _A_SUBDIR | _A_HIDDEN | _A_SYSTEM, &fileinfo);
if (rc == 0) {
res = 1; /* call successfull means disk is not empty */
} else {
res = 0;
}
/* _dos_findclose(&fileinfo); */ /* apparently required only on OS/2 */
return(res);
}
 
#ifdef DEADCODE
/* set new DOS "current drive" to drv ('A', 'B', etc). returns 0 on success */
static int set_cur_drive(char drv) {
union REGS r;
if ((drv < 'A') || (drv > 'Z')) return(-1);
r.h.ah = 0x0E; /* DOS 1+ SELECT DEFAULT DRIVE */
r.h.dl = drv - 'A';
int86(0x21, &r, &r);
if (r.h.al < drv - 'A') return(-1);
return(0);
}
#endif
 
 
/* get the DOS "current drive" (0=A:, 1=B:, etc) */
static int get_cur_drive(void) {
union REGS r;
r.h.ah = 0x19; /* DOS 1+ GET CURRENT DEFAULT DRIVE */
int86(0x21, &r, &r);
return(r.h.al);
}
 
 
/* tries to write an empty file to drive.
* asks DOS to inhibit the int 24h handler for this job, so erros are
* gracefully reported - unfortunately this does not work under FreeDOS because
* the DOS-C kernel does not implement the required flag.
* returns 0 on success (ie. "disk exists and is writeable"). */
static unsigned short test_drive_write(char drive, char *buff) {
unsigned short result = 0;
sprintf(buff, "%c:\\SVWRTEST.123", drive);
_asm {
push ax
push bx
push cx
push dx
 
mov ah, 0x6c /* extended open/create file */
mov bx, 0x2001 /* open for write + inhibit int 24h handler */
xor cx, cx /* file attributes on the created file */
mov dx, 0x0010 /* create file if does not exist, fail if it exists */
mov si, buff /* filename to create */
int 0x21
jc FAILURE
/* close the file (handle in AX) */
mov bx, ax
mov ah, 0x3e /* close file */
int 0x21
jc FAILURE
/* delete the file */
mov ah, 0x41 /* delete file pointed out by DS:DX */
mov dx, buff
int 0x21
jnc DONE
 
FAILURE:
mov result, ax
DONE:
 
pop dx
pop cx
pop bx
pop ax
}
return(result);
}
 
 
static int preparedrive(char sourcedrv) {
int driveremovable;
int selecteddrive = 3; /* default to 'C:' */
int cselecteddrive;
int ds;
int choice;
char buff[1024];
int driveid = 1; /* fdisk runs on first drive (unless USB boot) */
if (selecteddrive == get_cur_drive() + 1) { /* get_cur_drive() returns 0-based values (A=0) while selecteddrive is 1-based (A=1) */
selecteddrive = 4; /* use D: if install is run from C: (typically because it was booted from USB?) */
driveid = 2; /* primary drive is the emulated USB storage */
}
cselecteddrive = 'A' + selecteddrive - 1;
for (;;) {
driveremovable = isdriveremovable(selecteddrive);
if (driveremovable < 0) {
const char *list[4];
newscreen(0);
list[0] = svarlang_str(0, 3); /* Create a partition automatically */
list[1] = svarlang_str(0, 4); /* Run the FDISK tool */
list[2] = svarlang_str(0, 2); /* Quit to DOS */
list[3] = NULL;
snprintf(buff, sizeof(buff), svarlang_strid(0x0300), cselecteddrive, SVARDOS_DISK_REQ); /* "ERROR: Drive %c: could not be found. Note, that SvarDOS requires at least %d MiB of available disk space */
switch (menuselect(6 + putstringwrap(4, 1, COLOR_BODY, buff), 3, list, -1)) {
case 0:
sprintf(buff, "FDISK /PRI:MAX %d", driveid);
system(buff);
break;
case 1:
mdr_cout_cls(0x07);
mdr_cout_locate(0, 0);
sprintf(buff, "FDISK %d", driveid);
system(buff);
break;
case 2:
return(MENUQUIT);
default:
return(-1);
}
/* write a temporary MBR which only skips the drive (in case BIOS would
* try to boot off the not-yet-ready C: disk) */
sprintf(buff, "FDISK /LOADIPL %d", driveid);
system(buff); /* writes BOOT.MBR into actual MBR */
newscreen(2);
putstringnls(10, 10, COLOR_BODY, 3, 1); /* "Your computer will reboot now." */
putstringnls(12, 10, COLOR_BODY, 0, 5); /* "Press any key..." */
mdr_dos_getkey();
reboot();
return(MENUQUIT);
} else if (driveremovable > 0) {
newscreen(2);
snprintf(buff, sizeof(buff), svarlang_strid(0x0302), cselecteddrive); /* "ERROR: Drive %c: is a removable device */
mdr_cout_str(9, 1, buff, COLOR_BODY, 80);
putstringnls(11, 2, COLOR_BODY, 0, 5); /* "Press any key..." */
return(MENUQUIT);
}
/* if not formatted, propose to format it right away (try to create a directory) */
if (test_drive_write(cselecteddrive, buff) != 0) {
const char *list[3];
newscreen(0);
snprintf(buff, sizeof(buff), svarlang_str(3, 3), cselecteddrive); /* "ERROR: Drive %c: seems to be unformated. Do you wish to format it?") */
mdr_cout_str(7, 1, buff, COLOR_BODY, 80);
 
snprintf(buff, sizeof(buff), svarlang_strid(0x0007), cselecteddrive); /* "Format drive %c:" */
list[0] = buff;
list[1] = svarlang_strid(0x0002); /* "Quit to DOS" */
list[2] = NULL;
 
choice = menuselect(12, 2, list, -1);
if (choice < 0) return(MENUPREV);
if (choice == 1) return(MENUQUIT);
mdr_cout_cls(0x07);
mdr_cout_locate(0, 0);
snprintf(buff, sizeof(buff), "FORMAT %c: /Q /U /Z:seriously /V:SVARDOS", cselecteddrive);
system(buff);
continue;
}
/* check total disk space */
ds = disksize(selecteddrive);
if (ds < SVARDOS_DISK_REQ) {
int y = 9;
newscreen(2);
snprintf(buff, sizeof(buff), svarlang_strid(0x0304), cselecteddrive, SVARDOS_DISK_REQ); /* "ERROR: Drive %c: is not big enough! SvarDOS requires a disk of at least %d MiB." */
y += putstringwrap(y, 1, COLOR_BODY, buff);
putstringnls(++y, 1, COLOR_BODY, 0, 5); /* "Press any key..." */
mdr_dos_getkey();
return(MENUQUIT);
}
/* is the disk empty? */
newscreen(0);
if (diskempty(selecteddrive) != 0) {
const char *list[3];
int y = 6;
snprintf(buff, sizeof(buff), svarlang_strid(0x0305), cselecteddrive); /* "ERROR: Drive %c: not empty" */
y += putstringwrap(y, 1, COLOR_BODY, buff);
 
snprintf(buff, sizeof(buff), svarlang_strid(0x0007), cselecteddrive); /* "Format drive %c:" */
list[0] = buff;
list[1] = svarlang_strid(0x0002); /* "Quit to DOS" */
list[2] = NULL;
 
choice = menuselect(++y, 2, list, -1);
if (choice < 0) return(MENUPREV);
if (choice == 1) return(MENUQUIT);
mdr_cout_cls(0x07);
mdr_cout_locate(0, 0);
snprintf(buff, sizeof(buff), "FORMAT %c: /Q /U /Z:seriously /V:SVARDOS", cselecteddrive);
system(buff);
continue;
} else {
/* final confirmation */
const char *list[3];
list[0] = svarlang_strid(0x0001); /* Install SvarDOS */
list[1] = svarlang_strid(0x0002); /* Quit to DOS */
list[2] = NULL;
snprintf(buff, sizeof(buff), svarlang_strid(0x0306), cselecteddrive); /* "The installation of SvarDOS to %c: is about to begin." */
mdr_cout_str(7, 40 - (strlen(buff) / 2), buff, COLOR_BODY, 80);
choice = menuselect(10, 2, list, -1);
if (choice < 0) return(MENUPREV);
if (choice == 1) return(MENUQUIT);
snprintf(buff, sizeof(buff), "SYS %c: %c: > NUL", sourcedrv, cselecteddrive);
system(buff);
sprintf(buff, "FDISK /MBR %d", driveid);
system(buff);
snprintf(buff, sizeof(buff), "%c:\\TEMP", cselecteddrive);
mkdir(buff);
return(cselecteddrive);
}
}
}
 
 
/* generates locales-related configurations and writes them to file (this
* is used to compute autoexec.bat content) */
static void genlocalesconf(FILE *fd, const struct slocales *locales) {
if (locales == NULL) return;
 
fprintf(fd, "SET LANG=%s\r\n", locales->lang);
 
if (locales->egafile > 0) {
fprintf(fd, "DISPLAY CON=(EGA,,1)\r\n");
if (locales->egafile == 1) {
fprintf(fd, "MODE CON CP PREPARE=((%u) %%DOSDIR%%\\CPI\\EGA.CPX)\r\n", locales->codepage);
} else {
fprintf(fd, "MODE CON CP PREPARE=((%u) %%DOSDIR%%\\CPI\\EGA%d.CPX)\r\n", locales->codepage, locales->egafile);
}
fprintf(fd, "MODE CON CP SELECT=%u\r\n", locales->codepage);
}
 
if (locales->keybfile > 0) {
fprintf(fd, "KEYB %s,%d,%%DOSDIR%%\\", locales->keybcode, locales->codepage);
if (locales->keybfile == 1) {
fprintf(fd, "KEYBOARD.SYS");
} else {
fprintf(fd, "KEYBRD%d.SYS", locales->keybfile);
}
if (locales->keybid != 0) fprintf(fd, " /ID:%d", locales->keybid);
fprintf(fd, "\r\n");
}
}
 
 
static void bootfilesgen(char targetdrv, const struct slocales *locales) {
char buff[128];
FILE *fd;
/*** CONFIG.SYS ***/
snprintf(buff, sizeof(buff), "%c:\\TEMP\\CONFIG.SYS", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return;
fprintf(fd, "LASTDRIVE=Z\r\n"
"FILES=40\r\n");
fprintf(fd, "DEVICE=C:\\SVARDOS\\HIMEMX.EXE\r\n");
fprintf(fd, "DOS=UMB,HIGH\r\n");
fprintf(fd, "SHELL=C:\\COMMAND.COM /E:512 /P\r\n");
fprintf(fd, "REM COUNTRY=001,%u,C:\\SVARDOS\\CFG\\COUNTRY.SYS\r\n", locales->codepage);
fprintf(fd, "REM DEVICE=C:\\DRIVERS\\UDVD2\\UDVD2.SYS /D:SVCD0001 /H\r\n");
fclose(fd);
/*** AUTOEXEC.BAT ***/
snprintf(buff, sizeof(buff), "%c:\\TEMP\\AUTOEXEC.BAT", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return;
fprintf(fd, "@ECHO OFF\r\n");
fprintf(fd, "SET TEMP=C:\\TEMP\r\n");
fprintf(fd, "SET DOSDIR=C:\\SVARDOS\r\n");
fprintf(fd, "SET NLSPATH=%%DOSDIR%%\\NLS;.\r\n");
fprintf(fd, "SET DIRCMD=/OGNE/P/4\r\n");
fprintf(fd, "SET WATTCP.CFG=%%DOSDIR%%\\CFG\r\n");
fprintf(fd, "PATH %%DOSDIR%%\r\n");
fprintf(fd, "PROMPT $P$G\r\n");
fprintf(fd, "FDAPM APMDOS\r\n");
fprintf(fd, "\r\n");
genlocalesconf(fd, locales);
fprintf(fd, "\r\n");
fprintf(fd, "REM Uncomment the line below for CDROM support\r\n");
fprintf(fd, "REM SHSUCDX /d:SVCD0001\r\n");
fprintf(fd, "\r\n");
fprintf(fd, "ECHO.\r\n");
fprintf(fd, "ECHO %s\r\n", svarlang_strid(0x0600)); /* "Welcome to SvarDOS!" */
fclose(fd);
/*** CREATE DIRECTORY FOR CONFIGURATION FILES ***/
snprintf(buff, sizeof(buff), "%c:\\SVARDOS", targetdrv);
mkdir(buff);
snprintf(buff, sizeof(buff), "%c:\\SVARDOS\\CFG", targetdrv);
mkdir(buff);
/*** PKG.CFG ***/
snprintf(buff, sizeof(buff), "%c:\\SVARDOS\\CFG\\PKG.CFG", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return;
fprintf(fd, "# pkg config file - specifies locations where packages should be installed\r\n"
"\r\n"
"# DOS core binaries\r\n"
"DIR BIN C:\\SVARDOS\r\n"
"\r\n"
"# Programs\r\n"
"DIR PROGS C:\\\r\n"
"\r\n"
"# Games \r\n"
"DIR GAMES C:\\\r\n"
"\r\n"
"# Drivers\r\n"
"DIR DRIVERS C:\\DRIVERS\r\n"
"\r\n"
"# Development tools\r\n"
"DIR DEVEL C:\\DEVEL\r\n");
fclose(fd);
/*** COUNTRY.SYS ***/
/*** PICOTCP ***/
/*** WATTCP ***/
snprintf(buff, sizeof(buff), "%c:\\SVARDOS\\CFG\\WATTCP.CFG", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return;
fprintf(fd, "my_ip = dhcp\r\n"
"#my_ip = 192.168.0.7\r\n"
"#netmask = 255.255.255.0\r\n"
"#nameserver = 192.168.0.1\r\n"
"#nameserver = 192.168.0.2\r\n"
"#gateway = 192.168.0.1\r\n");
fclose(fd);
}
 
 
static int installpackages(char targetdrv, char srcdrv, const struct slocales *locales) {
char pkglist[512];
int i, pkglistlen;
size_t pkglistflen;
char buff[1024]; /* must be *at least* 1 sector big for efficient file copying */
FILE *fd = NULL;
char *pkgptr;
newscreen(3);
/* load pkg list */
fd = fopen("install.lst", "rb");
if (fd == NULL) {
mdr_cout_str(10, 30, "ERROR: INSTALL.LST NOT FOUND", COLOR_BODY, 80);
mdr_dos_getkey();
return(-1);
}
pkglistflen = fread(pkglist, 1, sizeof(pkglist) - 2, fd);
fclose(fd);
if (pkglistflen == sizeof(pkglist) - 2) {
mdr_cout_str(10, 30, "ERROR: INSTALL.LST TOO LARGE", COLOR_BODY, 80);
mdr_dos_getkey();
return(-1);
}
/* mark the end of list */
pkglist[pkglistflen] = 0;
pkglist[pkglistflen + 1] = 0xff;
/* replace all \r and \n chars by 0 bytes, and count the number of packages */
pkglistlen = 0;
for (i = 0; i < pkglistflen; i++) {
switch (pkglist[i]) {
case '\n':
pkglistlen++;
/* FALLTHRU */
case '\r':
pkglist[i] = 0;
break;
}
}
/* copy pkg.exe to the new drive, along with all packages */
snprintf(buff, sizeof(buff), "%c:\\TEMP\\pkg.exe", targetdrv);
snprintf(buff + 64, sizeof(buff) - 64, "%c:\\pkg.exe", srcdrv);
fcopy(buff, buff + 64, buff, sizeof(buff));
 
/* open the post-install autoexec.bat and prepare initial instructions */
snprintf(buff, sizeof(buff), "%c:\\temp\\postinst.bat", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return(-1);
fprintf(fd, "@ECHO OFF\r\nECHO INSTALLING SVARDOS BUILD %s\r\n", BUILDSTRING);
 
/* move COMMAND.COM so it does not clashes with the installation of the SVARCOM package */
fprintf(fd, "COPY \\COMMAND.COM \\CMD.COM\r\n");
fprintf(fd, "SET COMSPEC=%c:\\CMD.COM\r\n", targetdrv);
fprintf(fd, "DEL \\COMMAND.COM\r\n");
 
/* copy packages */
for (i = 0;; i++) {
RETRY_ENTIRE_LIST:
 
/* move forward to nearest entry or end of list */
for (pkgptr = pkglist; *pkgptr == 0; pkgptr++);
if (*pkgptr == 0xff) break; /* end of list: means all packages have been processed */
 
/* is this package present on the floppy disk? */
TRY_NEXTPKG:
sprintf(buff, "%s.svp", pkgptr);
if (!fileexists(buff)) {
while (*pkgptr != 0) pkgptr++;
while (*pkgptr == 0) pkgptr++;
/* end of list? ask for next floppy, there's nothing interesting left on this one */
if (*pkgptr == 0xff) {
putstringnls(12, 1, COLOR_BODY, 4, 1); /* "INSERT THE DISK THAT CONTAINS THE REQUIRED FILE AND PRESS ANY KEY" */
mdr_dos_getkey();
video_putstringfix(12, 1, COLOR_BODY, "", 80); /* erase the 'insert disk' message */
goto RETRY_ENTIRE_LIST;
}
goto TRY_NEXTPKG;
}
 
/* install the package */
snprintf(buff, sizeof(buff), svarlang_strid(0x0400), i+1, pkglistlen, pkgptr); /* "Installing package %d/%d: %s" */
strcat(buff, " ");
mdr_cout_str(10, 1, buff, COLOR_BODY, 40);
 
/* proceed with package copy */
sprintf(buff, "%c:\\temp\\%s.svp", targetdrv, pkgptr);
if (fcopy(buff, buff + 7, buff, sizeof(buff)) != 0) {
mdr_cout_str(10, 30, "READ ERROR", COLOR_BODY, 80);
mdr_dos_getkey();
fclose(fd);
return(-1);
}
/* write install instruction to post-install script */
fprintf(fd, "pkg install %s.svp\r\ndel %s.svp\r\n", pkgptr, pkgptr);
/* jump to next entry or end of list and zero out the pkg name in the process */
while ((*pkgptr != 0) && (*pkgptr != 0xff)) {
*pkgptr = 0;
pkgptr++;
}
}
/* set up locales so the "installation over" message is nicely displayed */
genlocalesconf(fd, locales);
/* replace autoexec.bat and config.sys now and write some nice message on screen */
fprintf(fd, "DEL pkg.exe\r\n"
"COPY CONFIG.SYS C:\\\r\n"
"DEL CONFIG.SYS\r\n"
"DEL C:\\AUTOEXEC.BAT\r\n"
"COPY AUTOEXEC.BAT C:\\\r\n"
"DEL AUTOEXEC.BAT\r\n"
"SET COMSPEC=C:\\COMMAND.COM\r\n"
"DEL \\CMD.COM\r\n");
/* print out the "installation over" message */
fprintf(fd, "ECHO.\r\n"
"ECHO ");
fprintf(fd, svarlang_strid(0x0502), BUILDSTRING); /* "SvarDOS installation is over. Please restart your computer now" */
fprintf(fd, "\r\n"
"ECHO.\r\n");
fclose(fd);
 
/* prepare a dummy autoexec.bat that will call temp\postinst.bat */
snprintf(buff, sizeof(buff), "%c:\\autoexec.bat", targetdrv);
fd = fopen(buff, "wb");
if (fd == NULL) return(-1);
fprintf(fd, "@ECHO OFF\r\n"
"SET DOSDIR=C:\\SVARDOS\r\n"
"SET NLSPATH=%%DOSDIR%%\\NLS\r\n"
"PATH %%DOSDIR%%\r\n");
fprintf(fd, "CD TEMP\r\n"
"postinst.bat\r\n");
fclose(fd);
 
return(0);
}
 
 
static void finalreboot(void) {
int y = 9;
newscreen(2);
y += putstringnls(y, 1, COLOR_BODY, 5, 0); /* "Your computer will reboot now." */
y += putstringnls(y, 1, COLOR_BODYWARN, 5, 1); /* Please remove the installation disk from your drive" */
putstringnls(++y, 1, COLOR_BODY, 0, 5); /* "Press any key..." */
mdr_dos_getkey();
reboot();
}
 
 
static void loadcp(const struct slocales *locales) {
char buff[64];
if (locales->codepage == 437) return;
mdr_cout_locate(1, 0);
if (locales->egafile == 1) {
snprintf(buff, sizeof(buff), "MODE CON CP PREP=((%u) EGA.CPX) > NUL", locales->codepage);
} else {
snprintf(buff, sizeof(buff), "MODE CON CP PREP=((%u) EGA%d.CPX) > NUL", locales->codepage, locales->egafile);
}
system(buff);
snprintf(buff, sizeof(buff), "MODE CON CP SEL=%u > NUL", locales->codepage);
system(buff);
/* below I re-init the video controller - apparently this is required if
* I want the new glyph symbols to be actually applied, at least some
* (broken?) BIOSes, like VBox, apply glyphs only at next video mode change */
{
union REGS r;
r.h.ah = 0x0F; /* get current video mode */
int86(0x10, &r, &r); /* r.h.al contains the current video mode now */
r.h.al |= 128; /* set the high bit of AL to instruct BIOS not to flush VRAM's content (EGA+) */
r.h.ah = 0; /* re-set video mode (to whatever is set in AL) */
int86(0x10, &r, &r);
}
}
 
 
#ifdef DEADCODE
/* checks that drive drv contains SvarDOS packages
* returns 0 if found, non-zero otherwise */
static int checkinstsrc(char drv) {
char fname[16];
snprintf(fname, sizeof(fname), "%c:\\ATTRIB.SVP", drv);
return(!fileexists(fname));
}
#endif
 
 
int main(void) {
struct slocales locales;
int targetdrv;
int sourcedrv;
int action;
 
/* setup the internal int 24h handler ("always fail") */
int24hdl();
 
/* read the svardos build revision (from floppy label) */
{
const char *fspec = "*.*";
const char *res = (void*)0x9E; /* default DTA is at PSP:80h, field 1Eh of DTA is the ASCIZ file name */
 
_asm {
push cx
push dx
 
mov ax, 0x4e00 /* findfirst */
mov cx, 0x08 /* file attr mask, 0x08 = volume label */
mov dx, fspec
int 0x21
jnc good
mov bx, res
mov [bx], byte ptr 0
good:
 
pop dx
pop cx
}
 
memcpy(BUILDSTRING, res, 12);
}
 
sourcedrv = get_cur_drive() + 'A';
 
/* init screen and detect mono adapters */
if (mdr_cout_init(NULL, NULL) == 0) {
/* overload color scheme with mono settings */
COLOR_TITLEBAR = 0x70;
COLOR_TITLEVER = 0x70;
COLOR_BODY = 0x07;
COLOR_BODYWARN = 0x07;
COLOR_SELECT = 0x70;
COLOR_SELECTCUR = 0x07;
}
 
SelectLang:
action = selectlang(&locales); /* welcome to svardos, select your language */
if (action != MENUNEXT) goto Quit;
loadcp(&locales);
svarlang_load("INSTALL.LNG", locales.lang); /* NLS support */
 
action = selectkeyb(&locales); /* what keyb layout should we use? */
if (action == MENUQUIT) goto Quit;
if (action == MENUPREV) {
if (!fileexists("INSTALL.LNG")) goto Quit;
goto SelectLang;
}
 
WelcomeScreen:
action = welcomescreen(); /* what svardos is, ask whether to run live dos or install */
if (action == MENUQUIT) goto Quit;
if (action == MENUPREV) goto SelectLang;
 
targetdrv = preparedrive(sourcedrv); /* what drive should we install from? check avail. space */
if (targetdrv == MENUQUIT) goto Quit;
if (targetdrv == MENUPREV) goto WelcomeScreen;
bootfilesgen(targetdrv, &locales); /* generate boot files and other configurations */
if (installpackages(targetdrv, sourcedrv, &locales) != 0) goto Quit; /* install packages */
/*localcfg();*/ /* show local params (currency, etc), and propose to change them (based on localcfg) */
/*netcfg();*/ /* basic networking config */
finalreboot(); /* remove the CD and reboot */
 
Quit:
mdr_cout_locate(0, 0);
mdr_cout_close();
return(0);
}
/install/tags/20240130/install.txt
0,0 → 1,32
 
SVARDOS INSTALLER
 
This is a simple installer for SvarDOS. It installs packages from the CD or
floppy (relying on pkginst), SYS the boot disk and pre-configures default boot
files (autoexec.bat and config.sys).
 
 
=== LICENSE ===
 
The SvarDOS INSTALL program is published under the terms of the MIT license.
 
Copyright (C) 2016-2024 Mateusz Viste
All rights reserved.
 
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
 
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
 
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
/install/tags/20240130/keylay.h
0,0 → 1,42
/* DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED BY LOCALES.EXE */
const char *kblayouts[] = {
/****** EN ******/
"English (US)\0en\0\1\265\0\0\0\0",
"English (UK)\0uk\0\1\265\0\1\0\0",
/****** HY ******/
"Armenian\0hy\0\3\203\6\3\0\0",
/****** BR ******/
"Brazilian\0br\0\3\122\1\1\0\0",
"Brazilian (US layout)\0br274\0\3\122\1\1\0\0",
/****** BG ******/
"Bulgarian\0bg\0\3\150\3\2\0\0",
/****** FR ******/
"French (France)\0fr\0\3\132\1\1\0\0",
"French (Canada, standard)\0cf\0\3\137\11\1\0\0",
"French (Canada, legacy)\0cf\0\3\137\11\1\1\365",
"French (Switzerland)\0sf\0\3\132\1\1\0\0",
/****** DE ******/
"German\0de\0\3\132\1\1\0\0",
/****** HU ******/
"Hungarian\0hu\0\3\124\1\1\0\320",
/****** IT ******/
"Italian\0it\0\3\132\1\1\0\0",
/****** LA ******/
"Latin-American\0la\0\1\265\0\1\0\0",
/****** NO ******/
"Norvegian\0no\0\3\132\11\1\0\0",
/****** PL ******/
"Polish (Programmer)\0pl\0\3\337\12\1\0\0",
"Polish (Typewriter)\0pl\0\3\337\12\1\0\326",
/****** RU ******/
"Russian (Standard)\0ru\0\3\142\3\2\0\0",
"Russian (Typewriter)\0ru\0\3\142\3\2\1\273",
/****** SI ******/
"Slovenian\0si\0\3\124\1\1\0\0",
/****** ES ******/
"Spanish\0es\0\3\132\1\1\0\0",
/****** SV ******/
"Swedish\0sv\0\3\132\1\1\0\0",
/****** TR ******/
"Turkish\0tr\0\3\131\1\2\0\0",
NULL};
/install/tags/20240130/keyoff.h
0,0 → 1,34
/* DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED BY LOCALES.EXE */
#define OFFLOC_EN 0
#define OFFLEN_EN 2
#define OFFLOC_HY 2
#define OFFLEN_HY 1
#define OFFLOC_BR 3
#define OFFLEN_BR 2
#define OFFLOC_BG 5
#define OFFLEN_BG 1
#define OFFLOC_FR 6
#define OFFLEN_FR 4
#define OFFLOC_DE 10
#define OFFLEN_DE 1
#define OFFLOC_HU 11
#define OFFLEN_HU 1
#define OFFLOC_IT 12
#define OFFLEN_IT 1
#define OFFLOC_LA 13
#define OFFLEN_LA 1
#define OFFLOC_NO 14
#define OFFLEN_NO 1
#define OFFLOC_PL 15
#define OFFLEN_PL 2
#define OFFLOC_RU 17
#define OFFLEN_RU 2
#define OFFLOC_SI 19
#define OFFLEN_SI 1
#define OFFLOC_ES 20
#define OFFLEN_ES 1
#define OFFLOC_SV 21
#define OFFLEN_SV 1
#define OFFLOC_TR 22
#define OFFLEN_TR 1
#define OFFCOUNT 23
/install/tags/20240130/locales.c
0,0 → 1,148
/*
* This program creates a header file for the SvarDOS installer, that
* contains the list of all supported keyboard layouts, along with a way to
* select sets of keyboard layouts that apply to only a specific region.
*
* Copyright (C) 2016-2024 Mateusz Viste
*/
 
/* the kblayouts list is a NULL-terminated array that contains entries in the
* following format:
* human description string <0> layout code string <0> <codepage number as a 16bit value> <ega.sys file number as a single byte> <keyboard.sys file number as a single byte> <sub keyb ID as a 16bit value, zero if none>
 
char *kblayouts[] = {
"English (US)\0xxxx",
"Polish\0pl\0xxxx"};
};
*/
 
 
#include <stdio.h>
#include <string.h>
 
 
/* global file pointers */
FILE *fdkeyb, *fdoff;
 
 
/* Converts a positive base_10 into base_8 */
static unsigned int dec2oct(int n) {
int res=0, digitPos=1;
while (n) {
res += (n & 7) * digitPos;
n >>= 3;
digitPos *= 10;
}
return(res);
}
 
 
static void addnew(char *countrycode, char *humanlang, char *keybcode, unsigned short cp, unsigned char egafile, unsigned char keybfile, unsigned int subid) {
static char lastcountry[4] = {0};
static int curoffset = 0, curcountryoffset = 0;
/* if new country, declare an offset */
if (strcmp(countrycode, lastcountry) != 0) {
/* close previous one, if any */
if (lastcountry[0] != 0) {
fprintf(fdoff, "#define OFFLEN_%s %d\r\n", lastcountry, curoffset - curcountryoffset);
} else {
fprintf(fdkeyb, "const char *kblayouts[] = {\r\n");
}
/* open new one, if any */
if (countrycode[0] != 0) {
fprintf(fdkeyb, " /****** %s ******/\r\n", countrycode);
curcountryoffset = curoffset;
fprintf(fdoff, "#define OFFLOC_%s %d\r\n", countrycode, curoffset);
strcpy(lastcountry, countrycode);
} else {
fprintf(fdoff, "#define OFFCOUNT %d\r\n", curoffset);
}
}
/* */
if (countrycode[0] != 0) {
fprintf(fdkeyb, " \"%s\\0%s\\0\\%d\\%d\\%d\\%d\\%d\\%d\",\r\n", humanlang, keybcode, dec2oct(cp >> 8), dec2oct(cp & 0xff), dec2oct(egafile), dec2oct(keybfile), dec2oct(subid >> 8), dec2oct(subid & 0xff));
} else {
fprintf(fdkeyb, " NULL};\r\n");
}
curoffset++;
}
 
 
int main(void) {
 
/*** open files ***/
fdkeyb = fopen("keylay.h", "wb");
fdoff = fopen("keyoff.h", "wb");
fprintf(fdkeyb, "/* DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED BY LOCALES.EXE */\r\n");
fprintf(fdoff, "/* DO NOT EDIT THIS FILE, IT IS AUTO-GENERATED BY LOCALES.EXE */\r\n");
 
/******************* LAYOUTS LIST START *******************/
 
/* addnew(countrycode, humanlang, keybcode, cp, egafile, keybfile, subid) */
 
/* English */
addnew("EN", "English (US)", "en", 437, 0, 0, 0);
addnew("EN", "English (UK)", "uk", 437, 0, 1, 0);
 
/* Armenian */
addnew("HY", "Armenian", "hy", 899, 6, 3, 0);
 
/* Brazilian */
addnew("BR", "Brazilian", "br", 850, 1, 1, 0);
addnew("BR", "Brazilian (US layout)", "br274", 850, 1, 1, 0);
 
/* Bulgarian */
addnew("BG", "Bulgarian", "bg", 872, 3, 2, 0);
 
/* French */
addnew("FR", "French (France)", "fr", 858, 1, 1, 0);
addnew("FR", "French (Canada, standard)", "cf", 863, 9, 1, 0);
addnew("FR", "French (Canada, legacy)", "cf", 863, 9, 1, 501);
addnew("FR", "French (Switzerland)", "sf", 858, 1, 1, 0);
 
/* German */
addnew("DE", "German", "de", 858, 1, 1, 0);
 
/* Hungarian */
addnew("HU", "Hungarian", "hu", 852, 1, 1, 208);
 
/* Italian */
addnew("IT", "Italian", "it", 858, 1, 1, 0);
 
/* Latin-American */
addnew("LA", "Latin-American", "la", 437, 0, 1, 0);
 
/* Norvegian */
addnew("NO", "Norvegian", "no", 858, 9, 1, 0);
 
/* Polish */
addnew("PL", "Polish (Programmer)", "pl", 991, 10, 1, 0);
addnew("PL", "Polish (Typewriter)", "pl", 991, 10, 1, 214);
 
/* Russian */
addnew("RU", "Russian (Standard)", "ru", 866, 3, 2, 0);
addnew("RU", "Russian (Typewriter)", "ru", 866, 3, 2, 443);
 
/* Slovenian */
addnew("SI", "Slovenian", "si", 852, 1, 1, 0);
 
/* Spanish */
addnew("ES", "Spanish", "es", 858, 1, 1, 0);
 
/* Swedish */
addnew("SV", "Swedish", "sv", 858, 1, 1, 0);
 
/* Turkish */
addnew("TR", "Turkish", "tr", 857, 1, 2, 0);
 
/******************* LAYOUTS LIST STOP *******************/
 
/* end of list - DO NOT REMOVE */
addnew("", "", "", 0, 0, 0, 0);
 
/* close files */
fclose(fdoff);
fclose(fdkeyb);
 
return(0);
}
/install/tags/20240130/makefile
0,0 → 1,50
#
# This is a makefile to build the SvarDOS install program
#
# You can use following targets:
#
# wmake - compiles the program
# wmake clean - cleans up all non-source files
#
 
all: install.com
 
install.com: keylay.h install.c deflang.c int24hdl.obj
wcl -0 -y -cc -wx -mt -lr -we -d0 -ox install.c deflang.c int24hdl.obj mdr\mdrs2024.lib svarlang.lib\svarlngs.lib
upx --8086 -9 install.com
 
int24hdl.obj: int24hdl.asm
wasm -0 -mt -wx -we int24hdl.asm
 
deflang.c:
cd nls
utf8tocp 437 en_utf8.txt > en.txt
utf8tocp 850 br_utf8.txt > br.txt
utf8tocp 858 de_utf8.txt > de.txt
utf8tocp 858 fr_utf8.txt > fr.txt
utf8tocp 858 it_utf8.txt > it.txt
utf8tocp maz pl_utf8.txt > pl.txt
utf8tocp 866 ru_utf8.txt > ru.txt
utf8tocp 852 si_utf8.txt > si.txt
utf8tocp 858 sv_utf8.txt > sv.txt
utf8tocp 857 tr_utf8.txt > tr.txt
..\svarlang.lib\tlumacz en br de fr it pl ru si sv tr > tlumacz.log
if exist ..\deflang.c del ..\deflang.c
if exist ..\install.lng del ..\install.lng
move deflang.c ..
move out.lng ..\install.lng
del ??.txt
cd ..
 
locales.exe: locales.c
wcl -0 -y -cc -wx -ml -lr -we -d0 -ox locales.c
 
keylay.h: locales.exe
locales.exe
 
clean: .SYMBOLIC
del install.com
del locales.exe
del *.obj
del deflang.c
del install.lng
/install/tags/20240130/mdr/bios.h
0,0 → 1,39
/*
* BIOS functions
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_BIOS_H
#define MDR_BIOS_H
 
/* waits for ticks time (1 tick is roughly 55ms, an hour has 65543 ticks)
* works on IBM PC, XT, AT - ie. it's always safe */
void mdr_bios_tickswait(unsigned short ticks);
 
/* returns the current BIOS tick counter (18.2 Hz, 1 tick is roughly 55ms, an
* hour has 65543 ticks). works on IBM PC, XT, AT - ie. it's always safe */
unsigned short mdr_bios_ticks(void);
 
#endif
/install/tags/20240130/mdr/cout.h
0,0 → 1,83
/*
* Console output
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_COUT
#define MDR_COUT
 
/* inits the subsystem, fills arguments with:
* w = screen width
* h = screen height
* Any of these arguments may be passed as NULL
* Returns a color flag (0=mono, non-zero=color) */
unsigned char mdr_cout_init(unsigned char *w, unsigned char *h);
 
/* get current attribute value under cursor and returns it */
int mdr_cout_getcurattr(void);
 
void mdr_cout_close(void);
void mdr_cout_cursor_hide(void);
void mdr_cout_cursor_show(void);
 
/* gets cursor's position on screen (row, column) and shape */
void mdr_cursor_getinfo(unsigned char *column, unsigned char *row, unsigned short *shape);
 
void mdr_cout_locate(unsigned char row, unsigned char column);
 
/* print a single character on screen */
void mdr_cout_char(unsigned char y, unsigned char x, char c, unsigned char attr);
 
/* print a single character on screen, repeated count times */
void mdr_cout_char_rep(unsigned char y, unsigned char x, char c, unsigned char attr, unsigned char count);
 
/* print a nul-terminated string on screen, up to maxlen characters
* returns the number of characters actually displayed */
unsigned char mdr_cout_str(unsigned char y, unsigned char x, const char *s, unsigned char attr, unsigned char maxlen);
 
/* clears screen, filling it with a single color attribute */
void mdr_cout_cls(unsigned char colattr);
 
void mdr_cout_getconprops(unsigned char *termwidth, unsigned char *termheight, unsigned char *colorflag);
 
 
/*****************************************************************************
* functions below do not need mdr_cout_init() initialization, they can be *
* used to output data to console right away, as they use DOS services. *
*****************************************************************************/
 
/* output a single character to console */
void mdr_coutraw_char(char c);
 
/* output a nul-terminated string */
void mdr_coutraw_str(const char *s);
 
/* same as above, but followed with a CR/LF line terminator */
void mdr_coutraw_puts(const char *s);
 
/* outputs a DOS-style (CR/LF) newline to console */
void mdr_coutraw_crlf(void);
 
#endif
/install/tags/20240130/mdr/dos.h
0,0 → 1,114
/*
* Functions interacting with DOS
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_DOS_H
#define MDR_DOS_H
 
#include <time.h> /* time_t */
 
/* returns a far pointer to the current process PSP structure */
void far *mdr_dos_psp(void);
 
/* returns a far pointer to the environment block of the current process */
char far *mdr_dos_env(void);
 
/* looks for varname in the DOS environment and fills result with its value if
* found. returns NULL if not found or if value is too big to fit in result
* (reslimit exceeded). returns result on success.
* NOTE: this function performs case-sensitive matches */
char *mdr_dos_getenv(char *result, const char *varname, unsigned short reslimit);
 
/* fetches directory where the program was loaded from and return its length.
* path string is never longer than 128 (incl. the null terminator) and it is
* always terminated with a backslash separator, unless it is an empty string */
unsigned char mdr_dos_exepath(char *path);
 
/* returns a far pointer to the full path and filename of the running program.
* returns NULL on error. */
const char far *mdr_dos_selfexe(void);
 
/* waits for a keypress and returns it
* extended keys are returned ORed with 0x100 (example: PGUP is 0x149) */
int mdr_dos_getkey(void);
 
/* Same as mdr_dos_getkey(), but this call cannot be aborted by CTRL+C */
int mdr_dos_getkey2(void);
 
/* flush the keyboard buffer */
void mdr_dos_flushkeyb(void);
 
/* poll stdin status, returns 0 if no character is pending in the keyboard
* buffer, non-zero otherwise */
int mdr_dos_keypending(void);
 
/* sets up the CTRL+C handler for the running program to a no-op - in other
* words, after this call DOS will no longer abort the program on CTRL+C.
* this is only valid for the duration of the program because DOS will restore
* the original handler after the program exits.
*
* an alternative is mdr_dos_ctrlc_off(), but this does not inhibit the
* handler, it sets DOS to not react to CTRL+C in the first place, and this
* setting stays active after the program quits so the program should remember
* to restore the original setting before quitting. */
void mdr_dos_ctrlc_inhibit(void);
 
/* sets the DOS BREAK control OFF, ie. instructs DOS not to check for CTRL+C
* during most input operations. returns the previous state of the break
* control flag (0=disabled 1=enabled). this changes a global DOS flag that can
* be checked on command line with the "BREAK" command, so the program should
* take care to restore the initial setting before quitting. */
unsigned char mdr_dos_ctrlc_disable(void);
 
/* sets the DOS BREAK control ON. see mdr_dos_ctrlc_disable() for details. */
void mdr_dos_ctrlc_enable(void);
 
/* converts a "DOS format" 16-bit packed date into a standard (time_t)
* unix timestamp. A DOS date is a 16-bit value:
* YYYYYYYM MMMDDDDD
*
* day of month is always within 1-31 range;
* month is always within 1-12 range;
* year starts at 1980 and continues for 127 years */
time_t mdr_dos_date2unix(unsigned short d);
 
/* converts a "DOS format" 16-bit packed time into hours, minutes and seconds
*
* A DOS time is a 16-bit value:
* HHHHHMMM MMMSSSSS
*
* HHHHH = hours, always within 0-23 range
* MMMMMM = minutes, always within 0-59 range
* SSSSS = seconds/2 (always within 0-29 range) */
void mdr_dos_time2hms(unsigned char *h, unsigned char *m, unsigned char *s, unsigned short t);
 
/* Determine the canonical name of the specified filename or path and writes
* the result into result. The input path does not need to actually exist.
* This function requires a 3.x+ DOS kernel.
* name is simply copied to result on error. */
void mdr_dos_truename(char *result, const char *name);
 
#endif
/install/tags/20240130/mdr/history.txt
0,0 → 1,38
version xxxx (xx xxx xxxx)
- added the OPL driver (Adlib-style OPL2 FM synth) along with IMF playback
- new mdr_dos_selfexe()
- new mdr_dos_truename()
- new mdr_coutraw_str() and mdr_coutraw_crlf()
- new mdr_dos_ctrlc_inhibit(), mdr_dos_ctrlc_enable(), mdr_dos_ctrlc_disable()
- added mdr_bios_ticks()
- renamed keyb_getkey() to mdr_dos_getkey()
- renamed keyb_flush() to mdr_dos_flushkeyb()
- renamed all timer_ functions to mdr_timer_
- new mdr_dos_getkey2(), same as mdr_dos_getkey() but immune to CTRL+C
- new mdr_dos_keypending()
- removed keyb_getkey_ifany(): use mdr_dos_keypending + mdr_dos_getkey instead
- renamed pcx_anal() and pcx_load() to mdr_pcx_anal() and mdr_pcx_load()
- added pcx_loadrow(): loads PCX data row by row (useful on PCX files > 64K)
- replaced pcx_convto8bpp() by mdr_pcx_to8bpp()
- vid12_putscanline() optimizations: 22% faster
- renamed all the mouse_ functions to mdr_mouse_
- added mdr_mouse_setcursor()
- added vid12_waitblank()
 
version 2023 (29 Jul 2023)
- all routines are built as a library now
- advertising MDR version (MDR_VER_MAJOR and MDR_VER_MINOR in VER.H)
- added the SBDIGI driver (SoundBlaster Digitized sound)
- added the COUT module (text-mode console output)
- added the DOS module (mdr_dos_* functions)
- added the UNZIP module for iteration over ZIP archives
- added the BIOS module (with the mdr_bios_tickswait() function)
- vid12: fast VRAM copy (vid12_vramcpy_* functions)
- vid12: vid12_clrline()
- vid12: fixed color mapping in vid12_setpalette()
- vid12: added functions vid12_hline() and vid12_linepat()
- vid12: fixed reverting the previous video mode at vid12_close()
- vid12: optimized vid12_putpixel() - 17% faster
 
version 2022 (09 Oct 2022)
- initial public release
/install/tags/20240130/mdr/mdrs2024.lib
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/install/tags/20240130/mdr/mouse.h
0,0 → 1,60
/*
* Mouse routines
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_MOUSE_H
#define MDR_MOUSE_H
 
/* init the mouse driver (and checks for presence of mouse support at same time)
* returns 0 if no mouse is present, and the number of buttons otherwise.
* after initialization the mouse cursor is hidden, use mdr_mouse_show() to
* make it visible. */
int mdr_mouse_init(void);
 
/* shows the mouse pointer */
void mdr_mouse_show(void);
 
/* hides the mouse pointer */
void mdr_mouse_hide(void);
 
/* get x/y coordinates of the mouse, and returns a bitfield with state of buttons */
int mdr_mouse_getstate(int *x, int *y);
 
/* get x/y coordinates of the mouse when the last button release occured since last check.
returns the id of the button pressed (1 or 2), or 0 if no event occured. */
int mdr_mouse_fetchrelease(int *x, int *y);
 
/* set graphic pointer shape. icon is 64-bytes long, two sets of 32. each set
* of 32 bytes is organized as a 16x16 bitmap, ie. 16 rows of 16-bit values.
* a) the first set of 16 shorts defines the background mask - that is, the
* background will show through wherever there is a 1-bit in that data.
* b) the second set defines the "XOR mask" - that is, the pixels matching the
* 1-bit in this data set are toggled.
* hotspotx and hotspoty define respectively the horizontal and vertical hot
* spot of the pointer (default being [0,0], that is the top left corner). */
void mdr_mouse_setcursor(const unsigned short *icon, unsigned char hotspotx, unsigned char hotspoty);
 
#endif
/install/tags/20240130/mdr/opl.h
0,0 → 1,241
/*
* Library to access OPL2/OPL3 hardware (YM3812 / YMF262)
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2015-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef mdr_opl_h
#define mdr_opl_h
 
struct mdr_opl_timbre {
unsigned char mod_ws, car_ws; /* waveform select (0-4), reg Exh */
unsigned char mod_sr, car_sr; /* sustain/release, reg 8xh */
unsigned char mod_ad, car_ad; /* attack/decay, reg 6xh */
unsigned char mod_20, car_20; /* tremolo/vibrato/sustain..., reg 2xh */
unsigned char mod_40, car_40; /* reg 4xh */
unsigned char feedconn;
};
 
struct mdr_opl_timbretemplate {
struct {
unsigned char ws; /* waveform select 0..3 */
unsigned char sustlev; /* sustain level 0..15 */
unsigned char release; /* release level 0..15 */
unsigned char attack; /* attack rate 0..15 */
unsigned char decay; /* decay rate 0..15 */
unsigned char tremolo; /* tremolo flag 0..1 */
unsigned char vibrato; /* vibrato flag 0..1 */
unsigned char sustain; /* sustain flag 0..1 */
unsigned char ksr; /* KSR (envelope scaling) flag 0..1 */
unsigned char mult; /* frequency multiplication factor 0..15 */
unsigned char ksl; /* Key Scale Level 0..3 */
unsigned char outlev; /* output level 0..63 */
} carrier;
struct {
unsigned char ws; /* waveform select 0..3 */
unsigned char sustlev; /* sustain level 0..15 */
unsigned char release; /* release level 0..15 */
unsigned char attack; /* attack rate 0..15 */
unsigned char decay; /* decay rate 0..15 */
unsigned char tremolo; /* tremolo flag 0..1 */
unsigned char vibrato; /* vibrato flag 0..1 */
unsigned char sustain; /* sustain flag 0..1 */
unsigned char ksr; /* KSR (envelope scaling) flag 0..1 */
unsigned char mult; /* frequency multiplication factor 0..15 */
unsigned char ksl; /* Key Scale Level 0..3 */
unsigned char outlev; /* output level 0..63 */
} modultr;
unsigned char feedback;/* FeedBack Modulation Factor 0..7 */
unsigned char conn; /* Synthesis type: 0=FM / 1=Additive */
};
 
enum MDR_OPL_TIMER {
MDR_OPL_TIMER_80US = 2,
MDR_OPL_TIMER_320US = 3
};
 
 
/* frequency groups, to be used with mdr_opl_noteon() and mdr_opl_notebend().
* There are 7 frequency groups to choose from. Each group supports a different
* span of frequencies. Higher groups have wider spans, but at the cost of larger
* difference between adjacent notes:
*
* Block Note 0 Note 1023 Step gap between adjacent notes
* FGROUP0 0.047 Hz 48.503 Hz 0.048 Hz
* FGROUP1 0.094 Hz 97.006 Hz 0.095 Hz
* FGROUP2 0.189 Hz 194.013 Hz 0.190 Hz
* FGROUP3 0.379 Hz 388.026 Hz 0.379 Hz
* FGROUP4 0.758 Hz 776.053 Hz 0.759 Hz
* FGROUP5 1.517 Hz 1552.107 Hz 1.517 Hz
* FGROUP6 3.034 Hz 3104.215 Hz 3.034 Hz
* FGROUP7 6.068 Hz 6208.431 Hz 6.069 Hz
*
* This shows that block 7 is capable of reaching the highest note (6.2kHz) but
* since there are 6 Hz between notes the accuracy suffers. Example: note A-4
* is 440Hz but in this block, the two closest frequency numbers are 72 and 73,
* which create tones at 437Hz and 443Hz respectively, neither of which is
* particularly accurate. Blocks 3 and below are unable to reach as high as
* 440Hz, but block 4 can. With block 4, frequency numbers 579 and 580 produce
* 439.4 Hz and 440.2 Hz, considerably closer to the intended frequency.
*
* In other words, when calculating notes, the best accuracy is achieved by
* selecting the lowest possible block number that can reach the desired note
* frequency.
*
* More details: https://moddingwiki.shikadi.net/wiki/OPL_chip#A0-A8:_Frequency_Number
*/
 
enum mdr_opl_fgroup_t {
MDR_OPL_FGROUP0 = 0,
MDR_OPL_FGROUP1 = 1 << 2,
MDR_OPL_FGROUP2 = 2 << 2,
MDR_OPL_FGROUP3 = 3 << 2,
MDR_OPL_FGROUP4 = 4 << 2,
MDR_OPL_FGROUP5 = 5 << 2,
MDR_OPL_FGROUP6 = 6 << 2,
MDR_OPL_FGROUP7 = 7 << 2
};
 
/* Hardware detection and initialization. Must be called before any other
* OPL function. Returns 0 on success, non-zero otherwise. */
int mdr_opl_init(void);
 
/* close OPL device */
void mdr_opl_close(void);
 
/* turns off all notes */
void mdr_opl_clear(void);
 
/* loads an instrument described by properties in a timbre_t struct into
* the defined voice channel. The OPL2 chip supports up to 9 voice channels,
* from 0 to 8. The timbre struct can be freed right after this call. */
void mdr_opl_loadinstrument(unsigned char voice, const struct mdr_opl_timbre *timbre);
 
/* generate a timbre structure based on a timbre template. this is a
* convenience function meant to provide a human-compatible (more readable)
* way of generating a timbre struct. */
int mdr_opl_timbre_gen(struct mdr_opl_timbre *timbre, const struct mdr_opl_timbretemplate *tpl);
 
/* Triggers a note on selected voice channel.
* freqid is a value between 0 and 1023. The following formula can be used to
* determine the freq number for a given note frequency (Hz) and block:
*
* freqid = frequency * 2^(20 - block) / 49716
*
* The note will be kept "pressed" until mdr_opl_noteoff() is called. */
void mdr_opl_noteon(unsigned char voice, unsigned short freqid, enum mdr_opl_fgroup_t fgroup);
 
/* changes the frequency of the note currently playing on voice channel, this
* can be used for pitch bending. */
void mdr_opl_notebend(unsigned char voice, unsigned short freqid, enum mdr_opl_fgroup_t fgroup);
 
/* releases a note on selected voice. */
void mdr_opl_noteoff(unsigned char voice);
 
/* adjusts volume of a voice. volume goes from 63 (mute) to 0 (loudest) */
void mdr_opl_voicevolume(unsigned char voice, unsigned char volume);
 
/* this is a LOW-LEVEL function that writes a data byte into the reg register
* of the OPL chip. Use this only if you know exactly what you are doing. */
void mdr_opl_regwr(unsigned char reg, unsigned char data);
 
 
/*****************************************************************************
* IMF AUDIO FILES PLAYBACK *
* *
* It is possible to mix IMF playback calls with manual notes, but you must *
* take care to use only voices not used by your IMF audio. Typically games *
* tend to use the voice #0 for sound effects and voices #1 to #8 for music. *
* *
* The IMF API comes in two version: the normal one, or "imfeasy". The easy *
* version is easier to use, but requires to have the entire IMF audio file *
* loaded in memory, while the normal (non-easy) allows for more flexibility *
* in this regard, potentially allowing for playback of huge IMF files. *
*****************************************************************************/
 
/*** EASY INTERFACE ***/
 
/* playback initialization, easy interface. imf points to the start of the IMF
* file. The imf pointer must not be freed as long as playback is ongoing.
* imflength is the size (in bytes) of the IMF data.
* clock must be an incrementing value that wraps to 0 after 65535. The clock
* speed will control the playback's tempo.
* loopscount tells how many times the song will have to be looped (0 means
* "loop forever").
* returns 0 on success, non-zero otherwise. */
int mdr_opl_imfeasy_init(void *imf, unsigned short imflength, unsigned short clock, unsigned char loopscount);
 
/* Playback of an IMF file preloaded via mdr_opl_imfeasy_init(). This function
* must be called repeatedly at a high frequency for best playback quality.
* Returns 0 on success, 1 if playback ended, -1 on error. */
int mdr_opl_imfeasy_play(unsigned short clock);
 
/*** ADVANCED INTERFACE ***/
 
/* playback initialization, this function must be called immediately before
* playback. imf points to the start of the IMF file and must contain at least
* the first 6 bytes of the audio file.
* clock must be an incrementing value that wraps to 0 after 65535.
* the clock speed will control the playback's tempo.
* returns the amount of consumed bytes (0, 4 or 6) */
unsigned short mdr_opl_imf_init(void *imf, unsigned short clock);
 
/* Playback, advanced version. Feeds the IMF playback routine with IMF data.
* Returns the amount of bytes that have been consumed, hence the next call
* should provide an imf pointer advanced by this many bytes (and imflen
* decreased accordingly). Such approach might not be the most intuitive, but
* it allows to load an imf song partially and provide only short chunks of
* data for playback instead of having to buffer the entire song in memory.
* For a simpler call that requires to buffer the entire IMF file in memory,
* see mdr_opl_imf_playeasy().
* This function must be called repeatedly at a high frequency for best
* playback quality. */
unsigned short mdr_opl_imf_play(void *imf, unsigned short imflen, unsigned short clock);
 
 
/*****************************************************************************
* OPL TIMER FUNCTIONS *
*****************************************************************************/
 
/* configures and starts a timer given type so it emits a tick every count
* periods. Two timer types are available:
* MDR_OPL_TIMER_80US - with a period of 80us
* MDR_OPL_TIMER_320US - with a period of 320us
* count may range from 0 to 255, but 0 means "256 periods".
*
* You may use only one timer at a time.
*
* EXAMPLE: setting up MDR_OPL_TIMER_80US with a count of 25 would make the
* timer tick every 2ms (25 * 80us). */
void mdr_opl_timer_set(enum MDR_OPL_TIMER timertype, unsigned char count);
 
/* returns 1 if timer tick occured, 0 otherwise. After a tick has been
* returned, this function will return 0 until next tick.
*
* it is important to note that there is no way to know whether one tick
* passed since last time, or more, so it is up to you to make sure you call
* this function fast enough. */
unsigned char mdr_opl_timer_tick(void);
 
#endif
/install/tags/20240130/mdr/pcx.h
0,0 → 1,77
/*
* PCX-loading routines
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2022-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_PCX_H
#define MDR_PCX_H
 
#include <stdio.h> /* FILE */
 
struct pcx_hdr {
unsigned char rle;
unsigned char bpp;
unsigned short max_x;
unsigned short max_y;
unsigned short bytes_per_scanline;
struct {
unsigned char r;
unsigned char g;
unsigned char b;
} pal[256];
};
 
/* analyzes the header of a PCX file and fills the pcx_hdr struct accordingly.
* fd must be a valid (open) file descriptor.
* offset is the address inside the file where the PCX data is located
* (usually 0, unless the file is some kind of container).
* len is the total length of the PCX data. len=0 means "same as file size"
* returns 0 on success, non-zero otherwise. */
int mdr_pcx_anal(struct pcx_hdr *h, FILE *fd, unsigned long offset, unsigned long len);
 
/* this function should be called to load the next row of a PCX file into a
* buffer pointed at by bufptr. you will typically want to call this function
* h->max_y times. ptr must be at least (h->max_x + 1) bytes large for 8bpp.
* the pcx_hdr struct must have been produced by pcx_anal().
* returns 0 on success, non-zero otherwise. */
int mdr_pcx_loadrow(void *bufptr, const struct pcx_hdr *h, FILE *fd);
 
/* load an entire PCX file into a pixel buffer. the PCX data must have been
* previously analyzed by pcx_anal() and the fd file pointer must not have been
* modified since then. the destination buffer must be large enough to hold all
* pixels, ie. (h->max_x + 1) * (h->max_y + 1) for 8 bpp.
* returns 0 on success, non-zero otherwise. */
int mdr_pcx_load(void *ptr, const struct pcx_hdr *h, FILE *fd);
 
/* convert img to 8bpp if needed (ie unpack 2 and 4bpp data to 8bpp).
* the conversion is performed in-place, make sure the img buffer is large
* enough to accomodate the size of the data after conversion (ie. twice as
* big on 4bpp source, 4x times as big on 2bpp source and 8x as big on 1bpp
* source).
* if rowflag is set to a non-zero value, then the routine assumes img
* contains only a single row of pixels */
int mdr_pcx_to8bpp(void *img, const struct pcx_hdr *h, unsigned char rowflag);
 
#endif
/install/tags/20240130/mdr/readme.txt
0,0 → 1,78
 
Mateusz' DOS Routines
http://mdrlib.sourceforge.io
 
 
Mateusz' DOS Routines (MDR) is a C library that contains a variety of routines
to ease the development of real mode DOS applications.
 
These routines are mostly targeted at the Open Watcom compiler, but might work
with other C compilers as well.
 
All the routines have been created by Mateusz Viste and are published under the
terms of the MIT license.
 
List of available modules:
 
BIOS BIOS-based functions
COUT console output (writing to text-mode display)
DOS functions interacting with DOS
KEYB basic functions to interact with the keyboard
MOUSE mouse routines
OPL OPL2 (Adlib style) audio
PCX parsing, loading and uncompressing PCX images
RS232 writing to and reading from an RS-232 ("COM") port
SBDIGI playing digitized sounds with a SoundBlaster-compatible card
TIMER high-resolution (1 kHz) timer, relies on PIT reprogramming
TRIGINT sin and cos functions using integers only (8086-compatible)
UNZIP iteration over ZIP archives (no decompression code)
VID12 driver for mode 12h VGA graphic (640x480, 16 colors)
VIDEO drivers for 320x200 video modes (256 colors on VGA, 16 colors on CGA)
WAVE parsing and loading WAVE sound files
XMS detecting and using XMS memory to store data
 
Documentation is contained in header (*.H) files in the INC\MDR\ directory.
 
 
+============================================================================+
| USAGE |
+============================================================================+
 
Using MDR is no different than using any other library: you need to include
the header file(s) you wish to rely on and pass the lib file that matches your
memory model (small/compact/medium/large) to your linker.
 
Example program, KBTEST.C:
 
#include <mdr\dos.h>
 
int main(void) {
mdr_dos_getkey();
return(0);
}
 
How to compile with the Watcom C Compile and Link Utility:
 
wcl -ms kbtest.c mdrs2024.lib
 
 
+============================================================================+
| COMPILATION FROM SOURCES |
+============================================================================+
 
Should you wish to compile MDR from sources instead of relying on precompiled
LIB binaries, you will need the Watcom (or Open Watcom) C compiler and use its
wmake utility as follows:
 
wmake clean
wmake model=<MEMORY MODEL>
 
valid memory model options are:
 
wmake model=s
wmake model=c
wmake model=m
wmake model=l
 
 
==============================================================================
/install/tags/20240130/mdr/rs232.h
0,0 → 1,47
/*
* Reading from and writing to an RS-232 port
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2015-2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_RS232_H
#define MDR_RS232_H
 
/* get the I/O port for COMx (1..4) */
unsigned short rs232_getport(int x);
 
/* check if the COM port is ready for write. loops for some time waiting.
* returns 0 if port seems ready eventually, non-zero otherwise. can be used
* to verify the rs232 presence */
int rs232_check(unsigned short port);
 
/* write a byte to the COM port at 'port'. this function will block if the
* UART is not ready to transmit yet. */
void rs232_write(unsigned short port, int data);
 
/* read a byte from COM port at 'port'. returns the read byte, or -1 if
* nothing was available to read. */
int rs232_read(unsigned short port);
 
#endif
/install/tags/20240130/mdr/sbdigi.h
0,0 → 1,57
/*
* SoundBlaster routines for DSP driving
*
* Copyright (C) 2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_SBDIGI_H
#define MDR_SBDIGI_H
 
struct sbdigi_ctx;
 
/* initializes the SoundBlaster DSP chip
* blaster must point to a BLASTER environment string (like "A220 I5 D1")
* returns a pointer to a context, NULL on error
* NOTE: DSP's state after initialization may or may not be muted, depending
* on the exact hardware revision. use sbdigi_spkoff() to make sure it is
* unmuted */
struct sbdigi_ctx *sbdigi_init(const char *blaster);
 
/* unmutes the SoundBlaster DSP */
void sbdigi_spkon(struct sbdigi_ctx *ctx);
 
/* mutes the SoundBlaster DSP */
void sbdigi_spkoff(struct sbdigi_ctx *ctx);
 
/* plays a short sample
* ctx - DSP context, as returned by sbdigi_init()
* buf - pointer to sample data (must be PCM, 8000 Hz, mono, 8-bit unsigned
* len - length of the sample, in bytes
* NOTES: this routine uses DMA to transfer memory. This has two implications:
* 1. the routine will return almost immediately, while the sound is playing
* 2. sample data must be contained in a buffer that does NOT cross a 64K page
* because DMA transfers are unable to cross 64K boundaries */
void sbdigi_playsample(struct sbdigi_ctx *ctx, void *buf, unsigned short len);
 
/* shuts down the DSP and frees context memory */
void sbdigi_quit(struct sbdigi_ctx *ctx);
 
#endif
/install/tags/20240130/mdr/timer.h
0,0 → 1,51
/*
* High-resolution timing routines (PIT reprogramming)
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_TIMER_H
#define MDR_TIMER_H
 
/* Starts the timer by reprogramming the 8253 chip from its default 18.2 Hz
* frequency to about 1.1 kHz. It is mandatory to revert the timer to its
* original frequency via mdr_timer_stop() before your application quits. */
void mdr_timer_init(void);
 
/* Fills res with the amount of microseconds that elapsed since either
* mdr_timer_init() or mdr_timer_reset(), whichever was called last.
* Note that the res counter wraps around approximately every 71 minutes if
* mdr_timer_reset() is not called. */
void mdr_timer_read(unsigned long *res);
 
/* Reset the timer value, this can be used by the application to make sure
* no timer wrap occurs during critical parts of your code flow */
void mdr_timer_reset(void);
 
/* Stops (uninstalls) the timer. This must be called before your application
* quits, otherwise the system will likely crash. This function has a void
* return value so that it can be registered as an atexit() procedure. */
void mdr_timer_stop(void);
 
#endif
/install/tags/20240130/mdr/trigint.h
0,0 → 1,46
/*
* Routines for computation of basic transcendental functions sin and cos.
* These routines use only integers, hence they do not require an FPU nor any
* kind of FPU emulation. Works reasonably fast even on an 8086 CPU.
*
* The results are computed using polynomial approximations. Their precision
* is not expected to be ideal, but "good enough" for common usage.
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_TRIGINT_H
#define MDR_TRIGINT_H
 
/* Computes the cosine value for the given radian.
* The radian argument must be provided multiplied by 1000.
* Returns the cosine value multiplied by 1000. */
short trigint_cos(short rad1000);
 
/* Computes the sine value for the given radian angle.
* The radian argument must be provided multiplied by 1000.
* Returns the cosine value multiplied by 1000. */
short trigint_sin(short rad1000);
 
#endif
/install/tags/20240130/mdr/unzip.h
0,0 → 1,58
/*
* Function to iterate through files in a ZIP archive.
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2012-2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_UNZIP
#define MDR_UNZIP
 
#include <stdio.h> /* FILE * */
 
#define ZIP_FLAG_ISADIR 1
#define ZIP_FLAG_ENCRYPTED 2
 
#define ZIP_METH_STORE 0
#define ZIP_METH_DEFLATE 8
 
struct mdr_zip_item {
unsigned long filelen;
unsigned long compressedfilelen;
unsigned long crc32;
unsigned long dataoffset; /* offset in the file where compressed data starts */
unsigned long nextidxoffset; /* offset in the file of the next zip record, used by mdr_zip_iter() */
unsigned short dosdate; /* datestamp of the file (DOS packed format) */
unsigned short dostime; /* timestamp of the file (DOS packed format) */
unsigned short compmethod; /* compression method (ZIP_METH_xxx) */
unsigned char flags; /* see ZIP_FLAG_xxx above */
char fname[256]; /* filename */
};
 
/* returns next item found in zip file. this is supposed to be called
* iteratively, passing the previous mdr_zipitem struct each time (z must be
* all zeroed out on first call).
* returns 0 on success, neg on error, 1 on end of archive */
int mdr_zip_iter(struct mdr_zip_item *z, FILE *fd);
 
#endif
/install/tags/20240130/mdr/ver.h
0,0 → 1,33
/*
* MDR version
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_VER_H
 
#define MDR_VER_MAJOR 2023
#define MDR_VER_MINOR 0
 
#endif
/install/tags/20240130/mdr/vid12.h
0,0 → 1,87
/*
* a few functions for mode 12h programming (640x480 4bpp)
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2022-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_VID12_H
 
#define MDR_VID12_H
 
/* init video mode 12h (640x480x16c)
* remember to call vid12_close() at exit time */
void vid12_init(void);
 
/* wait until VBLANK */
void vid12_waitvblank(void);
 
/* wait until ANY blank: either VBLANK or HBLANK */
void vid12_waitblank(void);
 
/* clear screen using color
* this function is fastest when color is 0 or 15 */
void vid12_cls(unsigned char color);
 
/* clear a single scanline (0..479) with a solid color (0..15)
* this function is fastest when color is 0 or 15 */
void vid12_clrline(unsigned short line, unsigned char color);
 
/* fill lines from linefirst to linelast with an 8 pixels pattern
* linelast must be equal to or greater than linelast
* pattern must be 8 bytes long */
void vid12_linepat(unsigned short linefirst, unsigned short linelast, const unsigned char *pattern);
 
/* deinit video mode 12h and resets to previous mode */
void vid12_close(void);
 
/* puts a pixel on screen */
void vid12_putpixel(unsigned short x, unsigned short y, unsigned char col);
 
/* draws a horizonatal line from [x1,y] to [x2,y] */
void vid12_hline(unsigned short y, unsigned short x1, unsigned short x2, unsigned char color);
 
/* write an entire scanline (640 pixels) to screen. the pixels data must be
* a serie of 640 bytes having values in the range [0..15] */
void vid12_putscanline(unsigned short scanline, const unsigned char *pixels);
 
/* set index palette color to given R,G,B value. each R,G,B component must be
* a 6 bit value in the range [0..63] (where 63 is the maximum luminosity) */
void vid12_setpalette(unsigned char index, unsigned char r, unsigned char g, unsigned char b);
 
/*****************************
* VRAM TO VRAM operations *
*****************************/
 
/* prepares VGA for a VRAM-to-VRAM copy operation */
void vid12_vramcpy_prep(void);
 
/* fast (VRAM-to-VRAM) copy of a scanline (0..479) to another scanline.
* vid12_vramcpy_prep() must be called before and vid12_vramcpy_done must be
* called after one or more vid12_vramcpy_scanline() calls. */
void vid12_vramcpy_scanline(unsigned short dst, unsigned short src);
 
/* sets VGA back to its normal state after VRAM-to-VRAM operations */
void vid12_vramcpy_done(void);
 
#endif
/install/tags/20240130/mdr/video.h
0,0 → 1,94
/*
* video library - provides a few functions for mode 4 and 13h programming.
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2023 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_VIDEO_H
 
#define MDR_VIDEO_H
 
#define VIDEO_DBUF 1
 
struct video_handler {
unsigned char far *dbuf;
int flags;
int mode;
unsigned char lastmode;
};
 
/* returns 0 if no VGA has been detected, non-zero otherwise */
int video_detectvga(void);
 
/* returns 0 if no EGA has been detected, non-zero otherwise */
int video_detectega(void);
 
/* init video mode. either 0x04 for CGA or 0x13 for VGA */
struct video_handler *video_open(int mode, int flags);
 
/* reads a screen dump from file and puts it to the screen buffer */
void video_file2screen(struct video_handler *handler, char *file);
 
/* load count colors of palette from array of rgb triplets */
void video_loadpal(const unsigned char *pal, int count, int offset);
 
/* Wait until VBLANK */
void video_waitvblank(void);
 
void video_flip(struct video_handler *handler);
 
/* copies line ysrc over ydst in CGA mode memory */
void video_cgalinecopy(struct video_handler *handler, int ydst, int ysrc);
 
/* clear screen using color */
void video_cls(struct video_handler *handler, unsigned char color);
 
/* renders a sprite of width and height dimensions onscreen, starting at specified x/y location
coloffset is an offset to add to color indexes, while transp is the index of the transparent color (set to -1 if none) */
void video_putsprite(struct video_handler *handler, unsigned char *sprite, int x, int y, int width, int height, int coloffset, int transp, int maxcol);
 
/* same as video_putsprite(), but reads the sprite from a file */
void video_putspritefromfile(struct video_handler *handler, char *file, long foffset, int x, int y, int width, int height, int coloffset, int transp, int maxcol);
 
void video_close(struct video_handler *handler);
 
void video_rputpixel(struct video_handler *handler, int x, int y, unsigned char col, int repeat);
 
/* render a horizontal line of length len starting at x/y */
void video_hline(struct video_handler *handler, int x, int y, int len, unsigned char color);
 
/* render a vertical line of length len starting at x/y */
void video_vline(struct video_handler *handler, int x, int y, int len, unsigned char color);
 
void video_line(struct video_handler *handler, int x1, int y1, int x2, int y2, unsigned char color);
 
void video_rect(struct video_handler *handler, int x, int y, int width, int height, unsigned char color);
 
/* renders a rectangle on screen, at position x/y, filled with color */
void video_rectfill(struct video_handler *handler, int x, int y, int width, int height, unsigned char color);
 
void video_setpalette(unsigned char index, unsigned char r, unsigned char g, unsigned char b);
 
void video_getpalette(unsigned char index, unsigned char *r, unsigned char *g, unsigned char *b);
#endif
/install/tags/20240130/mdr/wave.h
0,0 → 1,42
/*
* WAVE-loading routines
*
* Copyright (C) 2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_WAVE_H
#define MDR_WAVE_H
 
struct wave_t {
unsigned short format;
unsigned short channels;
unsigned short rate;
unsigned short bitdepth;
unsigned long dataoffset;
unsigned long len;
};
 
/* looks at an open WAVE file and fills the wav structure with related
* information (format, number of channels, bit depth, data rate, etc)
* returns 0 on success */
int wave_anal(struct wave_t *wav, FILE *fd);
 
#endif
/install/tags/20240130/mdr/xms.h
0,0 → 1,51
/*
* XMS driver
*
* This file is part of the Mateusz' DOS Routines (MDR): http://mdr.osdn.io
* Published under the terms of the MIT License, as stated below.
*
* Copyright (C) 2014-2022 Mateusz Viste
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
 
#ifndef MDR_XMS_H
#define MDR_XMS_H
 
struct xms_struct {
unsigned int handle;
long memsize; /* allocated memory size, in bytes */
};
 
/* checks if a XMS driver is installed, inits it and allocates a memory block of memsize K-bytes.
* if memsize is 0, then the maximum possible block will be allocated.
* returns the amount of allocated memory (in K-bytes) on success, 0 otherwise. */
unsigned int xms_init(struct xms_struct *xms, unsigned int memsize);
 
/* free XMS memory */
void xms_close(struct xms_struct *xms);
 
/* copies a chunk of memory from conventional memory into the XMS block.
returns 0 on sucess, non-zero otherwise. */
int xms_push(struct xms_struct *xms, void far *src, unsigned int len, long xmsoffset);
 
/* copies a chunk of memory from the XMS block into conventional memory */
int xms_pull(struct xms_struct *xms, long xmsoffset, void far *dst, unsigned int len);
 
#endif
/install/tags/20240130/nls/br_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: Portuguese
# Translator: Luzemário Dantas
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:INSTALAÇÃO DO SVARDOS
0.1:Instalar SvarDOS
0.2:Sair para o DOS
0.3:Criar uma partição automaticamente
0.4:Rodar a ferramenta de particionamento FDISK
0.5:Pressione qualquer tecla...
0.7:Formatar drive %c:
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Up/Down = Selecionar | Enter = Escolher opção | ESC = Tela anterior
0.11:Up/Down = Selecionar | Enter = Escolher opção | ESC = Sair para o DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Bem vindo ao SvarDOS
1.1:Por favor selecione seu idioma preferido na lista abaixo:
1.5:O SvarDOS suporta diferentes layouts de teclado. Escolha o layout de teclado desejado:
 
### WELCOME SCREEN ###
2.0:Você está pronto para instalar o SvarDOS: um sistema operacional livre, gratuito, compatível com o MS-DOS, e baseado no FreeDOS. O SvarDOS vem com uma variedade de aplicações de terceiros.\n\nALERTA: Se seu PC tiver outro sistema operacional instalado, pode ser que não seja mais possível iniciar por ele quando o SvarDOS for instalado.
 
### DISK SETUP ###
3.0:ERRO: O drive %c: não foi encontrado. Talvez seu disco rígido precise ser particionado primeiro. Por favor, crie pelo menos uma partição primária no seu disco rígido, assim o SvarDOS poderá ser instalado nele. Note que o SvarDOS requer pelo menos %d MiB de epaço em disco disponível.\n\nVocê pode usar a ferramenta de particionamento FDISK para criar a partição necessária manualmente, ou pode deixar o instalador criar a partição automaticamente. Você também pode abortar a instalação para usar o gerenciador de partições de sua escolha.
3.1:Seu computador irá reiniciar agora.
3.2:ERRO: O drive %c: é um dispositivo removível. Instalação abortada.
3.3:ERRO: O drive %c: aparenta não estar formatado.
3.4:ERRO: O drive %c: não tem espaçoo suficiente! O SvarDOS requer um disco de pelo menos %d MiB.
3.5:ERRO: O drive %c: não está vazio. O SvarDOS deve ser instalado em um disco vazio.\n\nVocê pode formatar o disco agora, para torná-lo vazio. Note contudo que ISSO IRÁ APAGAR TODOS OS DADOS ATUAIS no seu disco.
3.6:A instalação do SvarDOS em %c: está pronta para começar.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Instalando pacote %d/%d: %s
4.1:*** INSIRA O DISCO QUE CONTÉM O ARQUIVO NECESSÁRIO E PRESSIONE QUALQUER TECLA ***
 
### END SCREEN ###
5.0:Seu computador irá reiniciar agora.
5.1:Por favor remova o disco de instalação do drive.
5.2:A instalação do SvarDOS terminou. Por favor reinicie seu computador agora.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Bem vindo ao SvarDOS! Digite 'HELP' se precisar de ajuda.
/install/tags/20240130/nls/de_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: German
# Translator: Jörg Jenderek, Robert Riebisch
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:SVARDOS-INSTALLATION
0.1:SvarDOS installieren
0.2:Zurück zu DOS
0.3:Erstelle eine Partition automatisch
0.4:Partitionierungswerkzeug FDISK ausführen
0.5:Drücken Sie eine beliebige Taste...
0.7:Laufwerk %c: formatieren
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Hoch/Runter=Eintrag wählen | Enter=Bestätigen | ESC=Vorheriger Bildschirm
0.11:Hoch/Runter=Eintrag wählen | Enter=Bestätigen | ESC=Zurück zu DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Willkommen bei SvarDOS
1.1:Bitte wählen Sie Ihre bevorzugte Sprache aus der folgenden Liste:
1.5:SvarDOS unterstützt verschiedene Tastaturlayouts. Wählen Sie das gewünschte Tastaturlayout aus.
 
### WELCOME SCREEN ###
2.0:Sie sind dabei, SvarDOS zu installieren: ein freies und quelloffenes, MS-DOS-kompatibles Betriebssystem basierend auf FreeDOS. SvarDOS kommt mit einer Vielzahl von Anwendungen von Drittanbietern.\n\nWARNUNG: Wenn auf Ihrem PC bereits ein anderes Betriebssystem installiert ist, startet dieses möglicherweise nicht mehr, sobald SvarDOS installiert ist.
 
### DISK SETUP ###
3.0:FEHLER: Laufwerk %c: konnte nicht gefunden werden. Vielleicht muss die Festplatte zuerst partitioniert werden. Bitte erstellen Sie mindestens eine primäre Partition auf Ihrer Festplatte, so dass SvarDOS darauf installiert werden kann. Beachten Sie, dass SvarDOS mindestens %d MiB des verfügbaren Speicherplatzes benötigt.\n\nSie können das Partitionierungswerkzeug FDISK verwenden, um die erforderliche Partition manuell zu erstellen, oder Sie können das Installationsprogramm die Festplatte automatisch partitionieren lassen. Sie können auch die Installation abbrechen, um einen anderen Partitionsmanager Ihrer Wahl zu verwenden.
3.1:Ihr Computer wird jetzt neu gestartet.
3.2:FEHLER: Laufwerk %c: ist ein Wechseldatenträger. Installation abgebrochen.
3.3:FEHLER: Laufwerk %c: scheint unformatiert zu sein.
3.4:FEHLER: Laufwerk %c: ist nicht groß genug! SvarDOS benötigt mindestens %d MiB.
3.5:FEHLER: Laufwerk %c: ist nicht leer. SvarDOS muss auf einem leeren Datenträger installiert werden.\n\nSie können den Datenträger jetzt formatieren, um ihn zu leeren. Beachten Sie jedoch, dass dies ALLE AKTUELLEN DATEN auf Ihrer Festplatte löscht.
3.6:Die Installation von SvarDOS auf Laufwerk %c: beginnt nun.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Installiere Paket %d von %d: %s
4.1:*** LEGEN SIE DIE NÄCHSTE DISKETTE EIN UND DRÜCKEN SIE EINE BELIEBIGE TASTE ***
 
### END SCREEN ###
5.0:Ihr Computer wird jetzt neu gestartet.
5.1:Bitte entfernen Sie den Installationsdatenträger.
5.2:SvarDOS (Build %s) wurde installiert. Starten Sie Ihren Computer neu.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Willkommen bei SvarDOS! Geben Sie 'HELP' ein, wenn Sie Hilfe benötigen.
/install/tags/20240130/nls/en_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: English
# Translator: Mateusz Viste
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:SVARDOS INSTALLATION
0.1:Install SvarDOS
0.2:Quit to DOS
0.3:Create a partition automatically
0.4:Run the FDISK partitioning tool
0.5:Press any key...
0.7:Format drive %c:
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Up/Down = Select entry | Enter = Confirm choice | ESC = Previous screen
0.11:Up/Down = Select entry | Enter = Confirm choice | ESC = Quit to DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Welcome to SvarDOS
1.1:Please select your preferred language from the list below:
1.5:SvarDOS supports different keyboard layouts. Choose the keyboard layout that you want.
 
### WELCOME SCREEN ###
2.0:You are about to install SvarDOS: a free, MS-DOS compatible operating system based on FreeDOS. SvarDOS comes with a variety of third-party applications.\n\nWARNING: If your PC has another operating system installed, this other system might be unable to boot once SvarDOS is installed.
 
### DISK SETUP ###
3.0:ERROR: Drive %c: could not be found. Perhaps your hard disk needs to be partitioned first. Please create at least one primary partition on your hard disk, so SvarDOS can be installed on it. Note, that SvarDOS requires at least %d MiB of available disk space.\n\nYou can use the FDISK partitioning tool for creating the required partition manually, or you can let the installer partitioning your disk automatically. You can also abort the installation to use any other partition manager of your choice.
3.1:Your computer will reboot now.
3.2:ERROR: Drive %c: is a removable device. Installation aborted.
3.3:ERROR: Drive %c: seems to be unformated.
3.4:ERROR: Drive %c: is not big enough! SvarDOS requires a disk of at least %d MiB.
3.5:ERROR: Drive %c: is not empty. SvarDOS must be installed on an empty disk.\n\nYou can format the disk now, to make it empty. Note however, that this will ERASE ALL CURRENT DATA on your disk.
3.6:The installation of SvarDOS to %c: is about to begin.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Installing package %d/%d: %s
4.1:*** INSERT THE NEXT FLOPPY DISK AND PRESS ANY KEY ***
 
### END SCREEN ###
5.0:Your computer will reboot now.
5.1:Please remove the installation disk from your drive.
5.2:SvarDOS (build %s) has been installed. Restart your computer now.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Welcome to SvarDOS! Type 'HELP' if you need help.
/install/tags/20240130/nls/fr_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: French
# Translator: anonymous
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:INSTALLATION DE SVARDOS
0.1:Installer SvarDOS
0.2:Quitter vers DOS
0.3:Créer une partition automatiquement
0.4:Exécuter l'outil de partitionnement FDISK
0.5:Appuyez sur une touche quelconque...
0.7:Formattage du lecteur %c:
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Haut/Bas = Choisir l'élément | Entrée = Valider | Échap = Écran précédent
0.11:Haut/Bas = Choisir l'élément | Entrée = Valider | Échap = Quitter vers DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Bienvenue sur SvarDOS
1.1:Veuillez choisir votre langue sur la liste ci-dessous :
1.5:SvarDOS prend en charge différents claviers. Choisissez le clavier que vous préférez.
 
### WELCOME SCREEN ###
2.0:Vous êtes sur le point d'installer SvarDOS : un système d'exploitation libre, compatible avec MS-DOS et basé sur le noyau FreeDOS. SvarDOS offre une multitude d'applications tierces.\n\nATTENTION : s'il y a un autre système d'exploitation installé sur votre PC, cet autre système pourrait ne plus démarrer une fois que SvarDOS sera installé.
 
### DISK SETUP ###
3.0:ERREUR: le lecteur %c: n'a pu être trouvé. Peut-être que votre disque a d'abord besoin d'être partitionné. Veuillez créer au moins une partition sur votre disque dur pour que SvarDOS puisse y être installé. Notez que SvarDOS nécessite au moins %d Mio d'espace disque disponible.\n\nVous pouvez utiliser l'outil de partitionnement FDISK pour créer manuellement la partition nécessaire, ou bien vous pouvez laisser l'installeur partitionner votre disque automatiquement. Vous pouvez aussi annuler l'installation pour utiliser un autre outil.
3.1:Votre ordinateur va maintenant redémarrer.
3.2:ERREUR: le lecteur %c: est un périphérique amovible. Installation annulée.
3.3:ERREUR: le lecteur %c: ne semble pas être formaté.
3.4:ERREUR: le lecteur %c: n'a pas assez d'espace ! SvarDOS nécessite un disque d'au moins %d Mio.
3.5:ERREUR: le lecteur %c: n'est pas vide. SvarDOS doit être installé sur un disque vide.\n\nVous pouvez formater le disque maintenant afin de le vider. Veuillez noter cependant que cela EFFACERA TOUTES LES DONNÉES ACTUELLES de votre disque.
3.6:L'installation de SvarDOS sur %c: est sur le point de commencer.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Installation du paquet %d/%d: %s
4.1:*** INSEREZ LA DISQUETTE SUIVANTE ET APPUYEZ SUR UNE TOUCHE ***
 
### END SCREEN ###
5.0:Votre ordinateur va maintenant redémarrer.
5.1:Veuillez enlever le disque d'installation de votre lecteur.
5.2:SvarDOS (build %s) est installé. Veuillez redémarrer votre ordinateur.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Bienvenue sur SvarDOS ! Tapez 'HELP' si vous avez besoin d'aide.
/install/tags/20240130/nls/it_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: Italian
# Codepage..: 850/858/437
# Translator: Roberto Mariottini
# Revision..: 2
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:INSTALLAZIONE DI SVARDOS
0.1:Installa SvarDOS
0.2:Esci al DOS
0.3:Crea automaticamente una partizione
0.4:Esegui lo strumento di partizionamento FDISK
0.5:Premi un tasto...
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Su/Giù = Seleziona | Invio = Conferma la scelta | ESC = Precedente
0.11:Su/Giù = Seleziona | Invio = Conferma la scelta | ESC = Esci al DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Benvenuto in SvarDOS
1.1:Seleziona la lingua desiderata dalla lista seguente:
1.5:SvarDOS supporta le tastiere usate in paesi differenti. Scegli la tastiera che stai usando.
 
### WELCOME SCREEN ###
2.0:Stai per installare SvarDOS: un sistema operativo libero, compatibile con MSDOS, basato sul kernel di FreeDOS. SvarDOS include una varietà di applicazioni di terze parti.\n\nATTENZIONE: Se il tuo PC ha già un altro sistema operativo installato, l'altro sistema operativo potrebbe non essere in grado di ripartire dopo aver installato SvarDOS.
 
### DISK SETUP ###
3.0:ERRORE: L'unità %c: non è stata trovata. Forse perché l'hard disk deve essere prima partizionato. Occorre creare almeno una partizione sull'hard disk per poterci installare SvarDOS. Notare che SvarDOS richiede almeno %d MiB di spazio libero su disco.\n\nPuoi usare lo strumento di partizionamento FDISK per creare la partizione manualmente, o lasciare che il programma di installazione partizioni il disco automaticamente. Puoi anche annullare l'installazione per usare lo strumento di partizionamento che preferisci.
3.1:Il computer sarà ora riavviato.
3.2:ERRORE: L'unità %c: è un disco rimovibile. Installazione annullata.
3.3:ERRORE: L'unità %c: non sembra essere formattata.
3.4:ERRORE: L'unità %c: non è abbastanza capiente! SvarDOS richiede un disco di almeno %d MiB.
3.5:ERRORE: L'unità %c: non è vuota. SvarDOS deve essere installato su un disco vuoto.\n\nPuoi formattare il disco adesso, per svuotarlo. Nota che questa operazione CANCELLERA' TUTTI I DATI presenti sul disco.
3.6:L'installazione di SvarDOS in %c: sta per cominciare.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Installazione del pacchetto %d/%d: %s
 
### END SCREEN ###
5.0:Il computer sarà riavviato.
5.1:Rimuovere il disco di installazione dall'unità.
5.2:L'installazione di SvarDOS (build %s) è terminata. Restart your computer now.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Benvenuto in SvarDOS! Scrivi 'HELP' se hai bisogno di aiuto.
/install/tags/20240130/nls/pl_utf8.txt
0,0 → 1,48
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: Polish
# Translator: Mateusz Viste
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:INSTALACJA SVARDOS
0.1:Instaluj SvarDOS
0.2:Wyjdź do DOS
0.3:Stwórz partycję automatycznie
0.4:Uruchom narzędzie partycjonowania FDISK
0.5:Naciśnij dowolny klawisz...
0.7:Formatuj dysk %c:
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Góra/Dół = Wybór pozycji | Enter = Zatwierdź wybór | ESC = Poprzedni ekran
0.11:Góra/Dół = Wybór pozycji | Enter = Zatwierdź wybór | ESC = Wyjdź do DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Witaj w systemie SvarDOS
1.1:Wybierz swój język z poniższej listy:
1.5:SvarDOS wspiera różne układy klawiatury. Wybierz układ, który ci odpowiada.
 
### WELCOME SCREEN ###
2.0:Za chwilę rozpocznie się instalacja systemu SvarDOS: bezpłatnego systemu operacyjnego opartego na jądrze FreeDOS, i kompatybilnego z MSDOS. SvarDOS zawiera mnóstwo aplikacji dodatkowych.\n\nUWAGA: Jeśli twój komputer posiada już inny system operacyjny, system ten może nie zdołać uruchomić się po instalacji SvarDOS.
 
### DISK SETUP ###
3.0:BŁĄD: Nie wykryto dysku %c:. Być może twój dysk powinien zostać najpierw spartycjonowany. Utwórz co najmniej jedną partycję na twoim dysku, aby SvarDOS mógł zostać na nią zainstalowany. SvarDOS wymaga co najmniej %d MiB miejsca.\n\nMożesz skorzystać z narzędzia FDISK aby stworzyć wymaganą partycję ręcznie, lub pozwolić instalatorowi stworzyć ją automatycznie. Możesz także wstrzymać instalację aby użyć jakiegokolwiek innego narzędzia do partycjonowania.
3.1:Twój komputer zostanie teraz uruchomiony ponownie.
3.2:BŁĄD: Dysk %c: jest nośnikiem wymiennym. Instalacja zatrzymana.
3.3:BŁĄD: Dysk %c: zdaje się nie być sformatowany.
3.4:BŁĄD: Dysk %c: jest za mały! SvarDOS wymaga co najmniej %d MiB miejsca.
3.5:BŁĄD: Dysk %c: nie jest pusty. SvarDOS może być zainstalowany wyłącznie na pustym dysku.\n\nMożesz sformatować dysk teraz, aby go opróżnić. Operacja ta sprawi jednak że WSZYSTKIE OBECNE DANE ZOSTANĄ UTRACONE.
3.6:Za chwilę rozpocznie się instalacja systemu SvarDOS na dysk %c:.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Instalacja pakietu %d/%d: %s
4.1:*** WŁÓŻ NASTĘPNĄ DYSKIETKĘ I NACIŚNIJ DOWOLNY KLAWISZ ***
 
### END SCREEN ###
5.0:Twój komputer zostanie teraz uruchomiony ponownie.
5.1:Wyjmij dysk instalacyjny z napędu.
5.2:SvarDOS (build %s) został zainstalowany. Zrestartuj teraz komputer.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Witaj w systemie SvarDOS! Wpisz 'HELP' jeśli potrzebujesz pomocy.
/install/tags/20240130/nls/ru_utf8.txt
0,0 → 1,47
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: Russian
# Translator: Mateusz Viste
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:УСТАНОВКА SVARDOS
0.1:Установить SvarDOS
0.2:Выход в DOS
0.3:Создание раздела автоматически
0.4:Запуск FDISK
0.5:Нажмите любую кнопку...
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Вверх/вниз = выбор входа | Enter = Подтвердить выбор | ESC = Предыдущий экран
0.11:Вверх/вниз = выбор входа | Enter = Подтвердить выбор | ESC = Выход в DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Добро пожаловать в SvarDOS
1.1:Пожалуйста, выберите язык из списка ниже:
1.5:SvarDOS поддерживает раскладки клавиатуры. Выберите раскладки клавиатуры вы хотите.
 
### WELCOME SCREEN ###
2.0:Вы собираетесь установить SvarDOS: свободный, MSDOS-совместимая операционная система, основанная на ядре FreeDOS. SvarDOS поставляется с множеством сторонних пакетов.\n\nВНИМАНИЕ: Если ваш компьютер имеет другую операционную систему, это другая система может оказаться не в состоянии загрузиться после установки SvarDOS.
 
### DISK SETUP ###
3.0:ОШИБКА: Диск %c: не может быть найден. Возможно, ваш диск должен первый быть разбит на разделы. Пожалуйста, создайте по крайней мере один раздел на диске, поэтому SvarDOS может быть установлен на нем. Обратите внимание, что SvarDOS требует по крайней мере %d МиБ свободного места на диске.\n\nВы можете использовать FDISK для создания требуемого раздела вручную, или вы можете позволить программе установки разбиения вашего диска автоматически. Вы также можете отменить установку использовать любой другой менеджер разделов по вашему выбору.
3.1:Ваш компьютер будет сейчас перезагружен.
3.2:ОШИБКА: Диск %c: является съемным. Установка прервана.
3.3:ОШИБКА: Диск %c:, кажется, не отформатирован.
3.4:ОШИБКА: Диск %c: слишком мал! SvarDOS требует диск не менее %d МиБ.
3.5:ОШИБКА: Диск %c: не является пустым. SvarDOS должен быть установлен на пустой диск.\n\nВы можете отформатировать диск сейчас, чтобы сделать его пустым. Отметим, однако, что это приведет к УДАЛЕНИЮ ВСЕХ ДАННЫХ на жестком диске.
3.6:Установка SvarDOS до %c: вот-вот начнется.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Установка пакета %d/%d: %s
4.1:*** ВСТАВЬТЕ СЛЕДУЮЩУЮ ДИСКЕТУ И НАЖМИТЕ ЛЮБУЮ КЛАВИШУ ***
 
### END SCREEN ###
5.0:Ваш компьютер будет сейчас перезагружен.
5.1:Пожалуйста, удалите установочный диск из дисковода.
5.2:SvarDOS (build %s) установлен. Перезагрузите компьютер.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Добро пожаловать в SvarDOS! Введите слово "HELP", если вам нужна помощь.
/install/tags/20240130/nls/si_utf8.txt
0,0 → 1,46
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language..: Slovene
# Translator: Matej Horvat
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:NAMESTITEV SVARDOS
0.1:Namesti SvarDOS
0.2:Izhod v DOS
0.3:Samodejno ustvari particijo
0.4:Zaženi program za particioniranje FDISK
0.5:Pritisnite tipko...
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Gor/dol = izbira | Enter = potrdi izbiro | Esc = prejšnji zaslon
0.11:Gor/dol = izbira | Enter = potrdi izbiro | Esc = izhod v DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:Dobrodošli v SvarDOS!
1.1:Izberite svoj jezik s spodnjega seznama:
1.5:SvarDOS podpira razporede tipkovnic več držav. Izberite, katerega želite uporabljati.
 
### WELCOME SCREEN ###
2.0:Ta program bo namestil SvarDOS - brezplačen in odprtokoden operacijski sistem, združljiv z MS-DOS, ki uporablja jedro projekta FreeDOS. SvarDOS vključuje veliko aplikacij tretjih oseb.\n\nOPOZORILO: Če ima računalnik že nameščen operacijski sistem, tega morda ne bo več mogoče zagnati, ko boste namestili SvarDOS.
 
### DISK SETUP ###
3.0:NAPAKA: Pogon %c: ni bil najden. Morda je treba najprej ustvariti particijo na trdem disku. Prosimo, ustvarite vsaj eno particijo, da lahko namestite SvarDOS. Velika mora biti vsaj %d MB.\n\nUstvarite jo lahko sami s programom FDISK, lahko pa jo program za namestitev ustvari samodejno. Namestitev lahko tudi prekinete in uporabite svoj program za particioniranje.
3.1:Računalnik se bo zdaj ponovno zagnal.
3.2:NAPAKA: Pogon %c: je odstranljiv medij. Namestitev bo prekinjena.
3.3:NAPAKA: Pogon %c: ni formatiran.
3.4:NAPAKA: Pogon %c: je premajhen. SvarDOS zahteva vsaj %d MB prostora.
3.5:NAPAKA: Pogon %c: ni prazen. SvarDOS mora biti nameščen na prazen pogon.\n\nLahko ga formatirate in s tem izpraznite, vendar bo to IZBRISALO VSE PODATKE na njem.
3.6:Namestitev operacijskega sistema SvarDOS na pogon %c: se bo začela.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Nameščanje paketa %d/%d: %s
 
### END SCREEN ###
5.0:Računalnik se bo zdaj ponovno zagnal.
5.1:Prosimo, odstranite namestitveni medij.
5.2:SvarDOS (build %s) je nameščen. Restart your computer now.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:Dobrodošli v SvarDOS! Če potrebujete pomoč, vtipkajte HELP.
/install/tags/20240130/nls/sv_utf8.txt
0,0 → 1,81
#
# This is a localization file for the SvarDOS INSTALL program
# Detta är en localiseringsfil för SvarDOSs INSTALLprogram
#
# Language..: Swedish
# Translator: Martin Strömberg
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
### GEMENSAMMA SAKER: TITLE-BAR AND MULTIPLA-VALSTRÄNGAR ###
#0.0:SVARDOS INSTALLATION
0.0:SVARDOS INSTALLATION
#0.1:Install SvarDOS
0.1:Installera SvarDOS
#0.2:Quit to DOS
0.2:Avsluta till DOS
#0.3:Create a partition automatically
0.3:Skapa en partition automatiskt
#0.4:Run the FDISK partitioning tool
0.4:Kör FDISK-partitioneringsverktyget
#0.5:Press any key...
0.5:Tryck på en tangent...
# Every string below must be at most 78 characters long! (used in status bar)
# Varje sträng nedan måste vara som mest 78 bokstäver lång (används i statusbaren)
#0.10:Up/Down = Select entry | Enter = Confirm choice | ESC = Previous screen
0.10:Upp/Ner = Välj rad | Enter = Bekräfta val | ESC = Föregående skärm
#0.11:Up/Down = Select entry | Enter = Confirm choice | ESC = Quit to DOS
0.11:Up/Down = Välj rad | Enter = Bekräfta val | ESC = Avsluta till DOS
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
### SPRÅKVAL & TANGENTBORDSLAYOUTSKÄRMAR ###
#1.0:Welcome to SvarDOS
1.0:Välkommen till SvarDOS
#1.1:Please select your preferred language from the list below:
1.1:Vänligen välj språket du vill använda från listan nedan:
#1.5:SvarDOS supports different keyboard layouts. Choose the keyboard layout that you want.
1.5:SvarDOS stödjer olika tangentbordslayouter. Välj tangentbordslayouten som du vill ha.
 
### WELCOME SCREEN ###
### VÄLKOMSTSKÄRM ###
#2.0:You are about to install SvarDOS: a free, MS-DOS compatible operating system based on FreeDOS. SvarDOS comes with a variety of third-party applications.\n\nWARNING: If your PC has another operating system installed, this other system might be unable to boot once SvarDOS is installed.
2.0:Du ska just till att installera SvarDOS: ett fritt, MS-DOS-kompatibelt operativsystem baserat på FreeDOS. SvarDOS kommer med en samling olika tredjepartsapplikationer.\n\nVARNING: Om din PC har ett annat operativsystem intstallerat, kanske detta andra system inte kan boota när väl SvarDOS har installerats.
 
### DISK SETUP ###
### DISKSETUP ###
#3.0:ERROR: Drive %c: could not be found. Perhaps your hard disk needs to be partitioned first. Please create at least one primary partition on your hard disk, so SvarDOS can be installed on it. Note, that SvarDOS requires at least %d MiB of available disk space.\n\nYou can use the FDISK partitioning tool for creating the required partition manually, or you can let the installer partitioning your disk automatically. You can also abort the installation to use any other partition manager of your choice.
3.0:FEL: Enhet %c: kunde inte hittas. Kanske din hårddisk behöver partitioneras först. Vänligen skapa minst en primär partition på din hårddisk, så SvarDOS kan installeras på den. N.B. att SvarDOS behöver minst %d MiB ledigt diskutrymme.\n\nDu kan använda FDISK-partitioneringsverktyget för att skapa den nödvändiga partitionen manuellt, eller så kan du låta installationsprogrammet partitioner din disk automatiskt. Du kan också avbryta installationen för att använda en annan valfri partitionsmanager.
#3.1:Your computer will reboot now.
3.1:Din dator kommer att boota om nu.
#3.2:ERROR: Drive %c: is a removable device. Installation aborted.
3.2:FEL: Enhet %c: är ett removable device. Installationen avbryts.
#3.3:ERROR: Drive %c: seems to be unformated. Do you wish to format it?
3.3:FEL: Enhet %c: verkar vara oformaterad.
#3.4:ERROR: Drive %c: is not big enough! SvarDOS requires a disk of at least %d MiB.
3.4:FEL: Enhet %c: är inte tillräckligt stor! SvarDOS behöver en disk som är minst %d MiB.
#3.5:ERROR: Drive %c: is not empty. SvarDOS must be installed on an empty disk.\n\nYou can format the disk now, to make it empty. Note however, that this will ERASE ALL CURRENT DATA on your disk.
3.5:FEL: Enhet %c: är inte tom. SvarDOS måste installeras på en tom disk.\n\nDu kan formatera disken nu, för att tömma den. N.B. detta kommer att RADERA ALLT NUVARANDE DATA på din disk.
#3.6:The installation of SvarDOS to %c: is about to begin.
3.6:Installationen av SvarDOS till %c: ska just börja.
 
### PACKAGES INSTALLATION ###
### PAKETINSTALLATION ###
# example: "Installing package 4/50: FDISK"
# exempel: "Installerar paketet 4/50: FDISK"
#4.0:Installing package %d/%d: %s
4.0:Installerar paketet %d/%d: %s
 
### END SCREEN ###
### AVSLUTNINGSSKÄRM ###
#(5.0:SvarDOS installation is over. Your computer will reboot now.\nPlease remove the installation disk from your drive.)
#5.0:Your computer will reboot now.
5.0:Din dator kommer att reboota nu.
#5.1Please make sure to remove the installation media.
5.1:Vänligen se till att ta bort installationsmediet.
#5.2:SvarDOS installation is over. Please restart your computer now.
5.2:SvarDOS-installationen (build %s) är klar. Restart your computer now.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
### LOGINVÄLKOMSTTEXT NÄR SYSTEMET ÄR INSTALLERAT ###
#6.0:Welcome to SvarDOS! Type 'HELP' if you need help.
6.0:Välkommen till SvarDOS! Skriv 'HELP' om du behöver hjälp.
/install/tags/20240130/nls/tr_utf8.txt
0,0 → 1,46
#
# This is a localization file for the SvarDOS INSTALL program
#
# Language...: Turkish
# Translators: Thraex (2016), Berki Yenigün (2023)
#
 
### COMMON STUFF: TITLE BAR AND MULTIPLE CHOICE STRINGS ###
0.0:SVARDOS KURULUMU
0.1:SvarDOS'ı kur
0.2:DOS'a çık
0.3:Disk bölümünü otomatik olarak oluştur
0.4:FDISK disk bölümü oluşturma aracını çalıştır
0.5:Herhangi bir tuşa basın...
# Every string below must be at most 78 characters long! (used in status bar)
0.10:Yukarı/Aşağı = Unsur seç | Enter = Seçimi doğrula | ESC = Önceki ekran
0.11:Yukarı/Aşağı = Unsur seç | Enter = Seçimi doğrula | ESC = Dos'a çık
 
### LANGUAGE SELECTION & KEYBOARD LAYOUT SCREENS ###
1.0:SvarDOS'a hoş geldiniz
1.1:Dilinizi aşağıdaki listeden seçiniz:
1.5:SvarDOS değişik ülkelerde kullanılan klavye düzenlerini destekler. İstediğiniz klavye düzenini seçiniz.
 
### WELCOME SCREEN ###
2.0:FreeDOS çekirdeğine dayalı, ücretsiz ve MS-DOS uyumlu bir işletim sistemi olan SvarDOS'ı kurmak üzeresiniz. SvarDOS çeşitli üçüncü parti uygulamaları sunar.\n\nİKAZ: Eğer PC'nizde başka bir işletim sistemi kuruluysa, bu sistem SvarDOS kurulduktan sonra başlamayabilir.
 
### DISK SETUP ###
3.0:HATA: %c: sürücüsü bulunamadı. Belki sabit diskinizde önce bölüm oluşturmanız gerekmektedir. Lütfen sabit diskinizde en az bir bölüm oluşturun ki SvarDOS o bölüme kurulabilsin. SvarDOS'ın en az %d MiB disk alanına ihtiyaç duyduğunu unutmayın.\n\nGerekli bölümü elle oluşturmak için FDISK bölüm oluşturma aracını kullanabilir ya da kurulumun diskinizde otomatik olarak bölüm oluşturmasına izin verebilirsiniz. Başka bir bölüm yöneticisi kullanmak için kurulumu iptal de edebilirsiniz.
3.1:Bilgisayarınız şimdi yeniden başlayacaktır.
3.2:HATA: %c: sürücüsü çıkarılabilir bir cihazdır. Kurulum iptal edilmiştir.
3.3:HATA: %c: biçimlendirilmemiş gözükmektedir.
3.4:HATA: %c: sürücüsü yeteri kadar büyük değildir! SvarDOS en az %d MiB boyutunda bir diske ihtiyaç duyar.
3.5:HATA: %c: sürücüsü boş değildir. SvarDOS, boş bir diske kurulmalıdır.\n\nDiski boşaltmak için şimdi biçimlendirebilirsiniz. Bununla beraber, bunun diskinizdeki TÜM GÜNCEL VERİLERİ SİLECEĞİNİ unutmayınız.
3.6:SvarDOS'ın %c: sürücüsüne kurulumu başlamak üzeredir.
 
### PACKAGES INSTALLATION ###
# example: "Installing package 4/50: FDISK"
4.0:Şu paket kuruluyor: %d/%d: %s
 
### END SCREEN ###
5.0:Bilgisayarınız şimdi yeniden başlayacaktır.
5.1:Lütfen kurulum diskini sürücünüzden çıkarın.
5.2:SvarDOS (derleme %s) kurulumu sona ermiştir. Bilgisayarınızı şimdi tekrar başlatın.
 
### LOG IN WELCOME TEXT ONCE SYSTEM IS INSTALLED ###
6.0:SvarDOS'a hoş geldiniz! Yardıma ihtiyacınız varsa 'HELP' yazınız.
/install/tags/20240130/svarlang.lib
0,0 → 1,0
link ../../svarlang.lib/tags/20230730
Property changes:
Added: svn:special
+*
\ No newline at end of property