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

C語言系統與圖形進階函數參考(S 開頭函數第 1 部分)

     編輯:關於C語言

C語言 S 開頭函數詳解 (第 1 部分):sbrk 到 setviewport

本文延續字母分類系列,詳細說明以 S 開頭的系統層級、圖形模式、串流控制與環境設定函數,涵蓋 sbrk、scanf 格式化輸入、searchpath、BGI 繪圖函數 (sector, setcolor, setfillstyle 等)、視口管理 (setviewport)、調色板操作、文字對齊、字型設定、中斷向量安裝 (setvect) 等核心功能。

sbrk — 調整資料段斷點

功能:將程式資料段結尾向上/向下移動 incr 位元組,回傳舊斷點位址。coreleft() 可查詢剩餘堆疊空間。

char *sbrk(int incr);

範例:

printf("Before: %lu bytes free\n", coreleft());
sbrk(1000);
printf("After : %lu bytes free\n", coreleft());

scanf — 格式化標準輸入

功能:從 stdin 依格式字串讀取資料,回傳成功轉換項目數。支援 %d, %f, %s, %[set] 掃描集等。

常見陷阱:scanf 留下換行符於緩衝區,後續 gets/getchar 會誤讀。建議搭配 fflush(stdin) (非標準) 或改用 fgets+sscanf。

int n; float f; char str[20];
scanf("%d %f %19s", &n, &f, str);

searchpath — 搜尋 PATH 環境變數中的檔案

char *searchpath(const char *filename);

找到回傳完整路徑指標 (靜態緩衝區),找不到回傳 NULL。

BGI 圖形進階函數

sector — 繪製並填充橢圓扇形

void far sector(int x, int y, int stangle, int endangle, int xrad, int yrad);

角度單位為度,0 度在 3 點鐘方向,逆時針增加。搭配 setfillstyle 設定填充樣式。

setactivepage / setvisualpage — 多頁面動畫

void far setactivepage(int page);   // 繪圖目標頁
void far setvisualpage(int page);   // 顯示頁

支援雙緩衝動畫:在非可見頁繪圖,完成後切換 setvisualpage 避免閃爍。

調色板控制

  • setpalette(index, color):單一調色板項目對應實際色號。
  • setallpalette(struct palette *p):一次載入整組調色板。
  • setrgbpalette(color, r, g, b):VGA/8514 直接設定 RGB 分量 (0-63)。

setbkcolor / setcolor — 背景色與前景色

void far setbkcolor(int color);  // 背景色索引
void far setcolor(int color);    // 繪圖色索引

填充樣式

void far setfillstyle(int pattern, int color);      // 內建樣式
void far setfillpattern(char far *pattern, int color); // 使用者 8x8 模式

pattern 內建常數:SOLID_FILL, HATCH_FILL, USER_FILL 等。

文字屬性

  • settextstyle(font, direction, size):向量字型、水平/垂直、放大倍率。
  • settextjustify(horiz, vert):對齊基準點,LEFT_TEXT/CENTER_TEXT/RIGHT_TEXT。
  • setusercharsize(multx, divx, multy, divy):微調向量字型寬高比例。

視口與裁剪

void far setviewport(int left, int top, int right, int bottom, int clip);

建立繪圖邊界,clip=1 開啟裁剪,座標系統相對視口原點 (0,0)。

線條樣式

void far setlinestyle(int style, unsigned pattern, int thickness);

style:SOLID_LINE, DOTTED_LINE, USERBIT_LINE (自訂 16-bit pattern)。

系統環境與串流控制

函數功能原型
setdate設定 DOS 日期void setdate(struct date *d);
settime設定 DOS 時間void settime(struct time *t);
setdisk設定預設磁碟機 (0=A:)int setdisk(int drive);
setdta設定磁碟傳輸區 (DTA) 位址void setdta(char far *dta);
setverify開啟/關閉寫入後驗證void setverify(int value);
setcbrk設定 Ctrl-Break 檢查頻率int setcbrk(int value);
setbuf指定串流緩衝區void setbuf(FILE *fp, char *buf);
setvbuf完整控制串流緩衝模式int setvbuf(FILE *fp, char *buf, int mode, size_t size);
setmode切換檔案文字/二進位模式int setmode(int fd, int mode);
setblock調整已配置記憶體區塊大小int setblock(int seg, int newsize);
setjmp非區域跳轉設定點int setjmp(jmp_buf env);
setmem填充記憶體區塊 (Turbo C)void setmem(void *addr, int len, char val);
setftime設定檔案日期時間int setftime(int fd, struct ftime *ft);
setgraphbufsize調整內部圖形緩衝區大小unsigned far setgraphbufsize(unsigned size);
setgraphmode切換圖形模式並清螢幕void far setgraphmode(int mode);

中斷向量管理

void setvect(int intr_num, void interrupt (*isr)());

安裝自訂中斷服務常式 (ISR),搭配 getvect 保存原向量,keep() 可做成 TSR。注意:ISR 內不可呼叫非重入函式 (如 printf, malloc)。

segread — 讀取段暫存器

void segread(struct SREGS *segs);

取得當前 CS, DS, ES, SS 值,常用於 intdosx、int86x 前準備段暫存器。


提示:本文函數多為 Borland C/C++ (DOS 16-bit) 專用,現代開發請參考 POSIX (open, read, write)、ANSI C (stdio.h, stdlib.h) 或跨平台圖形庫 (SDL, OpenGL)。

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