首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言圖形與系統函數參考指南(I 開頭函數)

     編輯:關於C語言

C語言圖形與系統函數參考指南:I 開頭函數詳解

本文匯總了 C 語言中以字母 I 開頭的常用圖形、硬體存取、中斷處理及字串轉換函數,涵蓋 Borland Graphics Interface (BGI)、DOS 系統呼叫、硬體埠操作等領域,附完整語法、參數說明與實戰範例,供開發者快速查閱與學習。

imagesize — 計算位圖所需記憶體大小

功能:回傳儲存指定矩形區域位圖影像所需的位元組數,常搭配 getimage 與 malloc 實現影像快取與動畫。

原型:

unsigned far imagesize(int left, int top, int right, int bottom);

參數:left, top, right, bottom 定義矩形區域的左上與右下座標。

範例:繪製箭頭並以 XOR 模式移動製造動畫效果。

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

#define ARROW_SIZE 10

void draw_arrow(int x, int y);

int main(void) {
    int gdriver = DETECT, gmode, errorcode;
    void *arrow;
    int x, y, maxx;
    unsigned int size;

    initgraph(&gdriver, &gmode, "");
    errorcode = graphresult();
    if (errorcode != grOk) {
        printf("Graphics error: %s\n", grapherrormsg(errorcode));
        getch();
        exit(1);
    }

    maxx = getmaxx();
    x = 0;
    y = getmaxy() / 2;
    draw_arrow(x, y);

    size = imagesize(x, y - ARROW_SIZE, x + 4 * ARROW_SIZE, y + ARROW_SIZE);
    arrow = malloc(size);
    getimage(x, y - ARROW_SIZE, x + 4 * ARROW_SIZE, y + ARROW_SIZE, arrow);

    while (!kbhit()) {
        putimage(x, y - ARROW_SIZE, arrow, XOR_PUT);
        x += ARROW_SIZE;
        if (x >= maxx) x = 0;
        putimage(x, y - ARROW_SIZE, arrow, XOR_PUT);
    }

    free(arrow);
    closegraph();
    return 0;
}

void draw_arrow(int x, int y) {
    moveto(x, y);
    linerel(4 * ARROW_SIZE, 0);
    linerel(-2 * ARROW_SIZE, -1 * ARROW_SIZE);
    linerel(0, 2 * ARROW_SIZE);
    linerel(2 * ARROW_SIZE, -1 * ARROW_SIZE);
}

initgraph — 初始化圖形系統

功能:偵測或指定顯示卡驅動程式與模式,啟動 BGI 圖形環境。

原型:

void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver);

關鍵點:graphdriver 設為 DETECT 可自動偵測;pathtodriver 為驅動程式路徑(空字串表當前目錄)。初始化後必須檢查 graphresult() 確認是否成功。

int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk) { /* 錯誤處理 */ }
line(0, 0, getmaxx(), getmaxy()); // 畫對角線測試
closegraph();

inport / inp — 從硬體埠讀取資料

功能:從指定 I/O 埠讀取一字(16 位元)或一位元組(8 位元),用於底層硬體控制。

原型:

int inport(int portid);   // 讀取字
int inp(int portid);      // 讀取位元組
#include <dos.h>
#include <stdio.h>

int main(void) {
    int port = 0x3F8; // COM1 資料埠
    int val = inport(port);
    printf("Port 0x%X = 0x%X\n", port, val);
    return 0;
}

insline — 在文字視窗插入空行

功能:在游標位置插入一空白行,原本該行及以下內容下移,最底行捲出視窗。

void insline(void);
#include <conio.h>

int main(void) {
    clrscr();
    cprintf("Line 1\r\nLine 2\r\nLine 3\r\n");
    gotoxy(1, 2);
    getch();
    insline(); // 第 2 行變空白,原本第 2、3 行下移
    getch();
    return 0;
}

installuserdriver — 註冊使用者自訂裝置驅動程式

功能:將第三方或自行開發的 BGI 驅動程式加入驅動表,支援非標準顯示卡。

int far installuserdriver(char far *name, int (*detect)(void));

detect 函式回傳建議模式號或 grError。註冊後仍需呼叫 initgraph 初始化。

installuserfont — 載入外部字型檔 (.CHR)

功能:安裝未內建於 BGI 的向量字型,供 settextstyle 使用。

int far installuserfont(char far *name);
int font = installuserfont("USER.CHR");
settextstyle(font, HORIZ_DIR, 4);
outtextxy(100, 100, "Custom Font");

int86 / int86x — 8086 軟體中斷呼叫

功能:觸發指定中斷向量,傳入/傳出通用暫存器結構 REGS;int86x 額外支援段暫存器 SREGS(跨段呼叫)。

int int86(int intr_num, union REGS *in, union REGS *out);
int int86x(int intr_num, union REGS *in, union REGS *out, struct SREGS *seg);

範例:int86(0x10, &regs, &regs) 呼叫 BIOS 影片服務設定游標位置。

intdos / intdosx — DOS 系統呼叫 (中斷 0x21)

功能:直接呼叫 DOS 服務,intdosx 支援段暫存器,適合遠端指標檔案操作。

int intdos(union REGS *in, union REGS *out);
int intdosx(union REGS *in, union REGS *out, struct SREGS *seg);

範例:刪除檔案 (AH=0x41)。

intr — 通用中斷介面 (含旗標暫存器)

功能:使用 REGPACK 結構完整存取所有暫存器與旗標,彈性最高。

void intr(int intr_num, struct REGPACK *preg);

ioctl — 裝置 I/O 控制

功能:對開啟的裝置代碼發出控制指令,如查詢磁碟是否可移除。

int ioctl(int handle, int cmd, int *argdx, int argcx);
// 查詢預設磁碟機是否為可移除裝置
stat = ioctl(0, 8, 0, 0); // handle=0 (stdin), cmd=8

isatty — 判斷裝置類型

功能:檢查檔案代碼是否對應字元裝置 (如螢幕、印表機),而非區塊裝置 (磁碟檔)。

int isatty(int handle);

itoa — 整數轉字串

功能:將整數依指定基數 (2, 8, 10, 16…) 轉為以 null 結尾的字串。

char *itoa(int value, char *string, int radix);
char buf[20];
itoa(12345, buf, 16); // buf = "3039"

提示:上述函數多屬 Borland Turbo C / Borland C++ 專用擴充,現代跨平台開發建議改用標準 C 函式庫或平台獨立圖形庫 (SDL, OpenGL 等)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved