LINUX.ORG.RU

Сообщения Den_Zurin

 

Язык Оберон

А есть ли здесь любители этого языка, написанной на нем операционной системы и других технологий гениального Никлауса Вирта?

 , ,

Den_Zurin ()

Pattern matching на чистом Си

Попробовал сделать алгебраический тип данных и pattern matching на чистом C без плюсов, как оказалось, это таки довольно просто: https://ideone.com/y3LQKb

Есть предложения, что можно здесь изменить/улучшить?

Можно ли совместить его с ООП? Видимо, тогда вместо enum для определения варианта надо сделать указатель на VMT?

Это нужно для собственного языка, в текущей версии компилятор переводит его в C код.

 

Den_Zurin ()

Саратовец получил полтора года за перепрошивку Xbox 360

Сабж: https://geektimes.ru/post/276332/

Понравился комментарий Shiover:

Прекрасно вообще живётся Microsoft — как принять ответственность за программный продукт и за его работу, так нифига. А как только кто-то начинает изменять программное обеспечение, так пожалуйте в суд.

 , ,

Den_Zurin ()

Динамическая кодогенерация на Си

Хочу добавить JIT в свой интерпретатор скриптового языка. Проблема в том, что на x86 данные в памяти могут быть доступны только либо для записи, либо для выполнения. Т.е. если записать в массив байты (опкоды машинных инструкций с RET в конце), то вызвать его как функцию уже нельзя. Погуглив, нашел, что в виртуальных машинах, упаковщиках, протекторах и т.п. используется такая схема: сначала сгенерированные опкоды записываются в стек, а стек уже может быть вызван как функция. Написал такой код:

#include <stdio.h>

#define MAX_CODE_SIZE 65536

typedef int (*FN_CALLBACK)();

int invoke(int size, unsigned char *source)
{
	unsigned char buffer[MAX_CODE_SIZE];
	register unsigned char *src;
	register unsigned char *dest;
	unsigned char *limit;
	if (size <= 0 || size >= MAX_CODE_SIZE)
		return 0;
	src = source;
	dest = buffer;
	limit = buffer + size;
	while (dest < limit)
		*dest++ = *src++;
	return ((FN_CALLBACK)((void*)buffer))();
}

unsigned char prog[] = {
	0x31, 0xC0, // xor eax, eax
	0x40,       // inc eax
	0x40,       // inc eax
	0xC3        // ret
};

int main(int argc, char *argv[])
{
	int r;
	r = invoke(5, prog);
	printf("Result: %d\n", r);
	return 0;
}
Он успешно компилируется GCC, при запуске выводит 2. Вопрос в том, будет ли такой код кроссплатформенным (на x86)? У меня в Ubuntu и Windows 7 он работает, но как будет на других ОС? Везде ли можно выполнять команды из стека?

 , ,

Den_Zurin ()

Помогите с EJB под WildFly

Собрал и задеплоил war на WildFly, но в клиенте выдает ошибку No EJB receiver available for handling [appName:EJBCalc, moduleName:EJBCalc, distinctName: ] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1057305

Код сервера:

package ru.dvach.calculator;
 
import javax.ejb.Remote;
 
@Remote
public interface CalculatorBeanRemote {
	public int summ(int x, int y);
}

package ru.dvach.calculator;
 
import javax.ejb.Stateless;
 
/**
 * Session Bean implementation class CalculatorBean
 */
@Stateless
public class CalculatorBean implements CalculatorBeanRemote {
 
    /**
     * Default constructor. 
     */
    public CalculatorBean() {
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public int summ(int x, int y) {
    	return x + y;
    }
 
}

Код клиента:

package ru.dvach.calculator;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
public class Program {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			System.err.println("Init EJB context...");
			Context context = new InitialContext();
			System.err.println("Create CalculatorBean...");
			final String appName = "EJBCalc";
			final String moduleName = "EJBCalc";
			final String distinctName = "";
			final String beanName = CalculatorBean.class.getSimpleName();
			final String viewClassName = CalculatorBeanRemote.class.getName();
			final String contextString = String.format(
					"ejb:%1s/%2s/%3s/%4s!%5s",
					appName, moduleName, distinctName,
					beanName, viewClassName);
			CalculatorBeanRemote helloBean = (CalculatorBeanRemote)
					context.lookup(contextString);
			System.err.println("Call summ method...");
			System.out.println(helloBean.summ(2, 3));
			System.err.println("Done.");
		} catch (NamingException ex) {
			System.err.println("Exception: " + ex.getClass().getName());
			System.err.println(ex.getMessage());
		}
	}
 
}

Файл jndi.properties:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port =4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=admin
remote.connection.default.password=123
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
jboss.naming.client.ejb.context=true

Почему и что делать? Вроде все писал по манам.

 

Den_Zurin ()

Забанили в гугле

Вот такую штуку показывает Google, что делать?

http://rghost.ru/6pmwhSWCp.view

 ,

Den_Zurin ()

Зачем нужен язык Vala?

По какой причине разработчики GNOME создали свой язык вместо использования уже существующих D и Rust? Есть ли у Vala какие-либо преимущества перед этими языками?

 

Den_Zurin ()

Как отслеживать pull и clone?

Нужно отслеживать, кто забирает изменения из репозитория на сервере, т.е. информацию о всех успешно выполненных командах clone и pull. По умолчанию Mercurial при clone/pull не делает никаких записей в логе удаленного репозитория. Как это сделать?

 

Den_Zurin ()

Формат ZML

Зацените мой формат ZML (Zurin's Markup Language) как альтернативу XML.

Обозначения:

{a} - последовательность a, aa, aaa и т.д. (включая пустую)
[a] - необязательное наличие a
a|b|...|z - или a, или b, ..., или z
"text" - текст "text", вводимый без изменений (без кавычек)

Синтаксис:

LETTER ::= любая буква
CHAR ::= любой выводимый символ, начиная с пробела
SEP ::= пробел, табуляция или перевод строки
ENDTEXTLINE ::= {" "|"\t"} ">" {" "|"\t"}
TEXTLINE ::= любая последовательность CHAR, кроме ENDTEXTLINE
ENDCOMMENTLINE ::= {" "|"\t"} {CHAR} ">#" {" "|"\t"}
COMMENTLINE ::= любая последовательность CHAR, кроме ENDCOMMENTLINE
DIGIT ::= 0|1|2|3|4|5|6|7|8|9
HEXDIGIT ::= DIGIT|A|B|C|D|E|F|a|b|c|d|e|f
LETTERORDIGIT ::= LETTER|DIGIT
IDENTIFIER ::= LETTER {LETTERORDIGIT}
VDECNUM ::= ["-"] DIGIT {DIGIT}
VHEXNUM ::= "0x" HEXDIGIT {HEXDIGIT}
VFLOATNUM ::= ["-"] DIGIT {DIGIT} "." DIGIT {DIGIT}
VCHAR ::= "\'" ["\\"] CHAR "\'"
VSTRING ::= "\"" CHAR {CHAR} "\""
VBOOL ::= "+" | "-"
VENUM ::= IDENTIFIER
VTEXT ::= "<" "\n" [TEXTLINE {"\n" TEXTLINE}] "\n" ENDTEXTLINE
NODE ::= "{" {SEP} LINE {SEP {SEP} LINE} {SEP} "}"
VALUE ::= VDECNUM|VHEXNUM|VFLOATNUM|VCHAR|VSTRING|VBOOL|VENUM|VTEXT|NODE
ONELINECOMMENT ::= "# " {CHAR} "\n"
MUTLILINECOMMENT ::= "#<" [COMMENTLINE {"\n" COMMENTLINE}] ENDCOMMENTLINE
COMMENT ::= ONELINECOMMENT|MULTILINECOMMENT
LINE ::= [IDENTIFIER SEP {SEP} VALUE] [{SEP} COMMENT]
Файл ::= LINE {{SEP} LINE}

Несколько примеров.

Описание конфигурации:

sound + # звук включен
music - # музыка выключена
# графические настройки
screen {
  # ширина и высота экрана
  width 640
  height 480
  bpp 32 # бит/пиксель
  doublebuffer + # включена двойная буферизация
}

Описание формы:

# форма Form1
form {
  # имя
  name "Form1"
  # заголовок
  title "Main Form"
  # шрифт
  font {
    size 12 # 12 пунктов
    italic - # нет курсива
    bold - # не полужирный
  }
  color red # цвет
  # размеры
  width 400
  height 300
  # обработчики событий
  events {
    onclick "Form1_click"
    onclosing "Form1_closing"
    onpaint "Form1_paint"
  }
}

Описание дерева:

root {
  # корень "Root"
  # имеет ветви "Wise A", "Wise B" и "Wise C"
  name "Root"
  wise {
    # ветвь "Wise A"
    # имеет подветви "Wise A-1" и "Wise A-2"
    name "Wise A"
    wise {name "Wise A-1"}
    wise {name "Wise A-2"}
  }
  wise {
    # ветвь "Wise B"
    # имеет подветви "Wise B-1" и "Wise B-2"
    name "Wise B"
    wise {
      # ветвь "Wise B-1"
      # имеет подветви "Wise B-1-X" и "Wise B-1-Y"
      name "Wise B-1"
      wise {name "Wise B-1-X"}
      wise {name "Wise B-1-Y"}
    }
    wise {name "Wise B-2"}
  }
  wise {name "Wise C"}
}

Текстовые данные:

chapter {
  #< А это пример
      многострочного
      #< (кстати, он может быть вложенным) >#
      комментария. >#
  name "Глава 1"
  p <
    Первый абзац
    текста.
  >
  p <
    Второй абзац
    текста.
  >
}

Ваши предложения/критика?

Думаю, добавить еще массивы:

array [element1 element2 elementN]

PROFIT же от формата ZML очевиден:
1) компактность, меньше лишних символов => файлы занимают меньший размер
2) наглядность и читабельность для человека
3) неограниченная расширяемость
4) простота разбора

Den_Zurin ()

Восстановление исходника Си

Вот здесь есть исходник шахматной программы: http://prboom-plus.sourceforge.net/chess.txt

Но совсем нечитаемый. С помощью gcc -E удалось избавиться от макроопределений:

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

int v,w,Y= -1,W,J,p,F,o=9999,M,N,K,X,YY,_,P[9999],s(); typedef int(*L)(); L q[9999]; tj(){
int S=(v<0?-1:!!v)+((w<0?-1:!!w)<<K); if(!S)return J; for(v=W+S; v!=J&&!q[v]; v+=S); return v; } k(){ _=K; return
v?(v<0?-v:v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/ 2))||q[J];
} z(){ _=5; return v*w||tj()-J; } e(){ _= -2;
return(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } double VR(){ int PZ=0x7fff;
return(double)(rand()&PZ)/(double)PZ; } l(){ _=K+1; return(v*w&&(v<0?-v:v)-(w<0?-w:w))||tj()-J; } double UC(){ double i=0,d;
while((i+=d=VR())<1.0); return d; } c(){ _= -11; return (v<0?-v:v)-(w<0?-w:w)||tj()-J; } I(ur,n,x){ W=ur;
J=n; if(P[W]!=Y||P[J]==Y)return J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); return
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; return q[W]()+K; } s(){ int j= -1,i; Y= -Y;
for(i=0; i<M; ++i){ if(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } else
if(j>=0&&!I(i,j,0))return Y= -Y; } return!(Y= -Y); } bb(){ _=1; return (v*w<0?-v*w:v*w)-2; } uv(){
for(v=0; v<9999; ++v){ if(((v>>K)<=K?v>>K:N-(v>>K))==0){ int S=((v&N)<=K?v&N:N-(v&N));
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } else if(((v>>K)<=K?v>>K:N-(v>>K))==1)q[v]=k; else q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ int G=Y,i; J=0; for(i=0; i<M; ++i){
i%8||printf("\n%4o ",i); if((Y=P[i]=(P[i]<0?-1:!!P[i]))&& TT(i))printf("%c ",_+93+Y*16); else printf("- "); }
printf("\n    "); do printf("%2d",i++&N); while(i&N); Y=G; printf("\n"); } O(W,J){
if((q[J]=q[W])==k&&((J>>K)<=K?J>>K:N-(J>>K))==0)q[J]=l; if(q[W]==e)if(J-W==2)O(J+1,J-1); else
if(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { int
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; return YX; } C(){ int i,j,BZ=0; for(i=0; i<M; ++i){ L Z=q[i]; if(Z){ int
r=((i>>K)<=K?i>>K:N-(i>>K))+((i&N)<=K?i&N:N-(i&N)),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?9999 -r-r:36+r+r)))); Y=P[i]; for(j=0; j<M;
++j)if(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
if(!(++X&M-1))write(1,".",1); return BZ; } PX(){ int i,Q=0,XP=0,JZ=M*M,E= -9999,t,S=o;
if(!F--)return++F+C(); for(i=0; i<JZ; ++i)if(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; if(t>E){ ++XP; Q=i; E=t; if(E>=S) return++F,E; } }
if(!XP)E=s()?-9999 +1:0; p=Q; return++F,E; } RZ(){ int i,j,T=0; for(; ; ){ y(); o=9999; do{
printf("\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
while(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(K<<1); j=p&(M-1); if(I(i,j,1)){ printf("Rats!\n"); return; } O(i,j); Y= -Y;
if(T>M*M)printf("\nHar har.\n"); } } main(ac,av)char**av; { long time(),j=time(&j);
double i=0; srand((int)j); for(M=0; M<=9999; ++M)i+=UC(); M=i/100; if(M&3)++M; if(M&1)--M;
for(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }

Тем не менее, все равно еще невозможно прочесть. Можно ли как-нибудь отформатировать этот текст в стиле K&R, GNU etc?

Den_Zurin ()

Проблема с GLIBC

Камрады, помогите! Прямо не знаю, что делать!

В общем, у меня система ASP Linux 11.2 (т.к. комп 700 Mhz / 192 MB RAM, и новые версии на нем не пойдут).

Решил частично обновить ее, взяв пакеты glibc и libgcc из репозитория ASP Linux 14.

При установке пакетов произошла ошибка, и в результате полностью перестали работать менеджер RPM, архиватор GZIP, система документации man и несколько других программ, выдавая ошибку:

/lib/libc.so.6: version `GLIBC_2.4' not found

По-видимому, повредился файл libc.so.6. Я попробовал его восстановить из пакета glibc от ASP Linux 11. Но при копировании:

cp libc.so.6 /lib/libc.so.6

Внезапно система полностью отказала - только черный экран. Перезагрузился.

Теперь Linux вообще не грузится - Kernel Panic. Что делать?!

Помогите, пожалуйста! Подскажите, как восстановить работоспособность системы и glibc?

Den_Zurin ()

[денди] FCEUX тормозит при включенном звуке

У меня проблема с эмулятором FCEUX под Linux (ASP Linux). При выключенном звуке все работает нормально. Но как только включаю звук - сразу начинаются тормоза: изображение дергается, звук хрипит, ввод происходит с запаздыванием. Играть в результате невозможно. Используются следующие настройки: низкое качество звука, частота 11025, размер буфера 48 мс. Пробовал увеличивать размер буфера, но это не помогло. Вот полная конфигурация из файла .fceux/fceux.cfg:

# Auto-generated
SDL.Arkanoid.0.DeviceNum = 0
SDL.AutoScale = 1
SDL.BitsPerPixel = 32
SDL.ClipSides = 0
SDL.Color = 0
SDL.DisableSpriteLimit = 1
SDL.DoubleBuffering = 1
SDL.Frameskip = 0
SDL.Fullscreen = 1
SDL.GameGenie = 0
SDL.Hotkeys.BindState = 283
SDL.Hotkeys.CheatMenu = 282
SDL.Hotkeys.DecreaseSpeed = 45
SDL.Hotkeys.FrameAdvance = 92
SDL.Hotkeys.FrameAdvanceLagSkip = 287
SDL.Hotkeys.IncreaseSpeed = 61
SDL.Hotkeys.InputDisplay = 105
SDL.Hotkeys.LagCounterDisplay = 289
SDL.Hotkeys.LoadLua = 284
SDL.Hotkeys.LoadState = 288
SDL.Hotkeys.MovieToggleFrameDisplay = 290
SDL.Hotkeys.MovieToggleReadWrite = 113
SDL.Hotkeys.Pause = 19
SDL.Hotkeys.Quit = 27
SDL.Hotkeys.RenderBG = 285
SDL.Hotkeys.Reset = 292
SDL.Hotkeys.SaveState = 286
SDL.Hotkeys.Screenshot = 293
SDL.Hotkeys.SelectState0 = 48
SDL.Hotkeys.SelectState1 = 49
SDL.Hotkeys.SelectState2 = 50
SDL.Hotkeys.SelectState3 = 51
SDL.Hotkeys.SelectState4 = 52
SDL.Hotkeys.SelectState5 = 53
SDL.Hotkeys.SelectState6 = 54
SDL.Hotkeys.SelectState7 = 55
SDL.Hotkeys.SelectState8 = 56
SDL.Hotkeys.SelectState9 = 57
SDL.Hotkeys.SubtitleDisplay = 291
SDL.Hue = 72
SDL.Input.FTrainer.0 = 111
SDL.Input.FTrainer.1 = 112
SDL.Input.FTrainer.2 = 91
SDL.Input.FTrainer.3 = 93
SDL.Input.FTrainer.4 = 107
SDL.Input.FTrainer.5 = 108
SDL.Input.FTrainer.6 = 59
SDL.Input.FTrainer.7 = 39
SDL.Input.FTrainer.8 = 109
SDL.Input.FTrainer.9 = 44
SDL.Input.FTrainer.A = 46
SDL.Input.FTrainer.B = 47
SDL.Input.FTrainer.DeviceNum = 0
SDL.Input.FamilyKeyBoard.0 = 48
SDL.Input.FamilyKeyBoard.1 = 49
SDL.Input.FamilyKeyBoard.2 = 50
SDL.Input.FamilyKeyBoard.3 = 51
SDL.Input.FamilyKeyBoard.4 = 52
SDL.Input.FamilyKeyBoard.5 = 53
SDL.Input.FamilyKeyBoard.6 = 54
SDL.Input.FamilyKeyBoard.7 = 55
SDL.Input.FamilyKeyBoard.8 = 56
SDL.Input.FamilyKeyBoard.9 = 57
SDL.Input.FamilyKeyBoard.A = 97
SDL.Input.FamilyKeyBoard.APOSTROPHE = 39
SDL.Input.FamilyKeyBoard.B = 98
SDL.Input.FamilyKeyBoard.BACKSLASH = 92
SDL.Input.FamilyKeyBoard.BACKSPACE = 8
SDL.Input.FamilyKeyBoard.BRACKET_LEFT = 91
SDL.Input.FamilyKeyBoard.BRACKET_RIGHT = 93
SDL.Input.FamilyKeyBoard.C = 99
SDL.Input.FamilyKeyBoard.COMMA = 44
SDL.Input.FamilyKeyBoard.CURSORDOWN = 274
SDL.Input.FamilyKeyBoard.CURSORLEFT = 276
SDL.Input.FamilyKeyBoard.CURSORRIGHT = 275
SDL.Input.FamilyKeyBoard.CURSORUP = 273
SDL.Input.FamilyKeyBoard.D = 100
SDL.Input.FamilyKeyBoard.DELETE = 127
SDL.Input.FamilyKeyBoard.DeviceNum = 0
SDL.Input.FamilyKeyBoard.E = 101
SDL.Input.FamilyKeyBoard.END = 279
SDL.Input.FamilyKeyBoard.ENTER = 13
SDL.Input.FamilyKeyBoard.EQUAL = 61
SDL.Input.FamilyKeyBoard.ESCAPE = 27
SDL.Input.FamilyKeyBoard.F = 102
SDL.Input.FamilyKeyBoard.F1 = 282
SDL.Input.FamilyKeyBoard.F2 = 283
SDL.Input.FamilyKeyBoard.F3 = 284
SDL.Input.FamilyKeyBoard.F4 = 285
SDL.Input.FamilyKeyBoard.F5 = 286
SDL.Input.FamilyKeyBoard.F6 = 287
SDL.Input.FamilyKeyBoard.F7 = 288
SDL.Input.FamilyKeyBoard.F8 = 289
SDL.Input.FamilyKeyBoard.G = 103
SDL.Input.FamilyKeyBoard.GRAVE = 96
SDL.Input.FamilyKeyBoard.H = 104
SDL.Input.FamilyKeyBoard.I = 105
SDL.Input.FamilyKeyBoard.INSERT = 277
SDL.Input.FamilyKeyBoard.J = 106
SDL.Input.FamilyKeyBoard.K = 107
SDL.Input.FamilyKeyBoard.L = 108
SDL.Input.FamilyKeyBoard.LEFTALT = 308
SDL.Input.FamilyKeyBoard.LEFTCONTROL = 306
SDL.Input.FamilyKeyBoard.LEFTSHIFT = 304
SDL.Input.FamilyKeyBoard.M = 109
SDL.Input.FamilyKeyBoard.MINUS = 45
SDL.Input.FamilyKeyBoard.N = 110
SDL.Input.FamilyKeyBoard.O = 111
SDL.Input.FamilyKeyBoard.P = 112
SDL.Input.FamilyKeyBoard.PAGEDOWN = 281
SDL.Input.FamilyKeyBoard.PERIOD = 46
SDL.Input.FamilyKeyBoard.Q = 113
SDL.Input.FamilyKeyBoard.R = 114
SDL.Input.FamilyKeyBoard.RIGHTALT = 307
SDL.Input.FamilyKeyBoard.RIGHTSHIFT = 303
SDL.Input.FamilyKeyBoard.S = 115
SDL.Input.FamilyKeyBoard.SEMICOLON = 59
SDL.Input.FamilyKeyBoard.SLASH = 47
SDL.Input.FamilyKeyBoard.SPACE = 32
SDL.Input.FamilyKeyBoard.T = 116
SDL.Input.FamilyKeyBoard.U = 117
SDL.Input.FamilyKeyBoard.V = 118
SDL.Input.FamilyKeyBoard.W = 119
SDL.Input.FamilyKeyBoard.X = 120
SDL.Input.FamilyKeyBoard.Y = 121
SDL.Input.FamilyKeyBoard.Z = 122
SDL.Input.GamePad.0A = 0
SDL.Input.GamePad.0B = 1
SDL.Input.GamePad.0DeviceNum = 0
SDL.Input.GamePad.0Down = 32769
SDL.Input.GamePad.0Left = 49152
SDL.Input.GamePad.0Right = 32768
SDL.Input.GamePad.0Select = 2
SDL.Input.GamePad.0Start = 9
SDL.Input.GamePad.0TurboA = 3
SDL.Input.GamePad.0TurboB = 4
SDL.Input.GamePad.0Up = 49153
SDL.Input.GamePad.1A = 0
SDL.Input.GamePad.1B = 0
SDL.Input.GamePad.1DeviceNum = 0
SDL.Input.GamePad.1Down = 0
SDL.Input.GamePad.1Left = 0
SDL.Input.GamePad.1Right = 0
SDL.Input.GamePad.1Select = 0
SDL.Input.GamePad.1Start = 0
SDL.Input.GamePad.1TurboA = 0
SDL.Input.GamePad.1TurboB = 0
SDL.Input.GamePad.1Up = 0
SDL.Input.GamePad.2A = 0
SDL.Input.GamePad.2B = 0
SDL.Input.GamePad.2DeviceNum = 0
SDL.Input.GamePad.2Down = 0
SDL.Input.GamePad.2Left = 0
SDL.Input.GamePad.2Right = 0
SDL.Input.GamePad.2Select = 0
SDL.Input.GamePad.2Start = 0
SDL.Input.GamePad.2TurboA = 0
SDL.Input.GamePad.2TurboB = 0
SDL.Input.GamePad.2Up = 0
SDL.Input.GamePad.3A = 0
SDL.Input.GamePad.3B = 1
SDL.Input.GamePad.3DeviceNum = 0
SDL.Input.GamePad.3Down = 32769
SDL.Input.GamePad.3Left = 49152
SDL.Input.GamePad.3Right = 32768
SDL.Input.GamePad.3Select = 2
SDL.Input.GamePad.3Start = 9
SDL.Input.GamePad.3TurboA = 3
SDL.Input.GamePad.3TurboB = 4
SDL.Input.GamePad.3Up = 49153
SDL.Input.HyperShot.0 = 113
SDL.Input.HyperShot.1 = 119
SDL.Input.HyperShot.2 = 101
SDL.Input.HyperShot.3 = 114
SDL.Input.HyperShot.DeviceNum = 0
SDL.Input.Mahjong.00 = 113
SDL.Input.Mahjong.01 = 119
SDL.Input.Mahjong.02 = 101
SDL.Input.Mahjong.03 = 114
SDL.Input.Mahjong.04 = 116
SDL.Input.Mahjong.05 = 97
SDL.Input.Mahjong.06 = 115
SDL.Input.Mahjong.07 = 100
SDL.Input.Mahjong.08 = 102
SDL.Input.Mahjong.09 = 103
SDL.Input.Mahjong.10 = 104
SDL.Input.Mahjong.11 = 106
SDL.Input.Mahjong.12 = 107
SDL.Input.Mahjong.13 = 108
SDL.Input.Mahjong.14 = 122
SDL.Input.Mahjong.15 = 120
SDL.Input.Mahjong.16 = 99
SDL.Input.Mahjong.17 = 118
SDL.Input.Mahjong.18 = 98
SDL.Input.Mahjong.19 = 110
SDL.Input.Mahjong.20 = 109
SDL.Input.Mahjong.DeviceNum = 0
SDL.Input.PowerPad.0 = 111
SDL.Input.PowerPad.1 = 112
SDL.Input.PowerPad.2 = 91
SDL.Input.PowerPad.3 = 93
SDL.Input.PowerPad.4 = 107
SDL.Input.PowerPad.5 = 108
SDL.Input.PowerPad.6 = 59
SDL.Input.PowerPad.7 = 39
SDL.Input.PowerPad.8 = 109
SDL.Input.PowerPad.9 = 44
SDL.Input.PowerPad.A = 46
SDL.Input.PowerPad.B = 47
SDL.Input.PowerPad.DeviceNum = 0
SDL.Input.QuizKing.0 = 113
SDL.Input.QuizKing.1 = 119
SDL.Input.QuizKing.2 = 101
SDL.Input.QuizKing.3 = 114
SDL.Input.QuizKing.4 = 116
SDL.Input.QuizKing.5 = 121
SDL.Input.QuizKing.DeviceNum = 0
SDL.Input.TopRider.0 = 113
SDL.Input.TopRider.1 = 119
SDL.Input.TopRider.2 = 101
SDL.Input.TopRider.3 = 114
SDL.Input.TopRider.4 = 116
SDL.Input.TopRider.5 = 121
SDL.Input.TopRider.6 = 117
SDL.Input.TopRider.7 = 105
SDL.Input.TopRider.DeviceNum = 0
SDL.InputDisplay = 0

<продолжение следует>

Den_Zurin ()

Как установить SCons?

Не получается установить SCons. Помогите, пожалуйста!
Скачал исходники (файл scons-src-1.3.0.tar.gz), распаковал. В документации написано, что для установки нужно в консоли ввести команду python setup.py install. Запускаю консоль, перехожу в каталог с исходниками, ввожу python setup.py install, она мне пишет:

python: can't open file 'setup.py': [Errno 2] No such file or directory
Т.е. не может найти файл setup.py. Посмотрел папки - этот файл лежит в каталоге src/script. Перехожу туда и снова ввожу команду:
cd src/script
python setup.py install
Теперь Питон запускается, но выдает следующую ошибку:
/usr/lib/python2.4/distutils/dist.py:222: UserWarning: 'licence' distribution option is deprecated; use 'license'
  warnings.warn(msg)
running install
running build
running build_scripts
error: file 'scons' does not exist
Как его установить?
З.Ы. Система ASP Linux.

Den_Zurin ()

О лицензии GPL

Возник такой вопрос.

Допустим, кто-то разработал программу, выпустил ее под лицензией GNU GPL. А его конкурент тупо взял код, изменил интерфейс, скомпилировал и начал продавать свой продукт под проприетарной лицензией. Также в своей проприетарной лицензии он запретил дизассемблирование и reverse engineering.

Что в этом случае делать первому разработчику?

Den_Zurin ()

[Lua] ошибки при компиляции

Проблемы с Lua 5.1 на ASP Linux 11.2. Вот, например, такой файл example.c:

#include <stdio.h>

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

lua_State* L;

int main(int argc, char* argv[])
{
  L = lua_open();
  luaL_openlibs(L);
  luaL_dostring(L, "print \"Preved!\"\n");
  lua_close(L);
  return 0;
}

При компиляции выдаются ошибки:

$ gcc -O3 example.c -o example -llua5.1
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../liblua5.1.so: undefined reference to `dlerror'
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../liblua5.1.so: undefined reference to `dlclose'
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../liblua5.1.so: undefined reference to `dlopen'
/usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../liblua5.1.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status

В чем дело?

Den_Zurin ()

Quake2 не устанавливается

Скачал с сайта ID Software версию Quake2 для Linux, пакет quake2-3.20-6.i386.rpm, а он не хочет устанавливаться. Пишет:

Missing Dependency: libc.so.5 is needed by package quake2
Missing Dependency: libdl.so.1 is needed by package quake2
Missing Dependency: libm.so.5 is needed by package quake2
Система ASP Linux 11.2 (ядро версии 2.6.17, компилятор GCC версии 4.0.2, библиотека glibc версии 2.3.6). Заглянул в папку /usr/lib, там действительно нет этих файлов, есть только libc.so, libdl.so и libm.so. Как же все-таки установить Quake2?

Den_Zurin ()

Помогите выбрать дистрибутив

Подскажите, какой дистрибутив Linux подойдет для такого компа:

CPU Duron-800 Mhz, RAM 192 MB, Nvidia GeForce 4, HDD 2 GB

Необходимо: работа в графической среде (например, XFCE), разработка приложений на C/C++, браузер, аудио и видеоплееры, текстовой и табличный редакторы. Желательно - GIMP и Blender. Ну и еще чтобы русский язык поддерживался.

Den_Zurin ()

[bash] Воспроизведение звука

Недавно узнал, что через bash-скрипты можно воспроизводить звук. Например, если есть файл sound.raw со звуковыми данными, то его можно воспроизвести с помощью команды:

% cat sound.raw > /dev/dsp

Вот только одна проблема. Перед тем, как что-то записывать в устройство /dev/dsp, его необходимо настроить. Например, в C программе это делается так:

dsp = open("/dev/dsp", O_WRONLY, 0);
format = AFMT_U8;
ioctl(dsp, SNDCTL_DSP_SETFMT, &format);
cnls = 1;
ioctl(dsp, SNDCTL_DSP_CHANNELS, &cnls);
freq = 22050;
ioctl(dsp, SNDCTL_DSP_SPEED, &freq);

И только после этого можно записывать данные. А в bash-скриптах как вызывать функцию ioctl?

Den_Zurin ()

GNU C++ и Unicode строки

Есть простейшая программа, выводит Unicode-строку:

#include <stdio.h>
#include <wchar.h>

wchar_t my_message[] = {'H', 'e', 'l', 'l', 'o', '\n', 0x00};

int main(int argc, char* argv[])
{
wprintf(my_message);
return 0;
}

Компилируем ее с помощью GNU C:

$ gcc wprintf.c -o wprintf

Все в порядке... Создается исполняемый файл wprintf, который при запуске выводит строку "Hello".

Попробуем компилировать с помощью GNU C++:

$ g++ wprintf.c -o wprintf
wprintf.c: In function `int main (int, char **)':
wprintf.c:8: `wprintf' undeclared (first use this function)
wprintf.c:8: (Each undeclared identifier is reported only once for each
function it appears in.)

WTF?! Почему GNU C++ не видит функцию wprintf?
То же самое и с другими стандартными C-функциями для Unicode строк (например, swprintf).

Пробовал следующее:
1. Использовать extern "C" при подключении wchar.h в исходнике:

extern "C" {
#include <wchar.h>
}

2. Указывать библиотеку libstdc++ при компиляции:

g++ wprintf.c -o wprintf -lstdc++

Ни то, ни другое не помогло.

Den_Zurin ()

Проблема со шрифтами в Wine

wine почему-то не отображает шрифты. Вот, например, запускаю Paint через wine (wine mspaint.exe):

http://photofile.ru/users/denzurin/115358571/126399674/full_image/

Как это исправить?

Den_Zurin ()

RSS подписка на новые темы