fix internationalization bug. these patches are already submitted to

the author and will be synced in next release.

Submitted by:	Takeshi MUTOH <tmutoh@mx10.freecom.ne.jp>
Approved by:	maintainer
This commit is contained in:
Munechika SUMIKAWA 2001-03-06 11:17:09 +00:00
parent f543893faf
commit 01c3a17556
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=39121
11 changed files with 777 additions and 1 deletions

View File

@ -8,7 +8,7 @@
PORTNAME= jpilot
PORTVERSION= 0.99
PORTREVISION?= 1
PORTREVISION?= 2
CATEGORIES+= palm comms
MASTER_SITES= http://jpilot.org/

View File

@ -0,0 +1,97 @@
Index: address.c
diff -u address.c:1.1.1.1 address.c:1.1.1.1.4.3
--- address.c:1.1.1.1 Sun Feb 4 12:58:54 2001
+++ address.c Sat Feb 17 20:37:52 2001
@@ -31,10 +31,6 @@
#include "libplugin.h"
#include "password.h"
-#include "japanese.h"
-#include "cp1250.h"
-#include "russian.h"
-
#define ADDRESS_EOF 7
static int glob_sort_by_company;
@@ -224,8 +220,16 @@
unsigned int *unique_id)
{
char record[65536];
- int rec_len;
+ int rec_len,i;
buf_rec br;
+ long char_set;
+
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
+ for (i = 0; i < 19; i++) {
+ if (a->entry[i]) charset_j2p(a->entry[i], strlen(a->entry[i])+1, char_set);
+ }
+ }
rec_len = pack_Address(a, record, 65535);
if (!rec_len) {
@@ -275,36 +279,22 @@
return -1;
}
- get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE ||
- char_set==CHAR_SET_1250 ||
- char_set==CHAR_SET_1251 ||
- char_set==CHAR_SET_1251_B
- ) {
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
/* Convert to character set */
- {
int i;
for (i = 0; i < 16; i++)
if (ai->category.name[i][0] != '\0') {
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(ai->category.name[i], 16);
- if (char_set==CHAR_SET_1250) Win2Lat(ai->category.name[i], 16);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(ai->category.name[i], 16);
+ charset_p2j(ai->category.name[i], 16, char_set);
}
for (i = 0; i < 19 + 3; i++)
if (ai->labels[i][0] != '\0') {
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(ai->labels[i], 16);
- if (char_set==CHAR_SET_1250) Win2Lat(ai->labels[i], 16);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(ai->labels[i], 16);
- if (char_set==CHAR_SET_1251_B) koi8_to_win1251(ai->labels[i], 16);
+ charset_p2j(ai->labels[i],16, char_set);
}
for (i = 0; i < 8; i++)
if (ai->phoneLabels[i][0] != '\0') {
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(ai->phoneLabels[i], 16);
- if (char_set==CHAR_SET_1250) Win2Lat(ai->phoneLabels[i], 16);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(ai->phoneLabels[i], 16);
- if (char_set==CHAR_SET_1251_B) koi8_to_win1251(ai->phoneLabels[i], 16);
+ charset_p2j(ai->phoneLabels[i],16, char_set);
}
- }
}
return 0;
@@ -386,17 +376,11 @@
}
get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE ||
- char_set==CHAR_SET_1250 ||
- char_set==CHAR_SET_1251 ||
- char_set==CHAR_SET_1251_B
- ) {
- int i;
+ if (char_set != CHAR_SET_ENGLISH) {
for (i = 0; i < 19; i++) {
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(a.entry[i], 65536);
- if (char_set==CHAR_SET_1250) Win2Lat(a.entry[i], 65536);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(a.entry[i], 65536);
- if (char_set==CHAR_SET_1251_B) koi8_to_win1251(a.entry[i], 65536);
+ if ((a.entry[i] != NULL) && (a.entry[i][0] != '\0')) {
+ charset_p2j(a.entry[i], strlen(a.entry[i])+1, char_set);
+ }
}
}

View File

@ -0,0 +1,120 @@
Index: datebook.c
diff -u datebook.c:1.1.1.1 datebook.c:1.1.1.1.4.5
--- datebook.c:1.1.1.1 Sun Feb 4 12:58:54 2001
+++ datebook.c Sat Feb 17 21:51:55 2001
@@ -37,10 +37,6 @@
#include "libplugin.h"
#include "password.h"
-#include "japanese.h"
-#include "cp1250.h"
-#include "russian.h"
-
#ifndef FALSE
#define FALSE 0
#endif
@@ -205,6 +201,13 @@
char record[65536];
int rec_len;
buf_rec br;
+ long char_set;
+
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
+ if (a->description) charset_j2p(a->description, strlen(a->description)+1, char_set);
+ if (a->note) charset_j2p(a->note, strlen(a->note)+1, char_set);
+ }
rec_len = pack_Appointment(a, record, 65535);
if (!rec_len) {
@@ -212,7 +215,7 @@
jpilot_logf(LOG_WARN, "pack_Appointment %s\n", _("error"));
return -1;
}
- br.rt=rt;
+ br.rt=rt;
br.attrib = attrib;
br.buf = record;
br.size = rec_len;
@@ -535,9 +538,10 @@
int get_datebook_app_info(struct AppointmentAppInfo *ai)
{
- int num;
+ int num,i;
unsigned int rec_size;
unsigned char *buf;
+ long char_set;
bzero(ai, sizeof(*ai));
@@ -550,6 +554,12 @@
jpilot_logf(LOG_WARN, _("Error reading"), "DatebookDB.pdb");
return -1;
}
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
+ for (i = 0; i < 16; i++) {
+ if (ai->category.name[i][0] != '\0') charset_p2j(ai->category.name[i], 16, char_set);
+ }
+ }
return 0;
}
@@ -688,14 +698,14 @@
AppointmentList *temp_a_list;
long keep_modified, keep_deleted;
int keep_priv;
- long char_set;
buf_rec *br;
#ifdef USE_DB3
long use_db3_tags;
time_t ltime;
struct tm *today;
#endif
-
+ long char_set;
+
#ifdef USE_DB3
time(&ltime);
today = localtime(&ltime);
@@ -763,22 +773,8 @@
}
get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE) {
- Sjis2Euc(a.description, 65536);
- Sjis2Euc(a.note, 65536);
- }
- if (char_set==CHAR_SET_1250) {
- Win2Lat(a.description, 65536);
- Win2Lat(a.note, 65536);
- }
- if (char_set==CHAR_SET_1251) {
- win1251_to_koi8(a.description, 65536);
- win1251_to_koi8(a.note, 65536);
- }
- if (char_set==CHAR_SET_1251_B) {
- koi8_to_win1251(a.description, 65536);
- koi8_to_win1251(a.note, 65536);
- }
+ if (a.description) charset_p2j(a.description, strlen(a.description)+1, char_set);
+ if (a.note) charset_p2j(a.note, strlen(a.note)+1, char_set);
temp_a_list = malloc(sizeof(AppointmentList));
if (!temp_a_list) {
@@ -793,6 +789,8 @@
temp_a_list->next = *appointment_list;
*appointment_list = temp_a_list;
recs_returned++;
+
+
}
jp_free_DB_records(&records);
@@ -803,3 +801,5 @@
return recs_returned;
}
+
+

View File

@ -0,0 +1,47 @@
Index: datebook_gui.c
diff -u datebook_gui.c:1.1.1.1 datebook_gui.c:1.1.1.1.4.4
--- datebook_gui.c:1.1.1.1 Sun Feb 4 12:58:54 2001
+++ datebook_gui.c Sat Feb 17 21:48:47 2001
@@ -224,7 +224,6 @@
void cb_date_cats(GtkWidget *widget, gpointer data)
{
- unsigned char *buf;
int size;
struct AppointmentAppInfo ai;
int i;
@@ -241,13 +240,7 @@
return;
}
- get_app_info("DatebookDB", &buf, &size);
- jpilot_logf(LOG_DEBUG, "Got datebook app info, size = %d", size);
- if (size<1) {
- return;
- }
- unpack_AppointmentAppInfo(&ai, buf, size);
- free(buf);
+ get_datebook_app_info(&ai);
window_date_cats = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -268,10 +261,8 @@
gtk_table_set_col_spacings(GTK_TABLE(table),0);
gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
- get_pref(PREF_CHAR_SET, &char_set, NULL);
for (i=0, bit=1; i<16; i++, bit <<= 1) {
if (ai.category.name[i][0]) {
- if (char_set == CHAR_SET_JAPANESE) Sjis2Euc(ai.category.name[i], 65536);
toggle_button[i]=gtk_toggle_button_new_with_label
(ai.category.name[i]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_button[i]),
@@ -945,7 +936,7 @@
if (a->note) {
jpilot_logf(LOG_DEBUG, "text2=[%s]\n",a->note);
}
-
+
/* We won't allow a repeat frequency of less than 1 */
if ((page != PAGE_NONE) && (a->repeatFrequency < 1)) {
jpilot_logf(LOG_WARN,

View File

@ -0,0 +1,157 @@
Index: japanese.c
diff -u japanese.c:1.1.1.1 japanese.c:1.1.1.1.4.3
--- japanese.c:1.1.1.1 Sun Feb 4 12:58:54 2001
+++ japanese.c Sat Feb 17 21:19:41 2001
@@ -10,7 +10,7 @@
#include <stdlib.h>
#include <stdio.h>
-
+
/* In utils.c, also a prototype in utils.h */
void multibyte_safe_strncpy(char *dst, char *src, size_t max_len);
@@ -23,7 +23,14 @@
#define isEuc(c) \
(0xa0 < ((unsigned char) (c)) && ((unsigned char) (c)) < 0xff)
+/* convert SJIS char to EUC char
+
+ this does not support Machine dependent codes.
+ args: hi: first byte of sjis char.
+ lo: second byte of sjis char.
+ return: euc char in 16bit value.
+ */
static unsigned int SjisToEuc(unsigned char hi, unsigned char lo)
{
if (lo >= 0x9f)
@@ -32,8 +39,12 @@
return ((hi * 2 - (hi >= 0xe0 ? 0xe1 : 0x61)) << 8) |
(lo + (lo >= 0x7f ? 0x60 : 0x61));
}
-
+/*
+ args: source char pointer, destination source pointer, a length of srting
+ Length include null termination.
+ return the pointer of nul termination code.
+ */
unsigned char *Sjis2EucCpy(unsigned char *dest, unsigned char *src, int max_len)
{
unsigned char *p, *q;
@@ -43,8 +54,8 @@
p = src;
q = dest;
- while ((*p) && (n < max_len-1)) {
- if (isSjis1stByte(*p)) {
+ while ((*p) && (n < max_len-2)) {
+ if (isSjis1stByte(*p)) {
hi = *p++;
lo = *p++;
w = SjisToEuc(hi, lo);
@@ -58,27 +69,48 @@
} else if ((*p) & 0x80) { /* irregular japanese char */
p++; /* ??abort and return NULL?? */
/* discard it */
- } else {
+ } else {
*q++ = *p++;
n++;
}
}
- *q = '\0';
- return dest;
+ if ((*p) && !(*p & 0x80) && (n < max_len-1)) {
+ *q++ = *p++;
+ *q = '\0';
+ } else {
+ *q = '\0';
+ }
+ return q;
}
+/*
+ convert strings from Sjis to EUC.
+ max_len includes null termiantion.
+ size of buf must be more than max_len.
+
+*/
+
void Sjis2Euc(unsigned char *buf, int max_len)
{
unsigned char *dst;
if (buf == NULL) return;
- if ((dst = (unsigned char *)malloc(max_len*2)) != NULL) {
- if (Sjis2EucCpy(dst, buf, max_len*2) != NULL)
+ if ((dst = (unsigned char *)malloc(max_len)) != NULL) {
+ /* assign buffer for destination. */
+ if (Sjis2EucCpy(dst, buf, max_len) != NULL) {
multibyte_safe_strncpy(buf, dst, max_len);
+ buf[max_len-1] = '\0'; /* i am a paranoire B-) */
+ }
free(dst);
- }
+ }
}
+/*
+ Convert one char from euc to sjis.
+ args: hi: first byte of euc code.
+ lo: second byte of euc code.
+ return: 16bit value of sjis char code.
+ */
static unsigned int EucToSjis(unsigned char hi, unsigned char lo)
{
if (hi & 1)
@@ -88,6 +120,11 @@
return ((hi / 2 + (hi < 0xdf ? 0x30 : 0x70)) << 8) | (lo - 2);
}
+/*
+ Convert string from euc to sjis with coping to another buffer.
+ Theoritically, strlen(EUC) >= strlen(SJIS),
+ then it is ok that dest == src.
+ */
unsigned char *Euc2SjisCpy(unsigned char *dest, unsigned char *src, int max_len)
{
unsigned char *p, *q;
@@ -97,7 +134,7 @@
p = src;
q = dest;
- while ((*p) && (n < max_len-1)) {
+ while ((*p) && (n < max_len-2)) {
if (isEucKana(*p)) { /* euc kana(2byte) -> sjis(1byte) */
p++;
*q++ = *p++;
@@ -113,13 +150,25 @@
*q++ = *p++;
n++;
}
+ }
+ if ((*p) && !(*p & 0x80) && n < max_len-1) {
+ *q++ = *p++;
+ *q = '\0';
+ } else {
+ *q = '\0';
}
- *q = '\0';
return dest;
}
+/*
+ convert euc to sjis.
+ size of buf must be more than man_len.
+ it simply call Euc2SjisCpy().
+ this function exists for symmetry.
+ */
void Euc2Sjis(unsigned char *buf, int max_len)
{
if (buf == NULL) return;
- Euc2SjisCpy(buf, buf, max_len);
+ if (max_len <= 0) return;
+ (void *)Euc2SjisCpy(buf, buf, max_len);
}

View File

@ -0,0 +1,86 @@
Index: memo.c
diff -u memo.c:1.1.1.1 memo.c:1.1.1.1.4.4
--- memo.c:1.1.1.1 Sun Feb 4 12:58:54 2001
+++ memo.c Sat Feb 17 21:47:54 2001
@@ -32,10 +32,6 @@
#include "libplugin.h"
#include "password.h"
-#include "japanese.h"
-#include "cp1250.h"
-#include "russian.h"
-
#define MEMO_EOF 7
int memo_compare(const void *v1, const void *v2)
@@ -133,6 +129,12 @@
char record[65536];
int rec_len;
buf_rec br;
+ long char_set;
+
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
+ if (memo->text) charset_j2p(memo->text, strlen(memo->text)+1, char_set);
+ }
rec_len = pack_Memo(memo, record, 65535);
if (!rec_len) {
@@ -165,7 +167,7 @@
int get_memo_app_info(struct MemoAppInfo *ai)
{
- int num;
+ int num,i;
unsigned int rec_size;
unsigned char *buf;
long char_set;
@@ -183,18 +185,12 @@
}
get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE ||
- char_set==CHAR_SET_1250 ||
- char_set==CHAR_SET_1251 ||
- char_set==CHAR_SET_1251_B) {
- int i;
- for (i = 0; i < 16; i++)
- if (ai->category.name[i][0] != '\0') {
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(ai->category.name[i], 16);
- if (char_set==CHAR_SET_1250) Win2Lat(ai->category.name[i], 16);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(ai->category.name[i], 16);
- if (char_set==CHAR_SET_1251_B) koi8_to_win1251(ai->category.name[i], 16);
- }
+ if (char_set != CHAR_SET_ENGLISH) {
+ for (i = 0; i < 16; i++) {
+ if (ai->category.name[i][0] != '\0') {
+ charset_p2j(ai->category.name[i], 16, char_set);
+ }
+ }
}
return 0;
@@ -218,8 +214,8 @@
MemoList *temp_memo_list;
long keep_modified, keep_deleted;
int keep_priv;
- long char_set;
buf_rec *br;
+ long char_set;
jpilot_logf(LOG_DEBUG, "get_memos2()\n");
if (modified==2) {
@@ -274,12 +270,8 @@
if ( ((br->attrib & 0x0F) != category) && category != CATEGORY_ALL) {
continue;
}
-
get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE) Sjis2Euc(memo.text, 65536);
- if (char_set==CHAR_SET_1250) Win2Lat(memo.text, 65536);
- if (char_set==CHAR_SET_1251) win1251_to_koi8(memo.text, 65536);
- if (char_set==CHAR_SET_1251_B) koi8_to_win1251(memo.text, 65536);
+ if (memo.text) charset_p2j(memo.text, strlen(memo.text)+1, char_set);
temp_memo_list = malloc(sizeof(MemoList));
if (!temp_memo_list) {

View File

@ -0,0 +1,155 @@
Index: sync.c
diff -u sync.c:1.1.1.1 sync.c:1.1.1.1.4.1
--- sync.c:1.1.1.1 Sun Feb 4 12:58:55 2001
+++ sync.c Sat Feb 17 17:07:51 2001
@@ -105,10 +105,6 @@
int pdb_file_delete_record_by_id(char *DB_name, pi_uid_t uid_in);
-
-void recode_packed_record(char *DB_name, void *record, int rec_len, long char_seet);
-
-
void sig_handler(int sig)
{
jpilot_logf(LOG_DEBUG, "caught signal SIGCHLD\n");
@@ -624,10 +620,8 @@
return 0;
}
get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(buf, 1023);
- if (char_set == CHAR_SET_1250) Lat2Win(buf, 1023);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(buf, 1023);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(buf, 1023);
+ charset_j2p(buf,1023,char_set);
+
dlp_AddSyncLogEntry(sd, buf);
dlp_AddSyncLogEntry(sd, "\n\r");
@@ -751,15 +745,6 @@
}
}
- get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE ||
- char_set==CHAR_SET_1250 ||
- char_set==CHAR_SET_1251 ||
- char_set==CHAR_SET_1251_B
- ) {
- recode_packed_record(DB_name, record, rec_len, char_set);
- }
-
ret = dlp_WriteRecord(sd, db, header.attrib & dlpRecAttrSecret,
0, header.attrib & 0x0F,
record, rec_len, &new_id);
@@ -1469,61 +1454,6 @@
return 0;
}
-void recode_packed_record(char *DB_name, void *record, int rec_len, long char_set)
-{
- /*todo move this to before the record is written out?*/
- /* Convert to SJIS Japanese Kanji code (Palm use this code) */
- /* or convert to different encoding */
- /*Write the record to the Palm Pilot */
- if (!strcmp(DB_name, "DatebookDB")) {
- struct Appointment a;
- unpack_Appointment(&a, record, rec_len);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(a.description, 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(a.description, 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(a.description, 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(a.description, 65536);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(a.note, 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(a.note, 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(a.note, 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(a.note, 65536);
- rec_len = pack_Appointment(&a, record, 65535);
- }
- if (!strcmp(DB_name, "AddressDB")) {
- struct Address a;
- int i;
- unpack_Address(&a, record, rec_len);
- for (i = 0; i < 19; i++) {
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(a.entry[i], 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(a.entry[i], 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(a.entry[i], 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(a.entry[i], 65536);
- }
- rec_len = pack_Address(&a, record, 65535);
- }
- if (!strcmp(DB_name, "ToDoDB")) {
- struct ToDo t;
- unpack_ToDo(&t, record, rec_len);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(t.description, 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(t.description, 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(t.description, 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(t.description, 65536);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(t.note, 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(t.note, 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(t.note, 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(t.note, 65536);
- rec_len = pack_ToDo(&t, record, 65535);
- }
- if (!strcmp(DB_name, "MemoDB")) {
- struct Memo m;
- unpack_Memo(&m, record, rec_len);
- if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(m.text, 65536);
- if (char_set == CHAR_SET_1250) Lat2Win(m.text, 65536);
- if (char_set == CHAR_SET_1251) koi8_to_win1251(m.text, 65536);
- if (char_set == CHAR_SET_1251_B) win1251_to_koi8(m.text, 65536);
- rec_len = pack_Memo(&m, record, 65535);
- }
-}
-
int fast_sync_local_recs(char *DB_name, int sd, int db)
{
unsigned long new_id;
@@ -1541,7 +1471,6 @@
char error_log_message_d[256];
char delete_log_message[256];
int index, size, attr, category;
- long char_set;
jpilot_logf(LOG_DEBUG, "fast_sync_local_recs\n");
@@ -1599,14 +1528,6 @@
if (ferror(pc_in)) {
break;
}
- }
- get_pref(PREF_CHAR_SET, &char_set, NULL);
- if (char_set==CHAR_SET_JAPANESE ||
- char_set==CHAR_SET_1250 ||
- char_set==CHAR_SET_1251 ||
- char_set==CHAR_SET_1251_B
- ) {
- recode_packed_record(DB_name, record, rec_len, char_set);
}
jpilot_logf(LOG_DEBUG, "Writing PC record to palm\n");
Index: todo.c
diff -u todo.c:1.1.1.1 todo.c:1.1.1.1.4.3
--- todo.c:1.1.1.1 Sun Feb 4 12:58:55 2001
+++ todo.c Sat Feb 17 20:37:52 2001
@@ -31,10 +31,6 @@
#include "libplugin.h"
#include "password.h"
-#include "japanese.h"
-#include "cp1250.h"
-#include "russian.h"
-
#define TODO_EOF 7
static struct ToDoAppInfo *glob_Ptodo_app_info;
@@ -241,6 +237,13 @@
char record[65536];
int rec_len;
buf_rec br;
+ long char_set;
+
+ get_pref(PREF_CHAR_SET, &char_set, NULL);
+ if (char_set != CHAR_SET_ENGLISH) {
+ if (todo->description) charset_j2p(todo->description, strlen(todo->description)+1, char_set);
+ if (todo->note) charset_j2p(todo->note, strlen(todo->note)+1, char_set);
+ }

View File

@ -0,0 +1,21 @@
Index: todo_gui.c
diff -u todo_gui.c:1.1.1.1 todo_gui.c:1.1.1.1.4.1
--- todo_gui.c:1.1.1.1 Sun Feb 4 12:58:55 2001
+++ todo_gui.c Sat Feb 17 17:07:51 2001
@@ -426,12 +426,16 @@
/*it will show it though. I allow it. */
new_todo->description = gtk_editable_get_chars
(GTK_EDITABLE(todo_text), 0, -1);
+/* charset_j2p(new_todo->description, 65536); */
new_todo->note = gtk_editable_get_chars
(GTK_EDITABLE(todo_text_note), 0, -1);
if (new_todo->note[0]=='\0') {
free(new_todo->note);
new_todo->note=NULL;
}
+/* else {
+ charset_j2p(new_todo->note, 65536);
+ }*/
for (i=0; i<NUM_TODO_CAT_ITEMS; i++) {
if (GTK_IS_WIDGET(todo_cat_menu_item2[i])) {

View File

@ -0,0 +1,70 @@
Index: utils.c
diff -u utils.c:1.1.1.1 utils.c:1.1.1.1.4.1
--- utils.c:1.1.1.1 Sun Feb 4 12:58:55 2001
+++ utils.c Sat Feb 17 17:07:51 2001
@@ -40,6 +40,9 @@
#include "plugins.h"
#include "libplugin.h"
+#include "japanese.h"
+#include "cp1250.h"
+#include "russian.h"
#include <pi-source.h>
#include <pi-socket.h>
@@ -1981,7 +1984,7 @@
char *p, *q;
int n = 0;
p = src; q = dst;
- while ((*p) && n < (max_len-1)) {
+ while ((*p) && n < (max_len-2)) {
if ((*p) & 0x80) {
*q++ = *p++;
n++;
@@ -1994,11 +1997,10 @@
n++;
}
}
- if ((*p & 0x80 ) && (n < max_len)) {
- *q = *p;
- } else {
- *q = '\0';
- }
+ if (!(*p & 0x80 ) && (n < max_len-1))
+ *q++ = *p++;
+
+ *q = '\0';
} else {
strncpy(dst, src, max_len);
}
@@ -2022,7 +2024,7 @@
int n = 0;
p = (char *)src; q = dst;
- while ((*p) && (n < (len -1))) {
+ while ((*p) && (n < (len -2))) {
if ((*p) & 0x80) {
*q++ = *p++;
n++;
@@ -2033,15 +2035,15 @@
} else {
*q++ = *p++;
n++;
+ if (*(p-1) == (char)(c & 0xff)) return q;
}
- if (*(p-1) == (char)(c & 0xff)) return q;
- }
- if ((*p & 0x80) && (n < len)) {
- *q = *p;
- } else {
- *q = '\0';
}
+ if (!(*p & 0x80) && (n < len-1))
+ *q++ = *p++;
+
+ *q = '\0';
return NULL;
} else
return memccpy(dst, src, c, len);
}
+

View File

@ -0,0 +1,23 @@
Index: utils.h
diff -u utils.h:1.1.1.1 utils.h:1.1.1.1.4.3
--- utils.h:1.1.1.1 Sun Feb 4 12:58:55 2001
+++ utils.h Sat Feb 17 21:56:24 2001
@@ -303,3 +303,18 @@
void multibyte_safe_strncpy(char *dst, char *src, size_t max_len);
char *multibyte_safe_memccpy(char *dst, const char *src, int c, size_t len);
+
+/*************************************
+ * convert char code
+ *************************************/
+#define charset_j2p(buf, max_len, char_set) {\
+ if (char_set == CHAR_SET_JAPANESE) Euc2Sjis(buf, max_len);\
+ if (char_set == CHAR_SET_1250) Lat2Win(buf,max_len);\
+ if (char_set == CHAR_SET_1251) koi8_to_win1251(buf, max_len);\
+ if (char_set == CHAR_SET_1251_B) win1251_to_koi8(buf, max_len);}
+#define charset_p2j(buf, max_len, char_set) {\
+ if (char_set == CHAR_SET_JAPANESE) Sjis2Euc(buf, max_len);\
+ if (char_set == CHAR_SET_1250) Win2Lat(buf,max_len);\
+ if (char_set == CHAR_SET_1251) win1251_to_koi8(buf, max_len);\
+ if (char_set == CHAR_SET_1251_B) koi8_to_win1251(buf, max_len);}
+