Đây là lệnh cgmNCARG có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
CGM_open, CGM_close, CGM_lseek, CGM_read, CGM_write, CGM_directory, CGM_freeDirectory,
CGM_printDirectory, CGM_getInstr, CGM_flushGetInstr, CGM_putInstr, CGM_flushOutputInstr,
CGM_initMetaEdit, CGM_termMetaEdit, CGM_copyFrames, CGM_deleteFrames, CGM_mergeFrames
CGM_moveFrames, CGM_readFrames, CGM_valid, CGM_writeFile, CGM_writeFrames,
CGM_appendFrames - Hoạt động siêu tệp đồ họa máy tính
TỔNG HỢP
#include
Cgm_fd CGM_open (metafile, kích thước, cờ, chế độ)
xe tăng * siêu tệp;
unsigned kích thước;
int những lá cờ;
int chế độ;
int CGM_close (cgm_fd)
Cgm_fd cgm_fd;
int CGM_lseek (cgm_fd, bù lại)
Cgm_fd cgm_fd;
int bù lại;
int CGM_read (cgm_fd, buf)
Cgm_fd cgm_fd;
unsigned xe tăng * buf;
int CGM_write (cgm_fd, buf)
Cgm_fd cgm_fd;
unsigned xe tăng * buf;
thư mục * CGM_directory (cgm_fd)
Cgm_fd cgm_fd;
làm mất hiệu lực CGM_freeDirectory (dir)
thư mục * dir;
làm mất hiệu lực CGM_printDirectory (dir)
thư mục * dir;
int CGM_getInstr (cgm_fd, hướng dẫn)
Cgm_fd cgm_fd;
Hướng dẫn * hướng dẫn;
làm mất hiệu lực CGM_flushGetInstr (cgm_fd)
Cgm_fd cgm_fd;
int CGM_putInstr (cgm_fd, hướng dẫn)
Cgm_fd cgm_fd;
Hướng dẫn * hướng dẫn;
int CGM_flushOutputInstr (cgm_fd)
Cgm_fd cgm_fd;
thư mục * CGM_initMetaEdit (siêu tệp, kích thước)
xe tăng * siêu tệp;
unsigned int kích thước;
int CGM_termMetaEdit ()
thư mục * CGM_copyFrames (bắt đầu, số, mục tiêu )
unsigned int khởi đầu;
int số;
unsigned int Mục tiêu;
thư mục * CGM_deleteFrames (bắt đầu, số)
unsigned int bắt đầu
số;
thư mục * CGM_mergeFrames (dưới cùng, hàng đầu)
unsigned đáy, hàng đầu;
thư mục * CGM_moveFrames (bắt đầu, số, Mục tiêu)
unsigned int bắt đầu số, Mục tiêu;
thư mục * CGM_readFrames (metafile, bắt đầu số, mục tiêu, kích thước)
xe tăng * siêu tệp;
unsigned int khởi đầu;
int số;
unsigned int mục tiêu, kích thước;
int *CGM_validCGM(siêu tệp)
xe tăng * siêu tệp;
int CGM_writeTệp(siêu tệp)
xe tăng * siêu tệp;
int CGM_writeFrames (metafile, bắt đầu số)
xe tăng * siêu tệp;
unsigned bắt đầu số;
int CGM_appendFrames (metafile, bắt đầu số)
xe tăng * siêu tệp;
unsigned bắt đầu số;
MÔ TẢ
Đối số cgm_fd đề cập đến một bộ mô tả tệp hợp lệ được tạo để đọc hoặc ghi, như
thích hợp bởi CGM_open. CGM_đọc, CGM_thư mục, CGM_getInstr và CGM_flushGetInstr
yêu cầu mở bộ mô tả tệp để đọc. CGM_write, CGM_getInstr,CGM_flushGetInstr và
CGM_flushOutputInstr yêu cầu một Cgm_fd mở để viết. CGM_đóng và CGM_lseek sẽ
chấp nhận bất kỳ hợp lệ Cgm_fd.
Sản phẩm kích thước đối số đề cập đến kích thước bản ghi CGM tính bằng byte. Đối với NCAR CGM, giá trị này là
1440.
buf là một con trỏ tới bộ nhớ do người dùng cấp phát có kích thước kích thước. Bộ nhớ này sẽ được sử dụng cho
đệm đầu vào và đầu ra của CGM_đọc và CGM_write tương ứng.
Sản phẩm dir đối số là một con trỏ đến một thư mục cấu trúc được tạo ra với CGM_thư mục or
CGM_initMetaSửa đổi. dir là một nguồn tư nhân nên KHÔNG được sửa đổi trực tiếp bởi
người sử dụng. Một tập hợp các macro tiện lợi được cung cấp cho mục đích này trong cgm_tools.h.
Sản phẩm Bắt đầu, num và mục tiêu các đối số được sử dụng để giải quyết số khung trong một siêu tệp là
được chỉnh sửa bằng một trong các lệnh: CGM_copyFrames, CGM_deleteKhung hình, CGM_readFrames,
CGM_moveKhung, CGM_writeFrames và CGM_mergeKhung. Các Bắt đầu đối số là đầu tiên
khung trong một chuỗi num (các) khung để thực hiện thao tác chỉnh sửa. mục tiêu tương tự
đến Bắt đầu và được sử dụng bởi các lệnh yêu cầu hai địa chỉ khung, chẳng hạn như bản sao. Địa chỉ
bắt đầu từ số không.
CGM_open
Lệnh này được mô phỏng theo unix mở chỉ huy. Nó sẽ mở một CGM để đọc
hoặc viết như được chỉ định bởi cờ đối số và trả về một Cgm_fd bộ mô tả tệp.
Sản phẩm cờ và mở các tham số được chuyển trực tiếp vào hệ thống mở chỉ huy.
Để có lời giải thích chi tiết về hai lập luận này, hãy xem mở(2).
CGM_đóng
Xóa bộ mô tả tệp. Sự nghịch đảo của CGM_open. Thấy gần(2).
CGM_đọc
CGM_đọc cố gắng đọc kích thước byte từ đối tượng được tham chiếu qua
bộ mô tả cgm_fd. kích thước được thiết lập khi tạo ra cgm_fd by CGM_open. CGM_đọc
trả về số byte đã đọc thành công. Một số XNUMX được trả về trên EOF và một
số âm có nghĩa là đã xảy ra lỗi. Lệnh gọi hệ thống unix đọc được gọi bởi
CGM_đọc. Thấy đọc(2).
CGM_write
Cố gắng viết một bản ghi về kích thước byte từ buf từ đối tượng được tham chiếu
by cgm_edit Ở đâu kích thước là thông số kích thước bản ghi được cung cấp khi tạo
cgm_fd. viết trả về số byte được ghi thành công. Lợi tức âm
số có nghĩa là đã xảy ra lỗi. Lệnh gọi hệ thống unix viết được gọi bởi
CGM_write. Thấy viết(2).
CGM_lseek
Nâng cao con trỏ tệp của cgm_fd đến bù đắp byte. Sau khi hoàn thành thành công
phần bù con trỏ tệp hiện tại được trả về. Giá trị trả về âm là một lỗi. Các
cuộc gọi hệ thống unix tìm kiếm được gọi bởi CGM_lseek. Thấy tìm kiếm(2).
CGM_thư mục
Tạo mục lục cho siêu tệp được tham chiếu bởi cgm_fd. Trả lại một con trỏ
đến bảng loại này thư mục. Nội dung của thư mục bao gồm số
siêu tệp, số lượng khung hình, độ lệch bản ghi cho mỗi khung hình, độ dài khung hình trong bản ghi,
mô tả khung tùy chọn và trạng thái siêu tệp. Những trường này được dùng để đọc
chỉ và chỉ nên được tham chiếu bởi các macro tiện lợi được cung cấp trong
cgm_tools.h. Một con trỏ NULL được trả về khi bị lỗi.
CGM_freeThư mục
Bộ nhớ trống được phân bổ cho một thư mục được tạo bởi CGM_thư mục or CGM_initMetaSửa đổi.
Thư mục CGM_print
In nội dung của một thư mục được trỏ tới dir đến đầu ra tiêu chuẩn.
CGM_getInstr,
Tìm nạp hướng dẫn tiếp theo trong tệp được tham chiếu bởi cgm_edit và chuyển đổi nó thành một
định dạng có thể sử dụng được trỏ tới Bars. CGM_getInstr cung cấp một giao diện cho
metafile để trích xuất các phần tử CGM. Người dùng không cần quan tâm đến
định dạng nhị phân của siêu tệp. Các lĩnh vực của Hướng dẫn được mô tả trong
cgm_tools.h. Người dùng cần lưu ý rằng độ dài dữ liệu cho phép tối đa được trả về
trong một lời kêu gọi duy nhất là 32760 byte. Tiêu chuẩn CGM cho phép tối đa 32767 byte
được lưu trữ trong một hướng dẫn duy nhất. Nhưng 32767 không phải là một con số đẹp để làm việc.
Nếu độ dài dữ liệu của một lệnh CGM vượt quá 32760 byte, được chỉ ra bởi
boolean chi tiết cờ, lời kêu gọi tiếp theo của CGM_getInstr sẽ trả lại phần còn lại
dữ liệu lên đến cùng một giới hạn, v.v. CGMgetInstr yêu cầu một hợp lệ Cgm_fd mở cho
đọc hiểu. Để biết mô tả về CGM, hãy xem tiêu chuẩn ANSI.
CGM_flushGetInstr
Xả bộ đệm đầu vào được sử dụng bởi CGM_getInstr. CGM_getInstr đệm nội dung của
CGM và chỉ thực hiện các lần đọc thực tế khi cần thiết. Nếu người dùng mong muốn khác thì
quyền truy cập đọc tuần tự vào CGM, điều đó trở nên cần thiết để xóa bộ đệm đầu vào
trước khi đọc từ một vị trí mới.
CGM_putInstr
Tương tự với CGM_getInstr. Hàm này đệm các lệnh CGM được ghi vào
một CGM được tham chiếu bởi cgm_fd. Một lần nữa, người dùng không cần quan tâm đến hệ nhị phân
định dạng của tệp. Ghi được thực hiện tuần tự trong kích thước bản ghi kích thước as
được chỉ định trong quá trình tạo cgm_fd. Các ràng buộc về độ dài dữ liệu giống nhau
đặt trên CGM_getInstr giữ cho CGM_putInstr. Nếu người dùng muốn xuất
hướng dẫn có độ dài dữ liệu lớn hơn 32760 byte thì dữ liệu phải
được chia thành các khối không lớn hơn kích thước này. Người dùng cũng phải đặt boolean
chi tiết cờ trong Hướng dẫn. cgm_fd phải là một bộ mô tả tệp hợp lệ mở để viết.
Để có mô tả về các trường của Hướng dẫn xem tập tin cgm_tools.h.
CGM_flushOutputInstr
Xả bộ đệm đầu ra được sử dụng bởi CGM_putInstr cho tệp được tham chiếu bởi cgm_fd. Nó
là cần thiết để xóa rõ ràng bộ đệm đầu ra được sử dụng bởi CGM_putInstr trước
tệp bị đóng hoặc bất kỳ truy cập ngẫu nhiên nào được thực hiện. Nếu không, không phải tất cả các phần tử CGM
thực sự sẽ được viết.
CGM_initMetaSửa đổi
Khởi tạo một siêu tệp để chỉnh sửa. Đây là quy trình khởi tạo cho
các quy trình chỉnh sửa cấp cao hơn có trong gói này: CGM_copyFrames,
CGM_deleteKhung hình, CGM_readFrames, CGM_moveKhung, CGM_writeTệp, CGM_writeFrames,
và CGM_mergeKhung. Các quy trình này chỉ hoạt động trên một siêu tệp tại một thời điểm (
có tên trong CGM_initMetaSửa đổi. Gọi thói quen này lần thứ hai mà không
Lưu một cách rõ ràng mọi thay đổi sẽ có tác dụng tải một tệp mới và
loại bỏ tất cả các thay đổi được thực hiện trong tệp trước đó. CGM_initMetaSửa đổi và tất cả
tiến hành chỉnh sửa các chức năng làm cho các thay đổi đối với tệp trả về một con trỏ đến một
thư mục như một sự tiện lợi cho phép người dùng kiểm tra trạng thái của tệp.
Nội dung của thư mục là riêng tư và người dùng KHÔNG được thay đổi. MỘT
tập hợp các macro được cung cấp trong cgm_tools.h được sử dụng để truy xuất thư mục của
nội dung. Chú thích: không có thay đổi nào thực sự được thực hiện đối với tệp chỉnh sửa trừ khi nó
được ghi đè rõ ràng bằng một trong hai CGM_writeTệp or CGM_writeFrames.
CGM_termMetaSửa đổi
Kết thúc phiên chỉnh sửa bắt đầu bằng CGM_initMetaSửa đổi. Thói quen này nên
được gọi sau khi bất kỳ thay đổi chỉnh sửa nào đã được lưu, nếu muốn lưu chúng, và
trước khi thoát khỏi phiên chỉnh sửa. CGM_termMetaSửa đổi giải phóng các nguồn tài nguyên có giá trị.
CGM_copyFrames
Sao chép num khung bắt đầu bằng Bắt đầu đến khung được giải quyết bởi mục tiêu. Nếu mục tiêu is
đã bị chiếm đóng thì các khung nguồn được chèn vào vị trí của nó trong khi mục tiêu
khung và tất cả các khung tiếp tục, là nâng cao. CGM_bản sao hoạt động trên tệp
khởi tạo bởi CGM_initMetaSửa đổi (tập tin chỉnh sửa). Khi hoàn thành thành công một con trỏ
đến thư mục hiện tại được trả lại. Khi bị lỗi, một con trỏ NULL được trả về.
CGM_deleteKhung hình
Xóa bỏ num khung từ tệp chỉnh sửa bắt đầu bằng khung Bắt đầu. Ngày thành công
hoàn thành một con trỏ đến thư mục hiện tại được trả về. Có lỗi con trỏ NULL
Được trả lại.
CGM_mergeKhung
Ghi đè nội dung của khung được giải quyết dưới cùng với sự kết hợp của khung tại
địa điểm thư viện nào dưới cùng và khung ở vị trí hàng đầu. Tác dụng của lệnh này là
tương đương với việc vẽ hàng đầu khung trên đầu trang của dưới cùng khung. Nó không phải là một công đoàn
theo đúng nghĩa của từ này. Khi hoàn thành thành công, một con trỏ đến hiện tại
thư mục được trả lại. Khi bị lỗi, một con trỏ NULL được trả về.
CGM_moveKhung
Di chuyển một khối num khung từ tệp chỉnh sửa bắt đầu bằng khung Bắt đầu đến
vị trí bị chiếm bởi khung mục tiêu Khi hoàn thành thành công, một con trỏ đến hiện tại
thư mục được trả lại. Khi bị lỗi, một con trỏ NULL được trả về.
CGM_readFrames
Đọc num khung từ metafile hồ sơ bắt đầu với khung Bắt đầu. Chèn các khung tại
địa chỉ mục tiêu trong tệp chỉnh sửa. Khi hoàn thành thành công, một con trỏ đến hiện tại
thư mục được trả lại. Khi bị lỗi, một con trỏ NULL được trả về.
CGM_validCGM
Xác định xem một tệp có phải là NCAR CGM hợp lệ hay không. Chức năng này thực hiện một số
chẩn đoán đơn giản trong nỗ lực xác định xem một tệp nhất định có nằm trong NCAR hay không
Định dạng CGM. Các bài kiểm tra được thực hiện không nghiêm ngặt và có thể hình dung rằng
thông tin truy xuất không chính xác. Trả về 1 cho biết NCAR CGM hợp lệ. MỘT
trả về 0 cho biết tệp không phải là CGM NCAR. Trả về -1 cho biết lỗi
đã xảy ra và biến toàn cục `errno 'được đặt tương ứng.
CGM_writeTệp
Ghi toàn bộ nội dung của tệp chỉnh sửa hiện tại vào hồ sơ. CGM_writeTệp Trả về
một số nguyên khi thành công và một số âm khi thất bại.
CGM_writeFrames
Viết một khối num khung bắt đầu bằng khung Bắt đầu đến hồ sơ. Các khung nguồn
đến từ tập tin chỉnh sửa. Lưu ý: Khung CGM được chứa trong một trình bao bọc tạo thành
CGM dấu phân cách các yếu tố. Tệp được tạo bởi CGM_writeFrames sẽ sử dụng vỏ bánh
được cung cấp bởi tệp chỉnh sửa hiện tại. Do đó, nếu một tập tin foo chứa n khung đó là
đọc vào một phiên chỉnh sửa với một tệp goo và sau đó những khung tương tự này được viết
ra một tập tin ngoằn ngoèo, ngoằn ngoèo có thể giống hoặc không giống với bản gốc foo.
CGM_writeFrames trả về một số nguyên khi thành công và một số âm vào
thất bại.
CGM_appendKhung hình
Nối một khối num khung bắt đầu bằng khung Bắt đầu đến hồ sơ. hồ sơ phải rồi
tồn tại và là một CGM NCAR hợp lệ. CGM_appendKhung hình trả về số nguyên một khi thành công
và một số âm về sự thất bại.
Sử dụng cgmNCARG trực tuyến bằng các dịch vụ onworks.net