• R/O
  • HTTP
  • SSH
  • HTTPS

Tags
Aucun tag

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

jbanner は, 日本語を含む文字列を拡大し, バナーとして画面に表示するコマンドです。


File Info

Révision e44e1bf2882c0ea546a5e93fa1b549a926154c9b
Taille 4,866 octets
l'heure 2019-07-05 13:28:05
Auteur tfuruka1
Message de Log

MinGW のみの対応としました。ソースファイルの文字セットを utf-8 へ変更しました。

ドキュメントもutf-8へ変更しました。pTeXのセットアップが完了していないので、pdf ファイルの生成は未確認です。

Content

/* -*- mode: c++; coding: utf-8; -*-
 * Copyright (C) 2003 Tadamegu Furukawa
 *
 * 共通モジュール
 *
 * $Id: comm.c,v 1.1 2004/01/19 09:01:28 tfuruka1 Exp $
 * $Log: comm.c,v $
 * Revision 1.1  2004/01/19 09:01:28  tfuruka1
 * リビジョン管理をRCSからCVSへ変更しました。
 *
 * Revision 1.1  2003/06/01 08:23:11  tfuruka1
 * Initial revision
 *
 */
#include <windows.h>
#include <stdio.h>

#ifndef CYGWIN
#   include <mbstring.h>
#else
#   include <sys/types.h>
#   include <winsock.h>
#endif

/*--------------------------------------------------------------------
 * Unixのbasenameと同じ。返却するポインタは一時的なポインタなので、必
 * ずコピーして使用する必要がある。
 * *-------------------------------------------------------------------*/
LPCTSTR WINAPI
BaseName(LPCTSTR lpszPath)
{
    LPCTSTR a, b;
#ifdef _MSC_VER
    a = _mbsrchr(lpszPath, '\\');
    b = _mbsrchr(lpszPath, '/');
#else
    a = strchr(lpszPath, '\\');
    b = strchr(lpszPath, '/');
#endif

    if (a == b) {                               // 等しい時は NULLしかない
        return lpszPath;
    }

    return ((ULONG)a > (ULONG)b ? a : b) + 1;
}
/*--------------------------------------------------------------------
 * Unixのbasenameと同じ。返却するポインタは一時的なポインタなので、必
 * ずコピーして使用する必要がある。ショートファイル名が指定されても、
 * ロングファイル名へ変換します。
 * *-------------------------------------------------------------------*/
LPCTSTR WINAPI
GetLongBaseName(LPCTSTR lpszPath)
{
    HANDLE hFile;
    static WIN32_FIND_DATA wfd;

    hFile = FindFirstFile(lpszPath, &wfd);
    if (INVALID_HANDLE_VALUE == hFile) {
        return BaseName(lpszPath);
    }
    FindClose(hFile);
    return wfd.cFileName;
}

/*--------------------------------------------------------------------
 * dwErrに対応するエラーメッセージを返却する。dwErrはGetLastError()で
 * 取得した値を指定する。
 * *-------------------------------------------------------------------*/
LPCSTR WINAPI
GetLastErrorMessage(LPCSTR lpsz, DWORD dwErr)
{
#ifdef _WIN32_WCE
    static LPTSTR sz = "WindowsCE では GetLastErrorMessage は未サポートです";
    return sz;
#else
    static TCHAR sz[1024];
    TCHAR szTmp[256];
    int i;

    if (!(i = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
                            FORMAT_MESSAGE_IGNORE_INSERTS,
                            NULL, dwErr, 0, szTmp, sizeof(szTmp), NULL))) {
        strcpy(szTmp, "---");
    }
    else {
        szTmp[i] = '\0';
        for (i--; 0 <= i; i--) {
            if ('\n' == szTmp[i] || '\r' == szTmp[i]) {
                szTmp[i] = '\0';
            }
        }
    }
    wsprintf(sz, "[WIN32] %s: Error Code = %d(%#02x): %s",
             lpsz, dwErr, dwErr, szTmp);
    return (LPCTSTR)sz;
#endif
}

/*--------------------------------------------------------------------
 * UNIXのSyslogの簡易版。常にdebug.local7しか出力しません。
 * *-------------------------------------------------------------------*/
VOID WINAPI
Syslogger(BOOL bStdOut,                         // T:stdoutにも出力
          LPCSTR lpstr,                         // 書式printfと同じ
          ...                                   // 引数
    )
{
    WSADATA wsaData;
    SOCKET finet;
    PSERVENT sp;
    SOCKADDR_IN sin;
    LPHOSTENT lpHost;
    va_list args;                               // 引数展開用
    char szLine[1024 * 64], szBuf[1024], *p;

    // モジュール名のフルパスを得る
    if (!GetModuleFileName(GetModuleHandle(NULL), szBuf, 1024)) {
        return;
    }
    // ファイル名部分だけ切り出す
    if (NULL == (p = strrchr(szBuf, '\\'))) {
        return;
    }
    // FACILITY = 23, LEVEL = 7
    sprintf(szLine, "<%d>[%s] ", 7 + 23 * 8, p + 1);

    // 文字列を書式に合せて整形する
    va_start(args, lpstr);
    vsprintf(szLine + strlen(szLine), lpstr, args);
    va_end(args);

    if (bStdOut) {
        printf("%s\n", szLine);
    }

    if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
		return;
	}

    if (0 > (finet = socket(AF_INET, SOCK_DGRAM, 0))) {
        return;
    }

    lpHost = gethostbyname("localhost");

    if (NULL == (sp = getservbyname("syslog", "udp"))) {
        return;
    }

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(sp->s_port);
    sin.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list);

    sendto(finet, szLine, strlen(szLine), 0, (PSOCKADDR)&sin,
           sizeof(SOCKADDR));
    closesocket(finet);
    WSACleanup();
}