#!/bin/bash
# knoppix-dma - Set DMA acelleration in KNOPPIX
# (C) Klaus Knopper Feb 2005
# 번역 : 김보년, 신재훈
# gdialog로 출력방법 변경 : 신재훈

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin"
export PATH

XDIALOG_HIGH_DIALOG_COMPAT=1
export XDIALOG_HIGH_DIALOG_COMPAT

# Get root
[ "`id -u`" != "0" ] && exec sudo "$0" "$@"

TMP="/tmp/knoppix-dma.tmp$$"

bailout(){
rm -f "$TMP"
exit 0
}

DIALOG="dialog"
[ -n "$DISPLAY" ] && [ -x /usr/bin/gdialog ] && DIALOG="gdialog"

trap bailout 1 2 3 15

# LANGUAGE etc.
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix
[ -z "$LANG" ] && export LANG
[ -z "$LANGUAGE" ] && export LANGUAGE
[ -z "$CHARSET" ] && export CHARSET
[ -f /etc/sysconfig/desktop ] && . /etc/sysconfig/desktop

DEVICES=""
num=0
for d in $(cd /proc/ide 2>/dev/null && echo hd[a-z]); do
 if test -d /proc/ide/$d; then
  DEVICES[$((num++))]="$d"
  MODEL="$(cat /proc/ide/$d/model 2>/dev/null)"
  test -z "$MODEL" && MODEL="[GENERIC IDE/ATAPI DEVICE]"
  DEVICES[$((num++))]="$MODEL"
  egrep -q 'using_dma[ \t]+0' /proc/ide/$d/settings 2>/dev/null && DMA="off" || DMA="on"
  DEVICES[$((num++))]="$DMA"
 fi
done

# Language-dependent Messages
case "$LANGUAGE" in
de*|at*|ch*)
TITLE1="KNOPPIX DMA Beschleunigung"
MESSAGE1="Mit diesem Programm knnen Sie DMA (Direct Memory Access) fr verschiedene IDE-Gerte ein- oder ausschalten. Dies kann den Zugriff und den Datendurchsatz um bis zu Faktor 5 beschleunigen, was z.B. fr das ruckelfreie Abspielen von Multimedia-Dateien gnstig ist.

HINWEIS: Es gibt einige wenige Computer-Boards mit defekten DMA-Controllern, bei denen das Einschalten von DMA zu Fehlern bei der Datenbertragung fhrt. Das Einschalten von DMA kann bei diesen Rechnern zu bertragungsfehlern, bis hin zu (im Extremfall) Datenverlust beim Schreiben fhren. SIE BENUTZEN DIESES PROGRAMM AUF EIGENE GEFAHR.

Bitte markieren Sie die Gerte, fr die Sie DMA einschalten mchten."
;;
ko)
TITLE1="KNOPPIX DMA 가속 기능"
MESSAGE1="이 프로그램은 다양한 IDE 주변 장치들의 DMA(메모리 직접 접근) 가속 기능을 켜거나 끌 수 있습니다. 이는 데이터 접근이나 전송속도를 최대 5배까지 가속화시킬 수 있습니다. 예를 들면 멀티미디어 파일을 끊김없이 재생할 때 유리합니다.

* 주의: 결함있는 DMA 컨트롤러를 가진 컴퓨터 보드는 극히 일부에 불과하지만, 이 보드들에서 DMA를 활성화시키는 것은 데이터를 읽을 때 오류를 유발시킬 수 있습니다. 최악의 경우, 장치에 쓰기를 할 때 데이터를 잃어버릴 수도 있습니다. 이 프로그램은 위험을 감수하고 사용해야 합니다.

다음 단계에서 DMA 가속을 활성화 시킬 모든 장치를 선택하십시오."
DEVICE="선택할 장치"
;;
*)
TITLE1="KNOPPIX DMA Acelleration"
MESSAGE1="This program can turn on/off DMA acelleration (direct memory access) for various IDE peripherals. This can speed up access and throughput of data up to factor 5, which is, for example, good for playing multimedia files without interruptions.

CAUTION: There are very few computer boards around which have a defective DMA controller. On these boards, enabling DMA can lead to errors when reading data. In extreme cases, data can be lost when writing to the device with DMA enabled. USE THIS PROGRAM AT YOUR OWN RISK.

Please set a mark for all devices you want to enable DMA acelleration for."
;;
esac

rm -f "$TMP"
$DIALOG --title "$TITLE1" --msgbox "$MESSAGE1" 23 75
$DIALOG --title "$TITLE1" --checklist "$DEVICE" 23 75 4 "${DEVICES[@]}" 2>"$TMP" || bailout
# 또다시 등장한 구차한 방법!!

DEVICES="$(<$TMP)"
#rm -f "$TMP"

for d in $(cd /proc/ide 2>/dev/null && echo hd[a-z]); do
  DMA=""
  egrep -q 'using_dma[ \t]+0' /proc/ide/$d/settings 2>/dev/null
  [ "$?" = "0" ] || DMA="on"
 case "$DEVICES" in
  *$d*) # Enable DMA
  [ -n "$DMA" ] || echo "using_dma:1" >/proc/ide/$d/settings
  ;; 
  *)    # Disable DMA
  [ -n "$DMA" ] && echo "using_dma:0" >/proc/ide/$d/settings
  ;;
 esac
done
