From 6d6bb88a0215b87a4a47ed86a84ae3c75d399962 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Sun, 24 Apr 2016 18:05:02 -0400 Subject: Initial import of 5.0 source code with minor changes to use termios on Linux. --- comb.c | 543 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 543 insertions(+) create mode 100644 comb.c (limited to 'comb.c') diff --git a/comb.c b/comb.c new file mode 100644 index 0000000..5d34071 --- /dev/null +++ b/comb.c @@ -0,0 +1,543 @@ +/*Copyright (c) Anker Berg-Sonne, 1985,1986,1987*/ +#include "proto.h" + +void Fast Wait_Char() +{ +#if (defined(ATARI) & defined(GEM)) | ((defined(DOS) | defined(NT)) & (defined(Windows) | defined(TV))) + Mouse_OK=0; +#endif + Opt_Cursor(Scr_Length,(long)1); + while (1) + {Get16(); + if (Character==13||Character==8||isalnum(Character)||Character==' '|| + (Key_Number>=25&&Key_Number<=50)||Key_Number==12) /* 290a */ + break; + Out_C('\7'); + } +#if (defined(ATARI) & defined(GEM)) | ((defined(DOS) | defined(NT)) & (defined(Windows) | defined(TV))) + Mouse_OK=1; +#endif +} + +void Fast Show_Help() +{while (1) + {Display_Help(Help_Pos=Del.Pos-Dl_Pointers[Help_String][0]); + Wait_Char(); + if (At_End||(Character!=13&&Key_Number!=48&&Key_Number!=50 + &&Key_Number!=26&&Key_Number!=29)) + break; + } +} + +void Fast Display_Help(long P) +{char C; + Opt_Cursor(2,(long)1); + B_Goto(&Del,Dl_Pointers[Help_String][0]+P); + while (1) + {if (Del.Pos>=Dl_Pointers[Help_String][0]+Dl_Pointers[Help_String][1]) + break; + if ((C=B_Get(&Del))!='\n'&&C!='\r'&&C!=' ') + {if (C==12) + {B_Search(&Del,'\n', + Dl_Pointers[Help_String][0]+Dl_Pointers[Help_String][1]); + At_End=0; + Wait_Mess(Txt_More); + return; + } else + {B_B_Get(&Del); + break; + } + } else + {if (My_Line==Scr_Length-1) + {At_End=0; + B_B_Get(&Del); + Wait_Mess(Txt_More); + return; + } + while (C!='\n'&& + Del.Pos='0'&&C<='9') + {Key=0; + J+=2; + while (J='0'&&C<='9') + {Key=Key*10+C-'0'; + J++; + } + J--; + for (K=0;K=1000) + {H_Col++; + B_Put(&Del,(char)((Key/1000)%10+'0')); + } + if (Key>=100) + {H_Col++; + B_Put(&Del,(char)((Key/100)%10+'0')); + } + if (Key>=10) + {H_Col++; + B_Put(&Del,(char)((Key/10)%10+'0')); + } + B_Put(&Del,(char)(Key%10+'0')); + H_Col++; + } + } + } else + {H_Col++; + B_Put(&Del,'%'); + } + } else + if ((C=Dsk_Rec[J+1])=='A'||C=='a') + {if ((C=Dsk_Rec[J+2])>='0'&&C<='9') + {Key=0; + J+=2; + while (J='0'&&C<='9') + {Key=Key*10+C-'0'; + J++; + } + J--; + OK=0; + for (K=0;K=1000) + {H_Col++; + B_Put(&Del,(char)((Key/1000)%10+'0')); + } + if (Key>=100) + {H_Col++; + B_Put(&Del,(char)((Key/100)%10+'0')); + } + if (Key>=10) + {H_Col++; + B_Put(&Del,(char)((Key/10)%10+'0')); + } + B_Put(&Del,(char)(Key%10+'0')); + H_Col++; + } + } + } else + {H_Col++; + B_Put(&Del,'%'); + } + } else + if (C=='C'||C=='c') + {if ((C=Dsk_Rec[J+2])>='0'&&C<='9') + {Key=0; + J+=2; + while (J='0'&&C<='9') + {Key=Key*10+C-'0'; + J++; + } + J--; + if (KeyH_Col) + {H_Col++; + B_Put(&Del,' '); + } + } else + {H_Col++; + B_Put(&Del,'%'); + } + } else + if (C=='T'||C=='t') + {if ((C=Dsk_Rec[J+2])>='0'&&C<='9') + {Key=0; + J+=2; + while (J='0'&&C<='9') + {Key=Key*10+C-'0'; + J++; + } + J--; + if (Funcs[Key][2]!=0) + {B_Goto(&Pad,Funcs[Key][2]); + while ((C=B_Get(&Pad))!=0) + {H_Col++; + B_Put(&Del,(char)C); + } + } + } else + {H_Col++; + B_Put(&Del,'%'); + } + } else + if (C=='K'||C=='k') +#if defined(MPE) + {if (F_open((char *) Helpfile(),"r",&G)==NULL) +#else +#if defined(VMS) + {if (F_open(Logical_File(Helpfile()),"r",&G)==NULL&& /* 290a */ + F_open((char *) Helpfile(),"r",&G)==NULL&& + F_open(Find_Dir(Helpfile(),Dsk_Rec),"r",&G)==NULL&& + F_open(Find_Lib(Helpfile(),Dsk_Rec),"r",&G)==NULL) +#else + {if (F_open((char *) Helpfile(),"r",&G)==NULL&& + (Find_Env(Helpfile(),Dsk_Rec,"SEDTP")==NULL|| + F_open((char *) Dsk_Rec,"r",&G)==NULL)&& + (Find_Env(Helpfile(),Dsk_Rec,"SEDT")==NULL|| + F_open((char *) Dsk_Rec,"r",&G)==NULL)&& +#if defined(UNIX) + (Find_Env(Helpfile(),Dsk_Rec,"HOME")==NULL|| + F_open((char *) Dsk_Rec,"r",&G)==NULL)&& +#endif +#if defined(DOS) | defined(NT) + (Find_From(Helpfile(),Dsk_Rec)==NULL|| + F_open((char *) Dsk_Rec,"r",&G)==NULL)&& +#endif + (Find_Path(Helpfile(),Dsk_Rec)==NULL|| + F_open((char *) Dsk_Rec,"r",&G)==NULL)) +#endif +#endif + Error(2,No_Help_File_Txt,Helpfile()); else + {while ((C=F_getc(&G))!=EOF) + B_Put(&Del,(char)C); + F_close(&G); + } + } else + {H_Col++; + B_Put(&Del,'%'); + if (C=='%') + J++; + } + } else + {H_Col++; + B_Put(&Del,(char)C); + } + J++; + } + } + F_close(&F); + Dl_Pointers[Help_String][1]=Del.Pos-Dl_Pointers[Help_String][0]; + } + In_Help=1; +#if defined(VMS) | defined(UNIX) + if (Gotmouse) /* 290a */ + Disable_Mouse(); +#endif +#if !(((defined(DOS) | defined(NT)) & (defined(Windows) | defined(TV))) | (defined(ATARI) & defined(GEM))) + Set_Physical(); + Clr_Screen(); +#endif + Set_Scroll(1,Scr_Length-1); + Sav_Set(&Sav_Line,&Sav_Col,&Sav_Attributes,1,(long)1,0); + Cur_Attributes=A_Reverse; + Skip_To(Scr_Width+1); + Opt_Cursor(Scr_Length-1,(long)1); + Skip_To(Scr_Width+1); + Cur_Attributes=0; + Opt_Cursor(2,(long)1); + Sav_Shift=Scr_Shift; + Scr_Shift=0; + Help_Level=0; + B_Goto(&Del,Dl_Pointers[Help_String][0]); + while (1) + {Show_Help(); + if (Character==13||Character==8||Key_Number==48||Key_Number==50 + ||Key_Number==12) /* 290a */ + {Help_Level--; + if (Help_Level<0) + break; + } else /* 290a */ + if (Key_Number>=31&&Key_Number<=40) + {Help_Level++; + Help_Levels[Help_Level-1]=Key_Number-31+'0'; + } else + if (isalnum(Character)) + {Help_Level++; + Help_Levels[Help_Level-1]=Character; + } else + if (Character==27) + break; else + if (Character==' '&&!Function) + break; + B_Goto(&Del,Dl_Pointers[Help_String][0]); + if (Help_Level!=0) + {while (1) + {if (Del.Pos>=Dl_Pointers[Help_String][0]+Dl_Pointers[Help_String][1]) + {B_Goto(&Del,Dl_Pointers[Help_String][0]); + if ((--Help_Level)==0) + break; + } else + {OK=1; + for (I=0;OK&&I