⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newtype.c

📁 sco unix 前台界面开发程序,采用UNIX中的词法分析器和语法分析器
💻 C
字号:
#include <stdio.h>#include <ctype.h>#include <stdarg.h>#include <stdlib.h> #include <form.h>#include <string.h>#include "screen.h"#include "myform.h"#include "protime.h"#include "public.h"#include "newtype.h"//创建金额类型 static char *make_amount(va_list *ap){	AMOUNT *n = (AMOUNT *)malloc(sizeof(AMOUNT));	if(n) {		n->prec = va_arg(*ap, int);		n->vmin = va_arg(*ap, double);		n->vmax = va_arg(*ap, double);	}	return (char *)n;}static char *copy_amount(char *arg){	AMOUNT *n = (AMOUNT *)malloc(sizeof(AMOUNT));	if(n) *n = *((AMOUNT *)arg);	return (char *)n;}static void free_amount(char *arg){    free(arg);}   static int ccheck_amount(int c, char *arg){    return (isdigit(c) || c =='.');}static int fcheck_amount(FIELD *f, char *arg){	int rows, cols, frow, fcol, nrow, nbuf;  	WINDOW *w;		AMOUNT *n = (AMOUNT *)arg;	double vmin = n->vmin;	double vmax = n->vmax;	char *x = GetVal(f);	char buf[30];	if(atof(Trim(x)) < n->vmin || atof(Trim(x)) > n->vmax) 		return(FALSE);	PrintAmt(buf, atof(x), n->prec);   	set_field_buffer(f, 0, buf);   	return TRUE;}   FIELDTYPE *TYPE_AMOUNT;void creat_amount(){   TYPE_AMOUNT = new_fieldtype(fcheck_amount, ccheck_amount);   set_fieldtype_arg(TYPE_AMOUNT, make_amount, copy_amount, free_amount);}void cancel_amount(){	free_fieldtype(TYPE_AMOUNT);}//创建正文类型数据static int fcheck_text(FIELD *f, char *arg){	//char *x = field_buffer(f, VALBUF);	//set_field_buffer(f, VALBUF, field_buffer(f, DSPBUF));	//return(!IsBlank(x));	return(TRUE);}static int ccheck_text(int c, char *arg){	return(c > 32 ? TRUE : FALSE);}   FIELDTYPE* TYPE_TEXT;void creat_text(){	TYPE_TEXT = new_fieldtype(fcheck_text, ccheck_text);}void cancel_text(){	free_fieldtype(TYPE_TEXT);}//创建中文正文类型数据static int fcheck_ctext(FIELD *f, char *arg){	//char *x = field_buffer(f, VALBUF);	//set_field_buffer(f, VALBUF, field_buffer(f, DSPBUF));	//return(!IsBlank(x));	return(TRUE);}static int ccheck_ctext(int c, char *arg){	return(c > 0x80 ? TRUE : FALSE);}   FIELDTYPE* TYPE_CTEXT;void creat_ctext(){	TYPE_TEXT = new_fieldtype(fcheck_ctext, ccheck_ctext);}void cancel_ctext(){	free_fieldtype(TYPE_CTEXT);}//创建英文正文类型数据static int fcheck_etext(FIELD *f, char *arg){	//char *x = field_buffer(f, VALBUF);	//set_field_buffer(f, VALBUF, field_buffer(f, DSPBUF));	//return(!IsBlank(x));	return(TRUE);}static int ccheck_etext(int c, char *arg){	return(c < 0x80 ? TRUE : FALSE);}   FIELDTYPE* TYPE_ETEXT;void creat_etext(){	TYPE_TEXT = new_fieldtype(fcheck_etext, ccheck_etext);}void cancel_etext(){	free_fieldtype(TYPE_ETEXT);}//创建数字类型数据static int fcheck_digit(FIELD *f, char *arg){	//char *x = field_buffer(f, VALBUF);	//set_field_buffer(f, VALBUF, field_buffer(f, DSPBUF));	//return(!IsBlank(x));	return(TRUE);}static int ccheck_digit(int c, char *arg){	return (isdigit(c));}   FIELDTYPE* TYPE_DIGIT;void creat_digit(){	TYPE_TEXT = new_fieldtype(fcheck_digit, ccheck_digit);}void cancel_digit(){	free_fieldtype(TYPE_DIGIT);}//创建日期类型static int ccheck_date(int c, char *arg){	return isdigit(c);}static int fcheck_date(FIELD *f, char *arg){	char *x = GetVal(f);	char buf[11];	int d = atoi(Trim(x));	int rows, cols, frow, fcol, nrow, nbuf;  	WINDOW *w;	if(!IsDate(d)) return(FALSE);	memset(buf, 0, sizeof(buf));	sprintf(buf, "%04d/%02d/%02d", 		GetYmd(d, 'Y'), GetYmd(d, 'M'), GetYmd(d, 'D'));	set_field_buffer(f, VALBUF, buf);	return(TRUE);}   FIELDTYPE *TYPE_DATE;void creat_date(){	TYPE_DATE = new_fieldtype(fcheck_date, ccheck_date);}void cancel_date(){	free_fieldtype(TYPE_DATE);}//创建列表类型static char *make_list(va_list *ap){	LIST *n = (LIST *)malloc(sizeof(LIST));	if(n) {		n->y = va_arg(*ap, int);		n->len = va_arg(*ap, int);		strcpy(n->name, va_arg(*ap, char *));	}	return (char *)n;}static char *copy_list(char *arg){	LIST *n = (LIST *)malloc(sizeof(LIST));	if(n) *n = *((LIST *)arg);	return (char *)n;}static void free_list(char *arg){	free(arg);}   static int ccheck_list(int c, char *arg){    return(c > 32 ? TRUE : FALSE);}static int fcheck_list(FIELD *f, char *arg){	FILE *fp;	LIST *n = (LIST *)arg;	char *x = Trim(field_buffer(f, 0));	char buf[160], disp[80], code[9];	WINDOW* w;   	int rows, cols, frow, fcol, nrow, nbuf;	if( n->name == NULL) return(FALSE);	if((fp = fopen(n->name,"r")) == NULL) return(FALSE);	w = form_sub(f->form);	memset(buf, 0 ,sizeof(buf));	while((fscanf(fp, "%[^\n]\n", buf) != EOF)) {		memset(code, 0, sizeof(code));		GetString(code, buf, 1, '|');		if(strcmp(Trim(code), x) == 0) {			memset(disp, 0, sizeof(disp));			GetString(disp, buf, 2, '|');   			field_info(f, &rows, &cols, &frow, &fcol, &nrow, &nbuf);   			mvwaddstr(w, frow, fcol + cols + 1, disp);   			wrefresh(w);   			fclose(fp);   			return(TRUE);   		}   	}   	fclose(fp);   	return(FALSE);}FIELDTYPE* TYPE_LIST;void creat_list(){	TYPE_LIST = new_fieldtype(fcheck_list, ccheck_list);	set_fieldtype_arg(TYPE_LIST, make_list, copy_list, free_list);}void cancel_list(){   free_fieldtype(TYPE_LIST);}void CreateType(){    creat_amount();    creat_text();    creat_ctext();    creat_etext();    creat_digit();    creat_date();    	creat_list();}void CancelType(){    cancel_amount();    cancel_text();    cancel_ctext();    cancel_etext();    cancel_digit();    cancel_date();    cancel_list();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -