/* Program bref.c -- this is the main() module for BREF icon version */ /* Set TAB value to 3 for this listing. */ /* Lib name Invoke name Function */ /* bref.c main BREF Window, requesters--OPTION, ERROR */ /* bref2.c main2 Cross reference table */ /* bref3.c help On-screen user information */ /* bref4.c FileWindow Select input */ char Version[] = "V 2.0"; #include #include #include /* Data referenced by main2() -- declared extern in main2() */ int icon; /* T = icon invoke, F = CLI invoke */ char *Filename; /* input file name */ UBYTE out_name[40] = "PRT:"; /* WorkBench invoke default output to printer*/ char Brefhdr[133]; /* Report heading */ int Maxlinwidth = 80; /* Max char's per line (-W) */ int Maxpaglines = 66; /* Max lines per page (-L) */ int FormFeed = TRUE; /* Use form feeds? (-S) */ int Quiet = FALSE; /* Suppress print input file? (-Q) */ int Elite = FALSE; /* Print input file 12 char/in? (-E) */ int ShowKeyWords = FALSE; /* Show BASIC keywords in table? (-K) */ struct Window *w; /* Referenced by help() -- extern in help() */ /* Declare external functions */ extern USHORT FileWindow(); /* input file selector */ extern void main2(); /* cross ref table function */ extern int help(); /* display HELP screens */ struct IntuitionBase *IntuitionBase; char *strchr(); /* #include "FileWindow.h" -- Included code for FileWindow.h */ /* What file_window() will return: */ #define GO 500 #define OPTIONS 600 #define HELP 700 #define CANCEL 800 #define QUIT 900 #define PANIC1 1001 #define PANIC2 1002 /* The maximum size of the strings: */ #define DRAWER_LENGTH 100 /* 100 char's incl NULL. */ #define FILE_LENGTH 30 /* 30 -"- */ #define TOTAL_LENGTH 130 /* 130 -"- */ /* THE END of FileWindow.h */ /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/ UBYTE undo_buff[133]; /* Undo buffer for string gadgets */ #define BOXW 80 /* Req1 gadget box width */ #define BOXH 15 /* Req1 gadget box height */ /* Use boxR1 for all Req1 gadgets */ SHORT boxR1[] = {0,0, BOXW-1,0, BOXW-1,BOXH-1, 0,BOXH-1, 0,0}; struct Border borderR1 = {0,0,1,0,JAM1,5,boxR1,NULL}; /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/ /* Req3 -- Str31 gadget output option structures */ SHORT str31_box[] = {-7,-4, 150,-4, 150,11, -7,11, -7,-4}; struct Border str31_border = {0,0,1,0,JAM1,5,str31_box,NULL}; struct IntuiText str31_tex1 = {1,0,JAM1,160,-4,NULL, "Output: PRT: = Printer",NULL,}; struct IntuiText str31_tex2 = {1,0,JAM1,232,5,NULL, "Filespec",&str31_tex1,}; struct StringInfo str31_info = {out_name, undo_buff,0,40,0,0,0,0,0,0, NULL,NULL,}; struct Gadget str31_gadget = { NULL,10,32,148,8,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, STRGADGET | REQGADGET, &str31_border, NULL,&str31_tex2, NULL,&str31_info,0,NULL}; /* Req3 -- Str32 gadget page width option structures */ SHORT str32_box[] = {-7,-4, 52,-4, 52,11, -7,11, -7,-4}; struct Border str32_border = {0,0,1,0,JAM1,5,str32_box,NULL}; struct IntuiText str32_text = {1,0,JAM1,60,0,NULL, "Page width (27-132)",NULL,}; UBYTE PWbuff[4]; struct StringInfo str32_info = {PWbuff, undo_buff,0,4,0,0,0,0,0,0, NULL,NULL,}; struct Gadget str32_gadget = { &str31_gadget,10,68,50,8,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | LONGINT, STRGADGET | REQGADGET, &str32_border, NULL,&str32_text, NULL,&str32_info,0,NULL}; /* Req3 -- Str33 gadget page length option structures */ SHORT str33_box[] = {-7,-4, 52,-4, 52,11, -7,11, -7,-4}; struct Border str33_border = {0,0,1,0,JAM1,5,str33_box,NULL}; struct IntuiText str33_text = {1,0,JAM1,60,0,NULL, "Page length (4-999)",NULL,}; UBYTE PLbuff[4]; struct StringInfo str33_info = {PLbuff, undo_buff,0,4,0,0,0,0,0,0, NULL,NULL,}; struct Gadget str33_gadget = { &str32_gadget,10,86,50,8,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | LONGINT, STRGADGET | REQGADGET, &str33_border, NULL,&str33_text, NULL,&str33_info,0,NULL}; /* Req3 -- Str34 gadget output option structures */ SHORT str34_box[] = {-7,-4, 150,-4, 150,11, -7,11, -7,-4}; struct Border str34_border = {0,0,1,0,JAM1,5,str34_box,NULL}; struct IntuiText str34_tex = {1,0,JAM1,160,0,NULL, "Report heading, if not filename",NULL,}; struct StringInfo str34_info = {Brefhdr, undo_buff,0,133,0,0,0,0,0,0, NULL,NULL,}; struct Gadget str34_gadget = { &str33_gadget,10,50,148,8,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, STRGADGET | REQGADGET, &str34_border, NULL,&str34_tex, NULL,&str34_info,0,NULL}; /* Req3 -- Tog31 "FormFeed?" gadget structures */ SHORT tog31_box[] = {0,0, 15,0, 15,10, 0,10, 0,0}; struct Border tog31_border = {0,0,1,0,JAM1,5,tog31_box,NULL}; UBYTE tog31_char = 'Y'; struct IntuiText tog31_tex1 = {1,0,JAM1,4,2,NULL,&tog31_char,NULL}; struct IntuiText tog31_tex2 = {1,0,JAM1,24,2,NULL,"Form Feeds",&tog31_tex1}; struct Gadget tog31_gadget = {&str34_gadget,14,120,16,11,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET, &tog31_border,NULL,&tog31_tex2,NULL,NULL,0,NULL}; /* Req3 -- tog32 "Print Input?" gadget structures */ SHORT tog32_box[] = {0,0, 15,0, 15,10, 0,10, 0,0}; struct Border tog32_border = {0,0,1,0,JAM1,5,tog32_box,NULL}; char tog32_char = 'Y'; struct IntuiText tog32_tex1 = {1,0,JAM1,4,2,NULL,&tog32_char,NULL}; struct IntuiText tog32_tex2 = {1,0,JAM1,24,2,NULL, "Print input file",&tog32_tex1}; struct Gadget tog32_gadget = {&tog31_gadget,14,136,16,11,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET, &tog32_border,NULL,&tog32_tex2,NULL,NULL,0,NULL}; /* Req3 -- tog33 "Input print pitch" gadget structures */ SHORT tog33_box[] = {0,0, 23,0, 23,10, 0,10, 0,0}; struct Border tog33_border = {0,0,1,0,JAM1,5,tog33_box,NULL}; char tog33_char[] = "10"; struct IntuiText tog33_tex1 = {1,0,JAM1,4,2,NULL,tog33_char,NULL}; struct IntuiText tog33_tex2 = {1,0,JAM1,34,2,NULL, "Print Pitch (10/12 cpi)",&tog33_tex1}; struct Gadget tog33_gadget = {&tog32_gadget,14,152,24,11,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET, &tog33_border,NULL,&tog33_tex2,NULL,NULL,0,NULL}; /* Req3 -- tog34 "Show Keywords?" gadget structures */ SHORT tog34_box[] = {0,0, 15,0, 15,10, 0,10, 0,0}; struct Border tog34_border = {0,0,1,0,JAM1,5,tog34_box,NULL}; char tog34_char = 'N'; struct IntuiText tog34_tex1 = {1,0,JAM1,4,2,NULL,&tog34_char,NULL}; struct IntuiText tog34_tex2 = {1,0,JAM1,24,2,NULL, "Show BASIC keywords",&tog34_tex1}; struct Gadget tog34_gadget = {&tog33_gadget,14,168,16,11,GADGHCOMP, GADGIMMEDIATE | RELVERIFY, BOOLGADGET | REQGADGET, &tog34_border,NULL,&tog34_tex2,NULL,NULL,0,NULL}; /* Req3 -- HELP3 gadget structures */ struct IntuiText help3_text = {3,0,JAM1,20,4,NULL,"HELP",NULL}; struct Gadget help3_gadget = {&tog34_gadget,380,10,BOXW,BOXH,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET, &borderR1,NULL,&help3_text,NULL,NULL,0,NULL}; /* Req3 -- Save3 gadget structures */ struct IntuiText save3_text = {3,0,JAM1,20,4,NULL,"SAVE",NULL}; struct Gadget save3_gadget = {&help3_gadget,380,136,BOXW,BOXH,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET, &borderR1,NULL,&save3_text,NULL,NULL,0,NULL}; /* Req3 -- OK3 gadget structures */ struct IntuiText ok3_text = {3,0,JAM1,25,4,NULL,"OK",NULL}; struct Gadget ok3_gadget = {&save3_gadget,380,160,BOXW,BOXH,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET, &borderR1,NULL,&ok3_text,NULL,NULL,0,NULL}; /* Requester #3 structures -- Options*/ SHORT req3_box[] = {0,0, 499,0, 499,184, 0,184, 0,0}; struct Border req3_border = {0,0,1,0,JAM1,5,req3_box,NULL,}; struct IntuiText req3_tex1 = {3,0,JAM1,130,4,NULL, "BREF Options",NULL,}; struct IntuiText req3_tex2 = {2,3,JAM2,30,16,NULL, "Click box, type change, RETURN",&req3_tex1,}; struct IntuiText req3_tex3 = {2,3,JAM2,46,108,NULL, "Toggle: Click box to flip",&req3_tex2,}; struct Requester req3 = {NULL,30,10,500,185,0,0,&ok3_gadget,&req3_border, &req3_tex3,NULL,2,NULL,NULL,NULL,NULL,NULL}; /*= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =*/ /* Req2 -- OK gadget structures */ struct IntuiText ok_text = {1,0,JAM1,25,4,NULL,"OK",NULL}; struct Gadget ok_gadget = { NULL,25,40,BOXW,BOXH,GADGHCOMP, GADGIMMEDIATE | RELVERIFY | ENDGADGET, BOOLGADGET | REQGADGET, &borderR1,NULL,&ok_text,NULL,NULL,0,NULL}; /* Requester #2 structures -- error message */ SHORT req2_box[] = {0,0, 599,0, 599,64, 0,64, 0,0}; struct Border req2_border = {0,0,1,0,JAM1,5,req2_box,NULL,}; char em_buff[75]; struct IntuiText req2_em = {2,3,JAM2,4,26,NULL,&em_buff,NULL}; struct IntuiText req2_text = {2,3,JAM2,14,8,NULL, "BREF error:",&req2_em,}; struct Requester req2 = { NULL,10,20,600,65,0,0,&ok_gadget,&req2_border,&req2_text, NULL,2,NULL,NULL,NULL,NULL,NULL}; /* Window declares */ struct NewWindow nw = { 0,0,640,200,0,1, CLOSEWINDOW | GADGETUP, SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH | WINDOWSIZING | ACTIVATE, NULL,NULL,"BREF Window", NULL,NULL, 140,50,640,200,WBENCHSCREEN}; struct IntuiMessage *msg; BOOL result; main(argc,argv) int argc; char *argv[]; { struct IntuiText int_text = { 1,0,JAM2,16,9,NULL, NULL, /* IText */ NULL}; char *text[] = { "Hang in there -- BREF executing . . .", "BREF execution completed -- short pause . . .", "Completed read file BREF.Option", "Completed write file BREF.Option", " " /* blanks for erase msg */ }; BOOL fin, Req_3, result3 = FALSE, all_done = FALSE, Do_FW; ULONG class; struct Gadget *address; int n, hrc; USHORT operation; /* return code from FileWindow */ UBYTE file[TOTAL_LENGTH]; /* file name returned from FileWindow */ if (argc < 2) icon = TRUE; else { icon = FALSE; /* CLI mode -- no User Interface requesters */ main2(argc,argv); exit(0); } Filename = NULL; file[0] = '\0'; /* null the FileWindow filename */ Brefhdr[0] = '\0'; /* null report header */ strcpy(PLbuff,"66"); /* Initialize Page Line value */ strcpy(PWbuff,"80"); /* Initialize Page Width value */ IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0); if (IntuitionBase == NULL) ErrMsg(2,"System error, can't open Intuition."); /* Code = 2 signals no close of Window, Intuition */ w = (struct Window *) OpenWindow(&nw); if (w == NULL) ErrMsg(1,"System error, can't open Window."); /* Code = 1 signals no close Window, close Intuition */ n = ReadOpt(); /* Read Option file, if available */ if (n) { Do_FW = TRUE; Req_3 = FALSE; /* Set to activate FileWindow */ int_text.IText = text[2]; PrintIText(w->RPort,&int_text,0,165); } else { Do_FW = FALSE; Req_3 = TRUE; } /* Set to activate Option Requester */ while (!all_done) { if (Do_FW) { Do_FW = FALSE; operation = FileWindow(file); /* Invoke FileWindow */ int_text.IText = text[4]; /* Erase Read file msg */ PrintIText(w->RPort,&int_text,0,165); switch (operation) { case GO: Filename = file; fin = TRUE; all_done = TRUE; break; case OPTIONS: Req_3 = TRUE; break; case HELP: hrc = help(); /* display Help screens */ fin = TRUE; if (hrc ==1) all_done = TRUE; else Do_FW = TRUE; break; case CANCEL: case QUIT: case PANIC2: fin = TRUE; all_done = TRUE; break; case PANIC1: ErrMsg(0,"System error--can't open window for FileWindow"); default: ErrMsg(0,"FileWindow serious problem, cause unknown. GET HELP."); } } if (Req_3) { Req_3 = FALSE; result3 = Request(&req3,w); if (!result3) ErrMsg(0,"System error, can't activate Requester #3"); fin = FALSE; } while (!fin) { Wait(1 << w->UserPort->mp_SigBit); while (msg = (struct IntuiMessage *) GetMsg(w->UserPort)) { class = msg->Class; address = msg->IAddress; ReplyMsg(msg); switch(class) { case GADGETUP: if (address == &ok3_gadget) { fin = TRUE; Do_FW = TRUE; /* Revert to FileWindow */ } else if (address == &help3_gadget) { hrc = help(); /* Display Help screens */ fin = TRUE; if (hrc == 1) all_done = TRUE; else Req_3 = TRUE; } else if (address == &save3_gadget) { WriteOpt(); /* Write options file */ int_text.IText = text[3]; PrintIText(w->RPort,&int_text,0,165); fin = TRUE; Do_FW = TRUE; /* Revert to FileWindow */ } else if (address == &str31_gadget) ; /* OK, have output name */ else if (address == &str32_gadget) { n = str32_info.LongInt; if (n > 132) n = 132; if (n < 27) n = 27; Maxlinwidth = n; } else if (address == &str33_gadget) { n = str33_info.LongInt; if (n > 999) n = 999; if (n < 4) n = 4; Maxpaglines = n; } else if (address == &str34_gadget) ; /* OK, have Report heading */ /* Next 4 gadgets are Toggles. In order to change the display char,*/ /* it is necessary to erase previous char(s), change char(s), */ /* then redisplay the gadget. */ else if (address == &tog31_gadget) { tog31_tex1.FrontPen = 2; /* Erase prev char */ RefreshGadgets(&tog31_gadget,w,&req3); if (FormFeed == TRUE) { FormFeed = FALSE; tog31_char = 'N';} else {FormFeed = TRUE; tog31_char = 'Y';} tog31_tex1.FrontPen = 1; /* Write new char */ RefreshGadgets(&tog31_gadget,w,&req3); } else if (address == &tog32_gadget) { tog32_tex1.FrontPen = 2; /* Erase prev char */ RefreshGadgets(&tog32_gadget,w,&req3); if (Quiet == FALSE) { Quiet = TRUE; tog32_char = 'N';} else {Quiet = FALSE; tog32_char = 'Y';} tog32_tex1.FrontPen = 1; /* Write new char */ RefreshGadgets(&tog32_gadget,w,&req3); } else if (address == &tog33_gadget) { tog33_tex1.FrontPen = 2; /* Erase prev char */ RefreshGadgets(&tog33_gadget,w,&req3); if (Elite == FALSE) { Elite = TRUE; tog33_char[1] = '2';} else {Elite = FALSE; tog33_char[1] = '0';} tog33_tex1.FrontPen = 1; /* Write new char */ RefreshGadgets(&tog33_gadget,w,&req3); } else if (address == &tog34_gadget) { tog34_tex1.FrontPen = 2; /* Erase prev char */ RefreshGadgets(&tog34_gadget,w,&req3); if (ShowKeyWords == TRUE) { ShowKeyWords = FALSE; tog34_char = 'N';} else {ShowKeyWords = TRUE; tog34_char = 'Y';} tog34_tex1.FrontPen = 1; /* Write new char */ RefreshGadgets(&tog34_gadget,w,&req3); } break; } /* close switch(class) */ } /* close while(msg...) */ } /* close while(!fin) */ } /* close while (!all_done) */ if (Filename) { /* Send "BREF Executing" msg to window */ int_text.IText = text[0]; PrintIText(w->RPort,&int_text,0,50); main2(argc,argv); /* Send "Completed" msg to window */ int_text.IText = text[1]; PrintIText(w->RPort,&int_text,0,60); Delay(150); /* Pause for 3 sec's */ } CloseWindow(w); CloseLibrary(IntuitionBase); } /* close main() */ WriteOpt() /* Write options to file BREF.Option */ { FILE *opt; char MaxLW[5]; char MaxPL[5]; char togs[6]; opt = fopen("BREF.Option","w"); if (opt == NULL) ErrMsg(0,"Can't open BREF.Option file for write."); strcat (out_name,"\n"); fputs (out_name,opt); /* Output name */ *strchr(out_name,'\n') = '\0'; /* Replace newline by null */ strcat (Brefhdr,"\n"); fputs (Brefhdr,opt); /* Report heading */ *strchr(Brefhdr,'\n') = '\0'; /* Replace newline by null */ itoa(Maxlinwidth,MaxLW); /* Convert integer to ASCII */ fputs (MaxLW,opt); /* Max line width in char's */ itoa(Maxpaglines,MaxPL); /* Convert integer to ASCII */ fputs (MaxPL,opt); /* No. lines/page */ togs[0] = FormFeed + '0'; togs[1] = Quiet + '0'; togs[2] = Elite + '0'; togs[3] = ShowKeyWords + '0'; togs[4] = '\n'; togs[5] = '\0'; fputs (togs,opt); fclose(opt); } itoa(integ,ascii) /* Integer to Ascii */ int integ; /* 3-digit integer */ char ascii[]; /* Append 'newline' & null to Ascii */ { int i, n; n = integ; for (i = 2; i > -1; --i) { if (n > 0) { ascii[i] = (n % 10) + '0'; n = n / 10; } else ascii[i] = ' '; } ascii[3] = '\n'; ascii[4] = '\0'; } ReadOpt() /* Read file BREF.Option, if available */ { FILE *opt; char MaxLW[5]; char MaxPL[5]; char togs[6]; opt = fopen("BREF.Option","r"); if (opt == NULL) return(FALSE); fgets ((char *)out_name,40,opt); /* Output name */ *strchr(out_name,'\n') = '\0'; /* Replace newline by null */ fgets ((char *)Brefhdr,133,opt); /* Report heading */ *strchr(Brefhdr,'\n') = '\0'; fgets ((char *)MaxLW,5,opt); /* No. char's/line = line width */ *strchr(MaxLW,'\n') = '\0'; strcpy(PWbuff,MaxLW); /* Copy value to display buffer */ Maxlinwidth = atoi(MaxLW); /* Convert ASCII to integer */ fgets ((char *)MaxPL,5,opt); /* No. lines/page = page length */ *strchr(MaxPL,'\n') = '\0'; strcpy(PLbuff,MaxPL); /* Copy value to display buffer */ Maxpaglines = atoi(MaxPL); /* Convert ASCII to integer */ fgets ((char *)togs,6,opt); /* 4 toggles */ if (togs[0] == '0') { FormFeed = FALSE; tog31_char = 'N'; } else {FormFeed = TRUE; tog31_char = 'Y'; } if (togs[1] == '0') { Quiet = FALSE; tog32_char = 'Y'; } else {Quiet = TRUE; tog32_char = 'N'; } if (togs[2] == '0') { Elite = FALSE; tog33_char[1] = '0'; } else {Elite = TRUE; tog33_char[1] = '2'; } if (togs[3] == '0') { ShowKeyWords = FALSE; tog34_char = 'N'; } else {ShowKeyWords = TRUE; tog34_char = 'Y'; } fclose(opt); return(TRUE); } /* ErrMsg -- requester #2 displays error message. */ /* Called from main(), help(), fatal() in main2 module */ /* ec: 0 = have Intuition, Window 1 = have Intuition,no window*/ /* 2 = no Intuition/window */ ErrMsg(ec,ptrn,data1) int ec; char *ptrn,*data1; { if (ec == 0) /* For ec = 0, have Window & Intuition */ { sprintf(em_buff,ptrn,data1); /* sprintf: format msg in em_buff */ result = Request(&req2,w); if (result) { Wait(1 << w->UserPort->mp_SigBit); while (msg = (struct IntuiMessage *) GetMsg(w->UserPort)) ReplyMsg(msg); /* Clean out messages & finish up */ } else { printf("Can't activate requester #2 for error msg.\n"); printf (ptrn,data1); } } else printf (ptrn,data1); /* No Window, or no Window/Intuition*/ if (ec < 1) CloseWindow(w); if (ec < 2) CloseLibrary(IntuitionBase); exit(10); }