home *** CD-ROM | disk | FTP | other *** search
- /* XEDIT v1.16 copyright (c) 1990 by M. Kimes */
-
- #include "msgg.h"
- #include "twindow.h"
- #include "keys.h"
-
- char msk78[]="______________________________________________________________________________";
- #define msk35 msk78+43
- #define mskst msk35+33
- #define mskzip msk35+30
- #define mskcit msk35+11
- #define msk1 msk78+77
- #define msk3 msk35+32
- #define msk4 msk35+31
- #define msk5 msk35+30
- #define msk6 msk35+29
- #define msk47 msk78+31
- #define msk46 msk78+32
- #define msk51 msk78+28
- #define msk40 msk46+6
- #define msk39 msk46+7
- #define msk12 msk78+66
- #define msk65 msk78+13
- #define msk19 msk78+59
- #define msk26 msk78+52
- #define msk24 msk78+54
- #define msk58 msk78+20
- #define msk10 msk78+68
-
- #define MAXNUMDIRS 1024
- #define MAXNUMAREA 1024
- #define MAXPROTOCOLS 130
- #define MAXARCHIVERS 256
- #define MAXDOORS 4096
-
- WINDOW *wnd4=NULL;
-
- struct _mmboard {
- char name[48];
- char forceto[36];
- word attr;
- word max;
- word number;
- word substat1;
- word substat2;
- char descr[79];
- signed char age;
- word flags;
- word zone;
- word net;
- word node;
- word point;
- char yourname[36];
- word minwrite;
- };
-
- struct _ffboard {
- char name[47];
- char flags;
- word security;
- char dpath[79];
- char upath[79];
- char descr[79];
- signed char age;
- word userflags;
- char leechpercent;
- };
-
- char path[99]="C:\\XBBS\\MESS\\";
- char msgareasfile[133]="C:\\XBBS\\MESS\\MSGAREAS.XBS";
- char fileareasfile[133]="C:\\XBBS\\FLSEARCH.CTL";
- char msgareasfilebackup[133]="C:\\XBBS\\MESS\\MSGAREAS.BAK";
- char fileareasfilebackup[133]="C:\\XBBS\\FLSEARCH.BAK";
- struct _mmboard huge *marea=NULL;
- struct _mmboard huge *currarea=NULL;
- word higharea;
- word maxareas=0;
- struct _ffboard huge *curdir=NULL;
- struct _ffboard huge *dir=NULL;
- word numdirs=0;
-
- struct _door {
- char name[25];
- char type[4];
- char spawn[79];
- char descr[79];
- } huge *door=NULL;
-
- word numdoors=0;
-
- struct _protocol {
- char name[25];
- char key;
- int adj;
- char spawndn[119];
- char spawnup[119];
- char abort[48];
- unsigned wild: 1;
- unsigned multi: 1;
- unsigned simul: 1;
- unsigned list: 1;
- unsigned opus: 1;
- unsigned noname: 1;
- unsigned dszlog: 1;
- unsigned reserved: 1;
- char pad1;
- char pad2;
- } huge *proto=NULL;
-
- word numprotos=0;
-
- struct _archiver {
- char ext[5];
- char move[41];
- char extract[41];
- char list[41];
- char error[41];
- char aname[13];
- char ename[13];
- char id[25];
- char pick[2];
- int skip;
- int errline;
- } huge *archiver=NULL;
- word numarchivers;
- char filename[133];
- char textname[133];
-
- void cdecl deinit(void);
- int cdecl break_handler(void);
- void pascal swap_msgareas(word,word);
- int pascal sort_msgareas(void);
- void pascal swap_fileareas(word,word);
- int pascal sort_fileareas(void);
- void pascal swap_protocols(word,word);
- int pascal sort_protocols(void);
- word pascal select_area(word);
- char * pascal msgarea_attr(void);
- char * pascal filearea_attr (char flags);
- char * pascal rstrip(char *);
- char * pascal lstrip(char *);
- char * pascal stripcr(char *);
- void pascal load_fileareas(char *);
- void pascal load_msgareas(char *);
- void pascal load_protocols(char *);
- word pascal find_msgarea(word);
- word pascal find_filearea(char *);
- word pascal list_msgareas(char *);
- word pascal list_fileareas(char *);
- word pascal list_protocols(char *);
- word pascal check_area(word);
- word pascal edit_msgarea(word);
- word pascal edit_filearea(word);
- word pascal edit_protocol(word);
- int pascal setup_msg(void);
- int pascal setup_file(void);
- int addbackslash (char *,int);
- int nomorethan4095 (char *,int);
-
- extern void pascal make_msgmenu(void);
- extern void pascal make_filemenu(void);
- extern void pascal load_archivers(char *);
- extern word pascal list_archivers(char *);
- extern word pascal edit_archiver(word);
- extern word maxx;
- extern word maxy;
- extern unsigned char usemouse;
- extern WINDOW *ewnd;
-
- extern unsigned _Cdecl _stklen = 8192; /* Stack length */
-
-
- void cdecl main () {
-
- WINDOW *wnd;
- word areano;
- int choice;
- FILE *fp;
- char *p;
- register word x;
-
- maxx=80;
- maxy=25;
- fputs("\n Copyright (c) 1990 by M. Kimes ",stdout);
- ctrlbrk(break_handler);
- atexit(deinit);
- areano=0;
- load_help(searchpath("xedit.hlp"));
-
- {
-
- long x;
-
- x=(long)getvect(0x33); /* Check for mouse driver */
- if(x!=0L) {
- _AX=0; /* Initialize mouse */
- geninterrupt(0x33);
- }
- usemouse=(unsigned char)_AX;
- if(usemouse) { /* Make sure mouse cursor stays hidden */
- _AX=2;
- geninterrupt(0x33);
- }
- }
-
- printf("\x1b[2J");
- wnd=establish_window(2,2,7,40);
- set_title(wnd," XEdit (XBBS Control File Editor) ");
- display_window(wnd);
- wprintf(wnd," [M]essage area file\n [F]ile area file\n [P]rotocol.CTL\n P[E]eker.CTL\n [Q]uit");
-
- while (1) {
- if(wnd4) {
- delete_window(wnd4);
- wnd4=NULL;
- }
- set_help("startup ",10,10);
- choice=get_selection(wnd,1,"MFPEQ");
- switch(choice) {
- set_help("",1,1);
- case 5:
- case 0: printf("\x1b[2J");
- exit(0);
- case 2: if(!setup_file()) break;
- load_fileareas(fileareasfile);
- do {
- if(numdirs)areano=list_fileareas(fileareasfile);
- if(areano || !numdirs) {
- edit_filearea(areano-1);
- }
- } while (areano || !numdirs);
- ReInput2:
- areano=0;
- any_message(" Save? (Y-n) ");
- choice=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(choice=='N' || choice==ESC) {
-
- }
- else {
- if(*fileareasfilebackup) {
- unlink(fileareasfilebackup);
- rename(fileareasfile,fileareasfilebackup);
- }
- if(!((fp=fopen(fileareasfile,"wt")))) {
- if(*fileareasfilebackup) {
- rename(fileareasfilebackup,fileareasfile);
- }
- error_message(" Unable to create new file ");
- pause_msg();
- }
- else {
- for(x=0;x<numdirs;x++) {
- while((p=strchr(dir[x].name,' '))!=NULL) *p='_';
- fprintf(fp,"%s %u %s %u %s %s,%hd,%u,%hu\n",dir[x].dpath,dir[x].security,dir[x].name,dir[x].flags,dir[x].upath,dir[x].descr,dir[x].age,dir[x].userflags,dir[x].leechpercent);
- }
- fprintf(fp,"\n");
- fclose(fp);
- }
- break;
- }
- if(dir) {
- free((struct _ffboard far *)dir);
- dir=NULL;
- numdirs=0;
- }
- break;
- case 1: if(!setup_msg()) break;
- load_msgareas(msgareasfile);
- do {
- if(maxareas)areano=list_msgareas(msgareasfile);
- if(areano || !maxareas) {
- edit_msgarea(areano);
- }
- } while (areano || !maxareas);
- ReInput:
- areano=0;
- any_message(" Save? (Y-n) ");
- choice=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(choice=='N' || choice==ESC) {
- }
- else {
- if(*msgareasfilebackup) {
- unlink(msgareasfilebackup);
- rename(msgareasfile,msgareasfilebackup);
- }
- if(!((fp=fopen(msgareasfile,"wt")))) {
- if(*msgareasfilebackup) {
- rename(msgareasfilebackup,msgareasfile);
- }
- error_message(" Unable to create new file ");
- pause_msg();
- }
- else {
- for(x=0;x<maxareas;x++) {
- fprintf(fp,"%s,%u,%u,%u,%u,%u",marea[x].name,marea[x].attr,marea[x].max,marea[x].number,marea[x].substat1,marea[x].substat2);
- fprintf(fp,",%s",marea[x].forceto);
- fprintf(fp,",%s",marea[x].descr);
- fprintf(fp,",%hd",marea[x].age);
- fprintf(fp,",%u",marea[x].flags);
- if(marea[x].zone && marea[x].net) {
- fprintf(fp,",%u:%u/%01u.%01u",marea[x].zone,marea[x].net,marea[x].node,marea[x].point);
- }
- else fprintf(fp,",");
- fprintf(fp,",%s",marea[x].yourname);
- fprintf(fp,",%u",marea[x].minwrite);
- fprintf(fp,"\n");
- }
- fprintf(fp,"\n");
- fclose(fp);
- }
- break;
- }
- if(marea) {
- free((struct _mmboard far *)marea);
- marea=NULL;
- maxareas=0;
- higharea=0;
- }
- break;
- case 3: proto=(struct _protocol huge*)malloc((MAXPROTOCOLS*sizeof(struct _protocol))+sizeof(struct _protocol));
- if (proto==NULL) {
- error_message(" No memory for protocols ");
- numprotos=0;
- exit(1);
- }
- load_protocols("Protocol.CTL");
- do {
- if(numprotos)areano=list_protocols("PROTOCOL.CTL");
- if(areano || !numprotos) {
- edit_protocol(areano-1);
- }
- } while (areano || !numprotos);
- ReInput3:
- areano=0;
- any_message(" Save? (Y-n) ");
- choice=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(choice=='N' || choice==ESC) {
- }
- else {
- if(!((fp=fopen("Protocol.CTL","wb")))) {
- error_message(" Unable to create new file ");
- pause_msg();
- }
- else {
- fwrite((void far *)proto,sizeof(struct _protocol),numprotos,fp);
- fclose(fp);
- }
- break;
- }
- if(proto) {
- free((struct _protocol far *)proto);
- proto=NULL;
- numprotos=0;
- }
- break;
- case 4: archiver=(struct _archiver huge*)malloc((MAXARCHIVERS*sizeof(struct _archiver))+sizeof(struct _archiver));
- if (archiver==NULL) {
- error_message(" No memory for archivers ");
- numarchivers=0;
- exit(1);
- }
- load_archivers("Peeker.CTL");
- do {
- if(numarchivers)areano=list_archivers("PEEKER.CTL");
- if(areano || !numarchivers) {
- edit_archiver(areano-1);
- }
- } while (areano || !numarchivers);
- ReInput4:
- areano=0;
- any_message(" Save? (Y-n) ");
- choice=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(choice=='N' || choice==ESC) {
- }
- else {
- if(!((fp=fopen("Peeker.CTL","wb")))) {
- error_message(" Unable to create new file ");
- pause_msg();
- }
- else {
- fwrite((void far *)archiver,sizeof(struct _archiver),numarchivers,fp);
- fclose(fp);
- }
- break;
- }
- if(archiver) {
- free((struct _archiver far *)archiver);
- archiver=NULL;
- numarchivers=0;
- }
- break;
- default: break;
- }
- }
- }
-
-
-
- int cdecl break_handler (void) {
-
- return 0; /* Shut down in event of CTRL-BREAK */
-
- }
-
-
-
- void cdecl deinit (void) {
-
- if(marea)free((void far *)marea);
- if(dir)free((void far *)dir);
- if(proto)free((void far *)proto);
- if(archiver)free((void far *)archiver);
- if(door)free((void far *)door);
- fcloseall();
- }
-
-
-
- void pascal load_msgareas (char *file) {
-
- FILE *fp;
- char *p;
- char *pp;
- struct ffblk f;
- static char string[256];
- word tempareas=0;
-
- if(findfirst(file,&f,0)) return;
- if(!(fp=fopen(file,"rt"))) {
- sprintf(string," Can't open %s ",file);
- error_message(string);
- pause_msg();
- return;
- }
- while (!feof(fp)) {
- if (!fgets(string,255,fp)) break;
- if (*string=='\n' || *string==';') continue;
- stripcr(string);
- strncpy(marea[tempareas].name,strtok(string,","),48);
- marea[tempareas].name[47]=0;
- marea[tempareas].attr=(word)atoi(strtok(0," ,"));
- marea[tempareas].max=(word)atoi(strtok(0," ,"));
- marea[tempareas].number=(word)atoi(strtok(0," ,"));
- marea[tempareas].substat1=(word)atoi(strtok(0," ,"));
- marea[tempareas].substat2=(word)atoi(strtok(0," ,"));
- pp=strtok(0,"\n");
- p=NULL;
- if(pp) {
- if(*pp!=',') {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(p!=NULL)strncpy(marea[tempareas].forceto,p,36);
- else *marea[tempareas].forceto=0;
- marea[tempareas].forceto[35]=0;
- p=NULL;
- if(pp && *pp) {
- if(*pp!=',') {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(!p) strcpy(marea[tempareas].descr,"No Description");
- else strncpy(marea[tempareas].descr,p,79);
- marea[tempareas].descr[78]=0;
- p=NULL;
- if(pp && *pp) {
- if(*pp!=',') {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(!p) marea[tempareas].age=0;
- else marea[tempareas].age=(signed char)atoi(p);
- p=NULL;
- if(pp && *pp) {
- if(*pp!=',') {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(!p)marea[tempareas].flags=0;
- else marea[tempareas].flags=(word)atol(p);
- p=NULL;
- if(pp && *pp) {
- if(*pp!=',') {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(!p) marea[tempareas].zone=marea[tempareas].net=marea[tempareas].node=marea[tempareas].point=0;
- else {
- p=strtok(p,":");
- marea[tempareas].zone=(word)atol(p);
- p=strtok(0,"/");
- marea[tempareas].net=(word)atol(p);
- p=strtok(0,".");
- marea[tempareas].node=(word)atol(p);
- p=strtok(0,"@");
- marea[tempareas].point=(word)atol(p);
- }
- p=NULL;
- if(*pp && pp) {
- if(*pp!=',' && *pp!=0) {
- p=strtok(pp,",");
- pp=strtok(0,"\n");
- }
- else pp++;
- }
- if(!p) *marea[tempareas].yourname=0;
- else {
- strncpy(marea[tempareas].yourname,p,36);
- marea[tempareas].yourname[35]=0;
- }
- p=NULL;
- if(*pp && pp) {
- if(*pp!=',' && *pp!=0) p=strtok(pp,"\n");
- else if(*pp)p=++pp;
- }
- if(!p) marea[tempareas].minwrite=0;
- else {
- marea[tempareas].minwrite=(word)atol(p);
- }
- if (marea[tempareas].number>higharea) higharea=marea[tempareas].number;
- tempareas++;
- }
- maxareas=tempareas;
- fclose(fp);
- }
-
-
-
-
- void pascal load_fileareas (char *file) {
-
- FILE *fp;
- char *p;
- struct ffblk f;
- static char string[256];
- word tempareas=0;
-
- if(findfirst(file,&f,0)) return;
- if(!(fp=fopen(file,"rt"))) {
- sprintf(string," Can't open %s ",file);
- error_message(string);
- pause_msg();
- return;
- }
- while (!feof(fp)) {
- if (!fgets(string,255,fp)) break;
- if (*string=='\n' || *string==';') continue;
- stripcr(string);
- strncpy(dir[tempareas].dpath,strtok(string," "),78);
- dir[tempareas].dpath[78]=0;
- if (dir[tempareas].dpath[strlen(dir[tempareas].dpath)-1]!='\\') strcat(dir[tempareas].dpath,"\\");
- dir[tempareas].security=(word)atol(strtok(0," "));
- strncpy(dir[tempareas].name,strtok(0," "),46);
- dir[tempareas].name[46]=0;
- strupr(dir[tempareas].name);
- while((p=strchr(dir[tempareas].name,'_'))!=NULL) *p=' ';
- dir[tempareas].flags=(char)atoi(strtok(0," "));
- p=strtok(0," ");
- if (p) {
- strncpy(dir[tempareas].upath,p,79);
- dir[tempareas].upath[78]=0;
- if (dir[tempareas].upath[strlen(dir[tempareas].upath)-1]!='\\') strcat(dir[tempareas].upath,"\\");
- }
- else strcpy(dir[tempareas].upath,"NUL");
- p=strtok(0,",");
- if(p) {
- if(*p==',') strcpy(dir[tempareas].descr,"No Description");
- else strncpy(dir[tempareas].descr,p,79);
- dir[tempareas].descr[78]=0;
- }
- else {
- strcpy(dir[tempareas].descr,"No Description");
- }
- p=strtok(0,",\n");
- if(p) {
- dir[tempareas].age=(signed char)atoi(p);
- }
- else dir[tempareas].age=0;
- p=strtok(0,",");
- if(p) {
- dir[tempareas].userflags=(word)atol(p);
- }
- else dir[tempareas].userflags=0;
- p=strtok(0,",\n");
- if(p) {
- dir[tempareas].leechpercent=(char)atoi(p);
- }
- else dir[tempareas].leechpercent=0;
- tempareas++;
- }
- numdirs=tempareas;
- fclose(fp);
- }
-
-
-
-
- word pascal find_msgarea (word areano) {
-
- word register x;
-
- if (!areano || !maxareas) return 0;
- for (x=0;x<maxareas;x++) {
- if (marea[x].number==areano) {
- currarea=&marea[x];
- return x+1;
- }
- }
- return 0;
- }
-
-
-
- word pascal find_filearea (char *name) {
-
- word register x;
-
- if (!*name || !name || !numdirs) return 0;
- for (x=0;x<numdirs;x++) {
- if (!strcmp(dir[x].name,name)) {
- curdir=&dir[x];
- return x+1;
- }
- }
- return 0;
- }
-
-
-
- word pascal list_msgareas (char *msgareasname) {
-
- word areano;
- char s[181];
- word lineareas[25];
- char dirstring[133];
- word counter;
- register word x;
- word temp;
- int temporary;
- int selection;
- struct ffblk f;
-
- set_help("msgarealis",18,0);
- if(wnd4)delete_window(wnd4);
- wnd4=establish_window(0,0,25,80);
- if(!wnd4) {
- printf("\nUnable to establish window...\n");
- return 0;
- }
- set_border(wnd4,1);
- sprintf(s," Listing areas in file %s ",msgareasname);
- s[76]=0;
- set_title(wnd4,s);
- display_window(wnd4);
- wcursor(wnd4,0,0);
- x=0;
- OverAgain:
- counter=0;
- for(temporary=0;temporary<25;temporary++)lineareas[temporary]=0;
- if(x>=maxareas)x=0;
- while(1) {
- areano=marea[x].number;
- temporary=find_msgarea(areano);
- sprintf(dirstring,"%sXDATA.%03x",path,areano);
- if (findfirst(dirstring,&f,0)) temp=0;
- else temp=(word)(f.ff_fsize/(long)sizeof(struct _xmsg));
- lineareas[counter]=areano;
- wprintf(wnd4,"Area#%-4u %-12.12s %-5u message(s) ",areano,currarea->name,temp);
- wprintf(wnd4,"%s %05u %-12.12s\n",msgarea_attr(),currarea->max,currarea->forceto);
- x++;
- counter++;
- if (counter>=22 || x>=maxareas) {
- wcursor(wnd4,0,22);
- wprintf(wnd4," -=Jump direct to an area #");
- break;
- }
- }
- Again:
- selection=get_selection(wnd4,1,NULL);
- if(selection>0 && selection<23) {
- if(lineareas[selection-1])areano=lineareas[selection-1];
- else {
- fputs("\x7",stdout);
- goto Again;
- }
- find_msgarea(areano);
- return areano;
- }
- switch (selection) {
- case 23: areano=select_area(currarea->number);
- if(areano) {
- find_msgarea(areano);
- return areano;
- }
- break;
- case HOME: x=0;
- break;
- case END: if(maxareas>21) x=maxareas-22;
- else x=0;
- break;
- case PGUP:
- case BS: if(x<23 && maxareas>21) {
- x=maxareas-22;
- if(x>maxareas)x=0;
- break;
- }
- if (x<21) break;
- else if (x<43) x=0;
- else x-=44;
- break;
- case PGDN:
- case FWD: if (x>=maxareas) x=0;
- else if ((maxareas-x)<22) {
- if (maxareas>21) x=maxareas-22;
- else x=0;
- }
- break;
- case 0: goto BreakOut;
- default: fputs("\x7",stdout);
- break;
- }
- counter=0;
- clear_window(wnd4);
- wcursor(wnd4,0,0);
- goto OverAgain;
- BreakOut:
- return 0;
- }
-
-
-
- word pascal check_area (word tempno) {
-
- struct ffblk f;
-
- sprintf(filename,"%sXDATA.%03x",path,tempno);
- sprintf(textname,"%sXTEXT.%03x",path,tempno);
-
- if (findfirst(filename,&f,0)) {
- return 0;
- }
-
- tempno=(word)(f.ff_fsize/(long)sizeof(struct _xmsg));
- if (f.ff_fsize<(long)sizeof(struct _xmsg) || findfirst(textname,&f,0)){
- return 0;
- }
- return tempno;
- }
-
-
-
- char * pascal rstrip (char *a)
-
- {
- while ((strlen(a)) && (a[strlen(a)-1]==' ')) a[strlen(a)-1]=0;
- return a;
- }
-
-
-
- char * pascal lstrip (char *a)
-
- {
- while ((strlen(a)) && (*a==' ')) memmove (a,(a+1),strlen(a));
- return (a);
- }
-
-
-
- char * pascal stripcr (char *a)
-
- {
-
- while (a[strlen(a)-1]=='\n' || a[strlen(a)-1]=='\r') a[strlen(a)-1]=0;
- return a;
-
- }
-
-
-
- word pascal select_area (word areano) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- char s[9];
- int returncode;
-
- Again:
- wnd6=establish_window(3,18,7,42);
- set_border(wnd6,3);
- set_title(wnd6," Area Selection ");
- set_colors(wnd6,BORDER,7,0,0);
- display_window(wnd6);
- wcursor(wnd6,0,0);
- wprintf(wnd6," F10 to change or ESC to abort\n");
- wprintf(wnd6,"\n Current: %s",msgarea_attr());
- sprintf(s,"%u",areano);
- init_template(wnd6);
- wprompt(wnd6,1,4,"Area #:");
- fld3=establish_field(wnd6,15,4,msk5,s,'N');
- field_window(fld3,"areas ",40,6);
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if (returncode==ESC) {
- delete_window(wnd6);
- return areano;
- }
- if (returncode!=F10) goto AskOver;
- delete_window(wnd6);
- if ((word)atol(s)<1) {
- find_msgarea(areano);
- return areano;
- }
- if ((word)atol(s)>4095) goto Again;
-
- if(find_msgarea((word)atol(s))) areano=(word)atol(s);
- return areano;
- }
-
-
-
- char * pascal msgarea_attr (void) {
-
- word register x;
- word temp;
- static char attrstring[22];
-
- strcpy(attrstring,"[");
- for (x=0;x<16;x++) {
- temp=1;
- temp=temp<<x;
- (currarea->attr & temp) ? strcat(attrstring,"X") : strcat (attrstring,"-");
- }
- strcat(attrstring,"]");
- return attrstring;
- }
-
-
-
-
-
- char * pascal filearea_attr (char flags) {
-
- register char x;
- char temp;
- static char attrstring[22];
-
- strcpy(attrstring,"[");
- for (x=0;x<8;x++) {
- temp=1;
- temp=temp<<x;
- (flags & temp) ? strcat(attrstring,"X") : strcat (attrstring,"-");
- }
- strcat(attrstring,"]");
- return attrstring;
- }
-
-
-
- void pascal print_clock (void) {}