Open Architecture Open Architecture Screen Interface System Screen Interface System ( O A S I S ) ( O A S I S ) Version 4.1 - Evaluation Version 4.1 - Evaluation EUREKA SOFTWARE ASSOCIATES EUREKA SOFTWARE ASSOCIATES REFERENCE MANUAL REFERENCE MANUAL OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual O A S I S NOTICE NOTICE ______ This document and the information contained herein as well as the described software 'OASIS' (Open Architecture Screen Interface System) are protected by international copyright law and treaty provisions. They are provided to you under a shareware scheme whose conditions and terms are explained in Appendix B of this manual and may only be used in accordance with these conditions. Both this documentation and the program are provided strictly on an Both this documentation and the program are provided strictly on an 'As Is' Basis. 'As Is' Basis. There is no warranty, expressed or implied, with respect to the program or the documentation, including but not limited to merchantability and fitness for a particular purpose with respect to defects in the program or the documentation. In no event shall Martin Hossfeld be liable for any loss of profit or any other damage, including but not limited to special, incidental, consequential or other damages. Copyright (C) 1987, 1988 EUREKA SOFTWARE ASSOCIATES Martin Hossfeld Remy Fesnoux 12, Pinewood Green 2344 Yorkshire Iver Heath, Bucks. SL0 0QP Ann Arbor, MI 48104 United Kingdom USA All Rights Reserved. All Rights Reserved. OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Acknowledgements Acknowledgements ________________ IBM, IBM PC, XT, AT and PC DOS are trademarks of International Business Machines Corporation. Burroughs and TD830 are trademarks of Unisys Corporation. Turbo Pascal is a registered trademark of Borland International Inc. MS DOS is a registered trademark of Microsoft Corporation. Hercules Craphics Card is a trademark of Hercules Computer Technology. OASIS, SFD, SCL, Screen Format Designer, Screen Control Language and Open Architecture Screen Interface System are trademarks of EUREKA SOFTWARE ASSOCIATES. 'Lightning' is a trademark of PCSG Inc. OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 12 What is OASIS? . . . . . . . . . . . . . . . . . . . . . . 12 About this manual . . . . . . . . . . . . . . . . . . . . . 13 What this manual assumes . . . . . . . . . . . . . . . . . 14 What you will learn . . . . . . . . . . . . . . . . . . . . 14 Chapter I Chapter I . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 The Screen Format Designer (SFD) . . . . . . . . . . . . . 20 The Screen Control Language (SCL) . . . . . . . . . . . . . 21 Application programs written with OASIS . . . . . . . . . . 22 Some Feature Explanations . . . . . . . . . . . . . . . . . 23 Screen Related Program Parameters . . . . . . . . . . 23 Colors and Display Attributes . . . . . . . . . . . . 23 Non Standard Keyboard Layouts . . . . . . . . . . . . 23 Program development with OASIS . . . . . . . . . . . . . . . . . 24 A. Declarative Phase . . . . . . . . . . . . . . . . . . . 24 B. Procedural Phase . . . . . . . . . . . . . . . . . . . . 25 Differences to traditional program development . . . . . . . . . 26 What instead of how . . . . . . . . . . . . . . . . . . . . 26 Early Tests . . . . . . . . . . . . . . . . . . . . . . . . 26 Less Programming . . . . . . . . . . . . . . . . . . . . . 26 Easier changes . . . . . . . . . . . . . . . . . . . . . . 26 Nationalization, customization made simple . . . . . . . . 26 System Installation and Setup . . . . . . . . . . . . . . . . . 27 The Distribution Disks . . . . . . . . . . . . . . . . . . 27 System Requirements . . . . . . . . . . . . . . . . . . . . 28 Installation Instructions . . . . . . . . . . . . . . . . . 29 Chapter II Chapter II . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Explanation of keyboard functions . . . . . . . . . . . . . . . 33 Variables and Constants . . . . . . . . . . . . . . . . . . 33 Variable field specials . . . . . . . . . . . . . . . . . . 34 Editing keys . . . . . . . . . . . . . . . . . . . . . . . 34 Return . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Escape . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Function keys . . . . . . . . . . . . . . . . . . . . . . . 36 Errors & Automatic Help System . . . . . . . . . . . . . . . . . 37 Invalid data entry . . . . . . . . . . . . . . . . . . . . 37 Missing mandatory data . . . . . . . . . . . . . . . . . . 37 Autohelp feature . . . . . . . . . . . . . . . . . . . . . 37 Design Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Designing a format layout . . . . . . . . . . . . . . . . . 40 Layout editor - Meaning of keys . . . . . . . . . . 41 Changing the Format Size . . . . . . . . . . . . . . . 42 Introduction page 4 Introduction page 4 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Drawing fields . . . . . . . . . . . . . . . . . . . . 43 Drawing boxes . . . . . . . . . . . . . . . . . . . . 44 Selecting Linestyles . . . . . . . . . . . . . . . . . 45 Field specifications . . . . . . . . . . . . . . . . . 46 Format Control Specifications . . . . . . . . . . . . 49 User Function Key Specifications . . . . . . . . . . . 49 Testing a Format . . . . . . . . . . . . . . . . . . . . . 51 Change field specs/Active field . . . . . . . . . . . 51 Change field specs/Other field . . . . . . . . . . . . 51 Global Colors/Attributes . . . . . . . . . . . . . . . 51 Format/Control Specs . . . . . . . . . . . . . . . . . 51 Colors/Attributes . . . . . . . . . . . . . . . . . . . . . 52 Field Attributes . . . . . . . . . . . . . . . . . . . 52 Color Screen Attributes . . . . . . . . . . . . . . . 53 Monochrome Attributes . . . . . . . . . . . . . . . . 54 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . 55 Functional Description - Introduction . . . . . . . . . . . . . 57 SFD Basic Program Layout . . . . . . . . . . . . . . . . . 58 Files used by SFD . . . . . . . . . . . . . . . . . . . . . 59 SFD.FOR . . . . . . . . . . . . . . . . . . . . . . . 59 SFD.FIN . . . . . . . . . . . . . . . . . . . . . . . 59 SFD.MSG . . . . . . . . . . . . . . . . . . . . . . . 59 SFD.ERR . . . . . . . . . . . . . . . . . . . . . . . 59 SFD.DEF . . . . . . . . . . . . . . . . . . . . . . . 59 Files generated by SFD . . . . . . . . . . . . . . . . . . 60 .SCS . . . . . . . . . . . . . . . . . . . . 60 .SCI . . . . . . . . . . . . . . . . . . . . 60 .MSG . . . . . . . . . . . . . . . . . . . . 60 Basic Keyboard Functions . . . . . . . . . . . . . . . . . 61 Online Help Facility . . . . . . . . . . . . . . . . . . . 62 Explanatory field input informations . . . . . . . . . 62 AutoHelp . . . . . . . . . . . . . . . . . . . . . . . 62 Format Help . . . . . . . . . . . . . . . . . . . . . 62 Field Help . . . . . . . . . . . . . . . . . . . . . . 62 Input Error Handling . . . . . . . . . . . . . . . . . . . 63 Invalid Key . . . . . . . . . . . . . . . . . . . . . 63 Wrong data . . . . . . . . . . . . . . . . . . . . . . 63 Missing mandatory data . . . . . . . . . . . . . . . . 63 The Main Menu . . . . . . . . . . . . . . . . . . . . . . . . . 64 The Menu Header . . . . . . . . . . . . . . . . . . . . . . 64 Act DIR . . . . . . . . . . . . . . . . . . . . . . . 64 Workfile . . . . . . . . . . . . . . . . . . . . . . . 64 Formats . . . . . . . . . . . . . . . . . . . . . . . 64 The Main body . . . . . . . . . . . . . . . . . . . . . . . 64 The Message Line . . . . . . . . . . . . . . . . . . . . . 64 DESIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Load File . . . . . . . . . . . . . . . . . . . . . . . . . 66 CHDir . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Crunch . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Introduction page 5 Introduction page 5 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Delete . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Undelete . . . . . . . . . . . . . . . . . . . . . . . . . 68 Transfer . . . . . . . . . . . . . . . . . . . . . . . . . 68 DISPLAY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Formats . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Directory . . . . . . . . . . . . . . . . . . . . . . . . . 69 PRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Single format . . . . . . . . . . . . . . . . . . . . . . . 70 All formats . . . . . . . . . . . . . . . . . . . . . . . . 70 Format list . . . . . . . . . . . . . . . . . . . . . . . . 70 DEFAULTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Design . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Left Field Limit . . . . . . . . . . . . . . . . . . . 71 Right Field Limit . . . . . . . . . . . . . . . . . . 71 Background Color . . . . . . . . . . . . . . . . . . . 71 Foreground Color . . . . . . . . . . . . . . . . . . . 71 Surrounding Area . . . . . . . . . . . . . . . . . . . 72 System defaults . . . . . . . . . . . . . . . . . . . . . . 73 Auto Help . . . . . . . . . . . . . . . . . . . . . . 73 After n Errors . . . . . . . . . . . . . . . . . . . . 73 Beep yes/no . . . . . . . . . . . . . . . . . . . . . 73 Length (ms) . . . . . . . . . . . . . . . . . . . . . 73 Pitch (Hz) . . . . . . . . . . . . . . . . . . . . . . 73 Field Blink Frequency . . . . . . . . . . . . . . . . 73 Char YES . . . . . . . . . . . . . . . . . . . . . . . 74 Char NO . . . . . . . . . . . . . . . . . . . . . . . 74 Cursor Wraparound Disabled . . . . . . . . . . . . . . 74 EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Terminate Program . . . . . . . . . . . . . . . . . . . . . 75 Format Design . . . . . . . . . . . . . . . . . . . . . . . . . 76 Basic Work Flow . . . . . . . . . . . . . . . . . . . . . . . . 76 The Layout Editor . . . . . . . . . . . . . . . . . . . . . 77 Layout editor Meaning of keys . . . . . . . . . . . . 78 Drawing Fields . . . . . . . . . . . . . . . . . . . . 79 Special Functions . . . . . . . . . . . . . . . . . . 80 Menu Functions . . . . . . . . . . . . . . . . . . . . 83 Format Specifications . . . . . . . . . . . . . . . . 85 The Test Feature . . . . . . . . . . . . . . . . . . . . . 94 Introduction . . . . . . . . . . . . . . . . . . . . . 94 The local Menu . . . . . . . . . . . . . . . . . . . . 94 System Limitations . . . . . . . . . . . . . . . . . . 95 Chapter III Chapter III . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 100 SCL Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Introduction page 6 Introduction page 6 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL.TPU . . . . . . . . . . . . . . . . . . . . . . . . . . 101 SCL.ERR . . . . . . . . . . . . . . . . . . . . . . . . . . 101 SCL - Global Declarations . . . . . . . . . . . . . . . . . . . 102 General . . . . . . . . . . . . . . . . . . . . . . . . . . 102 SCL Control Parameters . . . . . . . . . . . . . . . . . . 103 Max_Error_Messages . . . . . . . . . . . . . . . . . . 103 Max_Input_Messages . . . . . . . . . . . . . . . . . . 103 Max_Heap_Screens . . . . . . . . . . . . . . . . . . . 103 File Names . . . . . . . . . . . . . . . . . . . . . . . . 104 Screenfile_Ext . . . . . . . . . . . . . . . . . . . . 104 Indexfile_Ext . . . . . . . . . . . . . . . . . . . . 104 Errorfile_Ext . . . . . . . . . . . . . . . . . . . . 104 Messagefile_Ext . . . . . . . . . . . . . . . . . . . 104 Help System Parameters . . . . . . . . . . . . . . . . . . 105 Autohelp_Screen . . . . . . . . . . . . . . . . . . . 105 Maxerrors . . . . . . . . . . . . . . . . . . . . . . 105 Auto_Help_Set . . . . . . . . . . . . . . . . . . . . 105 Code_Help_Field . . . . . . . . . . . . . . . . . . . 105 Code_Help_Format . . . . . . . . . . . . . . . . . . . 105 Beep Parameters . . . . . . . . . . . . . . . . . . . . . . 106 Beep_Off . . . . . . . . . . . . . . . . . . . . . . . 106 Beep_Time . . . . . . . . . . . . . . . . . . . . . . 106 Beep_Frequency_1 . . . . . . . . . . . . . . . . . . . 106 Beep_Frequency_2 . . . . . . . . . . . . . . . . . . . 106 Message Display . . . . . . . . . . . . . . . . . . . . . . 107 Input_Msg_Set . . . . . . . . . . . . . . . . . . . . 107 Error_Msg_Set . . . . . . . . . . . . . . . . . . . . 107 Field Attributes . . . . . . . . . . . . . . . . . . . . . 108 Blink_Count . . . . . . . . . . . . . . . . . . . . . 108 Timer_Intervall . . . . . . . . . . . . . . . . . . . 108 Mark_Field_Left . . . . . . . . . . . . . . . . . . . 108 Mark_Field_Right . . . . . . . . . . . . . . . . . . . 108 Key Specifications . . . . . . . . . . . . . . . . . . . . 109 Code_Cancel_Act . . . . . . . . . . . . . . . . . . . 109 Code_Abort . . . . . . . . . . . . . . . . . . . . . . 109 Code_Escape . . . . . . . . . . . . . . . . . . . . . 109 Performing 'Edit' functions . . . . . . . . . . . . . . . . 110 Function Keys . . . . . . . . . . . . . . . . . . . . . . . 110 Nationalisation Parameters . . . . . . . . . . . . . . . . 111 Code_Yes . . . . . . . . . . . . . . . . . . . . . . . 111 Code_No . . . . . . . . . . . . . . . . . . . . . . . 111 Character sets for Variables . . . . . . . . . . . . . . . 111 Country Information Parameters . . . . . . . . . . . . . . 112 SCL_Country . . . . . . . . . . . . . . . . . . . . . 112 Country . . . . . . . . . . . . . . . . . . . . . . . 112 Date_Format . . . . . . . . . . . . . . . . . . . . . 112 Date_Separator . . . . . . . . . . . . . . . . . . . . 112 Time_Separator . . . . . . . . . . . . . . . . . . . . 113 Currency . . . . . . . . . . . . . . . . . . . . . . . 113 SCL Control Parameters . . . . . . . . . . . . . . . . . . 114 Introduction page 7 Introduction page 7 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Progpath . . . . . . . . . . . . . . . . . . . . . . . 114 No_Wrap . . . . . . . . . . . . . . . . . . . . . . . 114 Format Pointers . . . . . . . . . . . . . . . . . . . . . . 115 S_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 115 R_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 115 W_Ptr . . . . . . . . . . . . . . . . . . . . . . . . 116 Format Handling Parameters . . . . . . . . . . . . . . . . 117 Active_Field . . . . . . . . . . . . . . . . . . . . . 117 Char_Code . . . . . . . . . . . . . . . . . . . . . . 117 Glb_Error . . . . . . . . . . . . . . . . . . . . . . 117 Format Handling Parameters . . . . . . . . . . . . . . . . 118 User_Function . . . . . . . . . . . . . . . . . . . . 118 Begin_Of_Field . . . . . . . . . . . . . . . . . . . . 118 End_Of_Field . . . . . . . . . . . . . . . . . . . . . 118 End_Of_Format . . . . . . . . . . . . . . . . . . . . 119 Checkrequired . . . . . . . . . . . . . . . . . . . . 119 Screen related Parameters . . . . . . . . . . . . . . . . . 120 Screen_Mode . . . . . . . . . . . . . . . . . . . . . 120 Mono_Adapter . . . . . . . . . . . . . . . . . . . . . 120 Color_True . . . . . . . . . . . . . . . . . . . . . . 120 Format related Parameters . . . . . . . . . . . . . . . . . 121 Xoff . . . . . . . . . . . . . . . . . . . . . . . . . 121 Yoff . . . . . . . . . . . . . . . . . . . . . . . . . 121 Background Processing Parameters . . . . . . . . . . . . . 122 LP_Background_Pointer . . . . . . . . . . . . . . . . 122 HP_Background_Pointer . . . . . . . . . . . . . . . . 122 Miscellaneous Parameters . . . . . . . . . . . . . . . . . 123 Glb_Status . . . . . . . . . . . . . . . . . . . . . . 123 Glb_Ok . . . . . . . . . . . . . . . . . . . . . . . . 123 Format_Aborted . . . . . . . . . . . . . . . . . . . . 123 Global Type Declarations . . . . . . . . . . . . . . . . . 124 Procedures and Functions . . . . . . . . . . . . . . . . . . . . 125 Introduction . . . . . . . . . . . . . . . . . . . . . . . 125 Entering and leaving SCL . . . . . . . . . . . . . . . . . 126 Structure of a SCL Program . . . . . . . . . . . . . . . . 127 Loading and displaying formats . . . . . . . . . . . . . . 128 X_Max and Y_Max . . . . . . . . . . . . . . . . . . . . . . 130 Handling format input . . . . . . . . . . . . . . . . . . . 131 Format Handling Control . . . . . . . . . . . . . . . . . . 133 Reading/Writting Format Fields . . . . . . . . . . . . . . 134 Introduction . . . . . . . . . . . . . . . . . . . . . 134 Reading Field Content . . . . . . . . . . . . . . . . 135 Writing Field Content . . . . . . . . . . . . . . . . 137 Deleting Field Content . . . . . . . . . . . . . . . . 138 Reading the 'Selected' Attribute . . . . . . . . . . . 139 Writing the 'Selected' Attribute . . . . . . . . . . . 140 String Handling routines . . . . . . . . . . . . . . . . . 141 System Functions . . . . . . . . . . . . . . . . . . . . . 145 Date related routines . . . . . . . . . . . . . . . . . . . 147 Time related Routines . . . . . . . . . . . . . . . . . . . 149 Introduction page 8 Introduction page 8 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Background Processing Tasks . . . . . . . . . . . . . . . . 150 Other Routines . . . . . . . . . . . . . . . . . . . . . . 151 Chapter IV Chapter IV . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Data Communications Subsystem . . . . . . . . . . . . . . . . . 155 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Global Communications Parameters . . . . . . . . . . . . . 157 Timers and Delays . . . . . . . . . . . . . . . . . . . . . 158 Data Communications Control Characters . . . . . . . . . . 159 Other Declarations . . . . . . . . . . . . . . . . . . . . 160 Procedures and Functions . . . . . . . . . . . . . . . . . . . . 162 Initializing and Terminating DC . . . . . . . . . . . . . . 163 Sending Data . . . . . . . . . . . . . . . . . . . . . . . 164 Receiving Data . . . . . . . . . . . . . . . . . . . . . . 166 Other Functions . . . . . . . . . . . . . . . . . . . . . . 167 Low Level Routines . . . . . . . . . . . . . . . . . . . . 168 Example Programs . . . . . . . . . . . . . . . . . . . . . . . . 170 A Simple Line Monitor (SAMPLE7.PAS) . . . . . . . . . . . . 171 Listing of SAMPLE7.PAS . . . . . . . . . . . . . . . . 172 Description of SAMPLE7.PAS . . . . . . . . . . . . . . 177 A Terminal Emulator Program (SAMPLE 8) . . . . . . . . . . 179 Listing of Example Program 8 . . . . . . . . . . . . . 180 Description of SAMPLE8.PAS . . . . . . . . . . . . . . 187 Program Discussion . . . . . . . . . . . . . . . . . . . . . . . 190 Introduction . . . . . . . . . . . . . . . . . . . . . . . 191 Example 1 (OASIS Easy Fields) . . . . . . . . . . . . . . 192 Explanations of SAMPLE1.PAS . . . . . . . . . . . . . 193 Example 2 (OASIS Print Labels) . . . . . . . . . . . . . . 195 Explanations of SAMPLE2.PAS . . . . . . . . . . . . . 196 Example 3 (OASIS Formats Stack) . . . . . . . . . . . . 200 Listing of SAMPLE3.PAS . . . . . . . . . . . . . . . . 201 Explanations of SAMPLE3.PAS . . . . . . . . . . . . . 202 Example 4 (OASIS Automatic Disk Menu) . . . . . . . . . . 204 Example 5 (OASIS SCL Demo) . . . . . . . . . . . . . . . . 208 Menu . . . . . . . . . . . . . . . . . . . . . . . . . 208 Country Demo . . . . . . . . . . . . . . . . . . . . . 209 Date Demo . . . . . . . . . . . . . . . . . . . . . . 211 Special Fields Demo . . . . . . . . . . . . . . . . . 213 SCL System Details . . . . . . . . . . . . . . . . . . . . . . . 216 Service Routines . . . . . . . . . . . . . . . . . . . . . 217 Background Processing Tasks . . . . . . . . . . . . . . . . 219 READING AND WRITING FIELDS . . . . . . . . . . . . . . . . 222 SCL Input Character Processing . . . . . . . . . . . . . . 224 The Error Message File . . . . . . . . . . . . . . . . . . 225 SCL - System Resource Considerations . . . . . . . . . . . 226 Disk Access . . . . . . . . . . . . . . . . . . . . . 226 Processor Requirements . . . . . . . . . . . . . . . . 226 Format File -Disk Space Requirements . . . . . . . . . 226 Introduction page 9 Introduction page 9 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Code Space Requirements . . . . . . . . . . . . . 226 SCL Data Space Requirements . . . . . . . . . . . . . 226 Total Memory Requirements . . . . . . . . . . . . . . 227 Tips & Tricks . . . . . . . . . . . . . . . . . . . . . . . . . 228 Entry of Characters not normally accessible via the Keyboard . . . . . . . . . . . . . . . . . . . . . . . 228 Blinking Fields . . . . . . . . . . . . . . . . . . . . . . 228 Use of the 'Intensity' field attribute on Color systems . . 228 The 'Selected' Attribute in Menus . . . . . . . . . . . . . 228 Preventing automatic termination of a format . . . . . . . 229 Highlighting text on screen formats . . . . . . . . . . . . 229 Special Fields . . . . . . . . . . . . . . . . . . . . . . 229 Storing strings in .ERR . . . . . . . . . . . . . . . 229 Using Field Input Messages for Help Screens . . . . . . . . 230 Using 'Goto_Field' . . . . . . . . . . . . . . . . . . . . 231 Alphabethic List of all User accessible SCL Procedures & Functions . . . . . . . . . . . . . . . . . . . . . . . . . 234 Datacom Control Characters . . . . . . . . . . . . . . . . . . . 237 Field Attributes and Colors . . . . . . . . . . . . . . . . . . 238 Possible Field Attributes . . . . . . . . . . . . . . . . . 238 Colors . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Functions in SCL Programs . . . . . . . . . . . . . . . . . . . 239 Standard SCL Error Messages . . . . . . . . . . . . . . . . . . 240 The Shareware Idea . . . . . . . . . . . . . . . . . . . . 241 OASIS Products & Licencing Terms . . . . . . . . . . . . . . . . 242 OASIS Demo package . . . . . . . . . . . . . . . . . . . . 242 OASIS Evaluation . . . . . . . . . . . . . . . . . . . . . 243 OASIS . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Invoice & Order Form . . . . . . . . . . . . . . . . . . . . . . 247 Order Form . . . . . . . . . . . . . . . . . . . . . . . . 247 Invoice . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Introduction page 10 Introduction page 10 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction page 11 Introduction page 11 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction Introduction ____________ What is OASIS? What is OASIS? OASIS stands for Open Architecture Screen Interface System. OASIS is a fourth generation programming tool to develop screen based application programs and User Interfaces on Micro Computers. No one can deny that computers still primarily rely on visual and tactile means of communication to interact with its users. With the proliferation of microcomputers in recent years, as more and more people became users they consequently behaved as consumers who implicitly stressed the emphasis on human interfacing, as a result products offered more and more ergonomic features. Among the top features speed is definitely high on the list. Obviously the first and most tangible advantage of fast applications is an overall gain of time to complete a given project, however this is certainly not the most important one. What matters more is the response time, in other words the time it takes for the application to process elementary tasks which if not carefully timed induce unnecessary and undesirable delays. Neglecting this factor, no matter how small or hardly perceptible delays can be, invariably results in operator's irritations that may in some cases lead to reject the product. Otherwise what the user wants is in essence a tool easy to use, quick to learn with sufficient help information readily available on line, flexible but logical and powerful, in other word something comfortable and easy on the eyes that meet his expectations. On the other side of the fence we have the programer who is tasked to satisfy all these requirements while focussing on performance thus making the product attractive and marketable within a tight schedule in order to be one of the first in this competitive marketplace. This is precisely where OASIS come into play to serve the interests of all parties. OASIS is an immensely powerful tool for the programmer because it allows him to cut down development time while ensuring outstanding human interface features and still focus on the intrinsic part of the application thus optimizing its resources and performances. How OASIS achieves this is described in the product overview. To illustrate what has just been is said here you ought to know that OASIS and more specifically SFD (Screen File Designer) itself has been designed using the semantics that governs SCL (Screen Control Language) itself and for that reason is indeed an application of itself, in other words SFD was designed using SFD, a sort of CATCH 22 scenario. To sum up this brief introduction one could say that OASIS is to the DESIGN AND MANAGEMENT OF USER INTERFACE what the advent of wordprocessors in the mid 1970's has done to TEXT WRITING AND EDITING. Introduction page 12 Introduction page 12 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual About this manual About this manual _________________ This manual describes OASIS and its various components and how to use them. This book articulates itself around three chapters followed by one appendix. CHAPTER I System Overview CHAPTER I System Overview The purpose of this chapter is to arouse the interest of the reader by describing OASIS main components and listing their features. CHAPTER II Screen File Designer (SFD) CHAPTER II Screen File Designer (SFD) After a short introduction to SFD you will be paced through a comprehensive tutorial followed by a chapter providing a functional description of SFD. CHAPTER III Screen Control Language (SCL) CHAPTER III Screen Control Language (SCL) This chapter discusses in details the major procedures and functions that constitute the heart of the system. CHAPTER IV SCL Data Communication subsystem CHAPTER IV SCL Data Communication subsystem Since OASIS can be used in a micro to mainframe environment this chapter is entirely dedicated to the DataCommunication extensions of SCL. APPENDIX A APPENDIX A This chapter covers several advanced OASIS features and also contains descriptions and discussions of 5 sample programs. APPENDIX B APPENDIX B Lists and Tables. OASIS products & Licencing Terms. Introduction page 13 Introduction page 13 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual What this manual assumes What this manual assumes ________________________ In order to fully exploit the Secret of SCL the reader is expected to have some experience with programming languages and especially TURBO PASCAL. We assume that the reader can refer to BORLAND manuals and references in order to write SCL programs, compile, debug and run them. What you will learn What you will learn ___________________ The best method to learn something new is to practice, make mistakes and learn from them. From the very beginning, you will have at the tip of your fingers all the power and the flexibility of the Screen Format Designer SFD, you will soon realize how intuitive it can be and it won't take long before you become familiarized with all the keyboard functions and the system features. The tutorial in chapter II will pace you step by step in the design of a trivial screen letting you exercise almost every function of SFD. Within a couple of hours you will be able to design and test fully fledged screens. Chapter III provides you with the basic architecture to elaborate complex programs including multiple stacked screens (windows) and background processing tasks. Chapter IV will let you include data communication routines to deal with the outside world. Finally a set of programming tips is available in Appendix A to the expert to fine tune complex applications to a breathtaking level. We hope that you will very shortly be able to unleash the full power of OASIS to your benefit, your limits being your own imagination. Good luck and have a good time. Introduction page 14 Introduction page 14 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual This Page is intentionally left blank Introduction page 15 Introduction page 15 Chapter I Chapter I OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Open Architecture Open Architecture Screen Interface System Screen Interface System ( OASIS ) ( OASIS ) System Overview and Features System Overview and Features Chapter I, System Overview and Features page 17 Chapter I, System Overview and Features page 17 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Overview Overview ________ OASIS allows you to create and handle state-of-the-art screen OASIS interfaces with many outstanding features in a most comfortable and efficient way. Due to its background processing capabilities the handling of datacom and so on can also be easily achieved. OASIS is OASIS not an application generator. Typically, application generators require some kind of a macro language which is usually rather limited in terms of flexibility. This often results in slow running, clumsy applications a too high price to be paid for added programming convenience. Instead, OASIS is built on top of Turbo Pascal, leaving all features OASIS of this powerful development system available to you for special requirements OASIS may not be capable to fulfill. OASIS With OASIS you can OASIS * Add Micro based front ends to existing mainframe programs, taking over anything from Screen Management up to local data storage etc. * Build the Micro part of distributed processing applications. * Write completely Micro based Applications utilizing virtually any number of screen formats. * Develop sophisticated Terminal Emulators. OASIS is a sophisticated and powerful user interface design and OASIS management system that both simplifies the task of the application writer and provides a very attractive interface to the end user. Using OASIS not only results in tremendeous time savings (depending OASIS on the kind of application between 50 and 90 percent) but also achieves perfect results. Chapter I, System Overview and Features page 18 Chapter I, System Overview and Features page 18 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual OASIS has two main components: OASIS has two main components: The Screen Format Designer (SFD) The Screen Format Designer (SFD) The Screen Control Language (SCL) The Screen Control Language (SCL) Screen Format Designer (SFD) Screen Format Designer (SFD) SFD is an integrated application program, itself written with OASIS, SFD OASIS introducing a new concept in the elaboration of screen formats. It allows the user to interactively design any screen format layouts on the principle of what you paint is what you get. Away from the host application SFD lets you define all field parameters of the format plus a large suite of other refinements such as related error messages and help screens. Futhermore SFD enable you to dynamically ___________ test new formats before you even wrote a single line of code. ____ Screen Control Language (SCL) Screen Control Language (SCL) SCL is a extensive collection of Turbo Pascal Source Routines built SCL to cater for all aspects of format access, display, window management, data capture, input check, display of error messages, help system. By simply including these routines in any Turbo Pascal Program, all of its features can be used just like a very high level, straightforward and easy to learn language extension to Turbo Pascal. This not only leaves all flexibility to the programmer, but enables him to create highly professional applications with many outstanding features in a fraction of the time usually required, which contributes to reducing development costs considerably. Chapter I, System Overview and Features page 19 Chapter I, System Overview and Features page 19 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Screen Format Designer (SFD) The Screen Format Designer (SFD) ________________________________ The purpose of this program is to assist you to design, specify and test all screen formats to be incorporated in an application program. These formats are 'built' in a straightforward but comprehensive approach using a full screen editor for the format layout and a series of pop-up menus to define field and global parameters. Finally under each single format name are stored not only the form description layout and its field definitions but any information related to that format such as reference to help screens. Key features of SFD include : Key features of SFD include : - Easy to understand, Menu Driven Program with Windows. - Online accessible, context sensitive Help facility. - Layout design with comfortable Full Screen editor. - Full characterset access. - Drawing of Boxes with the opportunity to choose any linestyles and automatic interconnections to other boxes. - Powerful Block Copy and Delete functions. - Outstanding selection of display attributes and highlightfunctions, seperate for color and monochrome displays. - A large range of pre-defined fieldtypes. - Input validation selectable for any field. - Up to 50 fields per format. - Option to define and link 'Help' formats and assistance messages to any single field. - Unrestricted formats size up to 80 x 25. - Number of formats per program only limited by disk space. - Transfer of formats between different format files. - Printing of format lists and hard copies. - Complete inbuilt test facility for new formats. - Dynamic alteration of format specs. and attributes during test with results immediately being visible. - Full support of MSDOS 2+ Subdirectory structure. Chapter I, System Overview and Features page 20 Chapter I, System Overview and Features page 20 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Screen Control Language (SCL) The Screen Control Language (SCL) _________________________________ SCL is an extensive set of routines to access SFD generated format SCL SFD files and to perform all screen related functions within a Turbo Pascal program. The main features of SCL are: The main features of SCL are: - Powerful command syntax (Processing of a complete format including input check and error handling with only three statements). - Automatic control of display and overlay of formats. - Easy and comfortable access to fields. - Support of windows including stacking to any desired depth, only limited by the amount of memory available. - Handling of menus, even multiple menus and/or together with data input fields on one format. - Full control of display attributes and formatting of fields. - Automatic input validity checks and display of error messages. - No requirement to declare field variables etc. in your program. - User programmed checks or other interferences possible anytime made simple and safe. - Capability to monitor and flag user selectable keyboard keys and other events. - Changes to Formats, Messages and Input check parameters are possible without recompiling the program. - Highly improved conciseness and ease of understanding of finished programs. - Comprehensive library of procedures and functions to facilitate date/time processing, access to DOS functions, string handling, (data communication with full reease) and much more. - Support of execution of other programs and even DOS commands from within an application. - Support of background processing tasks (datacom, printing etc). Chapter I, System Overview and Features page 21 Chapter I, System Overview and Features page 21 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Application programs written with OASIS. Application programs written with OASIS. ________________________________________ The use of OASIS results in very ergonomic application programs with The use of OASIS outstanding handling capabilities and many userfriendly features like: - Automatic display of assisting messages for each single field. - Extensive Online Help System with four different, user selectable levels. - Automatic Input error handling and display of error messages. - Adaptability to different systems/keyboard layouts. - Simple and straightforward Nationalisation and Customisation. - Full Support for both Color and Monochrome displays. - Undo function. - Abort function. - Mouse support very simple to accomplish. - Interrupt driven Data Communications Handling Chapter I, System Overview and Features page 22 Chapter I, System Overview and Features page 22 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Some Feature Explanations. Some Feature Explanations. __________________________ Screen Related Program Parameters Screen Related Program Parameters In OASIS written application programs most screen related parameters OASIS are stored in data files. This includes the format layouts themselves, the field details, error messages, help and explanatory information, field input check/validation parameters, colors, attributes and much more. All these parameters can be altered anytime using SFD. SFD This presents several advantages: 1. Program changes are often possible without recompiling. 2. Nationalisation and customisation of programs, otherwise often very tedious and time consuming tasks become effortless and easy to accomplish. 3. The program sources are more compact, easier to understand and do compile faster. Colors and Display Attributes Colors and Display Attributes OASIS written applications automatically recognize the type of OASIS display adapter and therefore utilize the suitable screen attributes. For optimum result, two totally independent sets of attributes are provided for each format/field, one for color graphic and one for monochrome display adapters. Note: OASIS works in 80 column modes only. Note: Non Standard Keyboard Layouts Non Standard Keyboard Layouts SCL written applications can easily be adapted to non standard SCL Keyboards. The Codes of all relevant keys are stored as constants and can be adapted as required. Chapter I, System Overview and Features page 23 Chapter I, System Overview and Features page 23 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Program development with OASIS Program development with OASIS ______________________________ It is made up of two distinct phases. A. Declarative Phase A. Declarative Phase This Phase is completely performed using SFD. It consists of the SFD following steps: 1. Define all screen formats and fields required. For each Format do the following: 2. Using the screen editor, design its layout including location and size of all required fields. 3. Using pop-up menus then specify the appearance of the format, define whether special checks are required or not for this format and establish if and when other external actions are to be performed. 4. Always using pop-up menus determine if and in which fields error and explanatory messages are to be displayed. 5. Again using pop-up menus specify for each field, the type (Variable, Constant, Output) and define its parameters like special appearance, attributes, formatting, necessary checks, explanatory message,inter field dependencies and so on. 6. Finally test the format using the SFD test facilities. The SFD format behaves just as if it was already integrated in your program. You can therefore safely test input checks, formatting, help system and many other things. You may find that you are not satisfied with one or another detail. No problem, you can do most changes right away, without even leaving the test. The results will be immediately visible to you. Only for some major changes like basic layout or field types you would have to go back to the Design facility. 7. Once you are pleased with your format, you can assign help screens to it (this can be done anytime later on). There are many different possibilities for the help system, please look under "The OASIS Help System" for details. "The OASIS Help System" Chapter I, System Overview and Features page 24 Chapter I, System Overview and Features page 24 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual B. Procedural Phase B. Procedural Phase 1. Now the time has come to actually begin programming using SCL SCL constructs. The first approach is to build some sort of skeleton program, containing all switching logic between different formats and so forth. 2. You then compile this skeleton and experiment with the basic logic to assess its functionality and see if it is what you wanted initially. By now, you will have an exact idea how the final program will look like and you already have spared yourself precious time since you will require a lot less testing and changes later on. 3. You complete your program by adding all the missing logic into the skeleton. 4. You perform the final testing and fine tuning as required. Chapter I, System Overview and Features page 25 Chapter I, System Overview and Features page 25 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Differences to traditional program development Differences to traditional program development ______________________________________________ What instead of how What instead of how Obviously the first difference with conventional user interface approach is that you do not have to specify how your formats are to be built. As a matter of fact this is the essence of the OASIS concept. All you have to do is draw them and tell SFD what they should look like. It is no longer neccessary to write procedures to check or to format the fields content. As a general rule, just declare what should be done, not how to do ____ ___ it. Early Tests Early Tests Most of the necessary test work can be performed at quite an early stage of the program development, ensuring that conceptual errors are detected early enough to take corrective actions before things get out of control. Less Programming Less Programming Another strength resides in the fact that much of the programming is already done before you even start to generate a program source. Once you really start programming, you will realize that SCL constructs SCL allow you to remain in the declarative mode. Since you don't have to declarative develop procedures, you can concentrate on more global aspects of your program and, as a side effect, you'll save a considerable amount of time. Easier changes Easier changes During program development a lot of changes have to be made to the program. Even once a program is finished, you usually never really stop changing it. For programs written with OASIS this becomes a lot OASIS easier. If the changes are in the screen interface, you can usually perform them via SFD without even recompiling the program. Even if SFD this is not the case, it becomes a lot easier to do since your program source is much more concise and thus more intelligible. Nationalization, customization made simple Nationalization, customization made simple All screen formats and all program messages are stored in data files, easily accessible with SFD. Customisation of screens and/or messages SFD or even translation of a whole program into other languages become mondaine tasks, without even recompiling the program. Chapter I, System Overview and Features page 26 Chapter I, System Overview and Features page 26 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual System Installation and Setup System Installation and Setup _____________________________ The Distribution Disks The Distribution Disks On the OASIS Distribution disks you'll find the following files: On the OASIS Distribution disks you'll find the following files: READ.ME Textfile containing last minute information. SCL.TPU Turbo Pascal 4.0 Unit file containing all Screen Screen Control Language (SCL) Routines and definitions. Control Language In order to access SCL you must include 'SCL' in your 'USES' statement. SCL.DOC Source of the 'Interface' Part of SCL.TPU. SFD.EXE Screen Format Designer Program. SFD.ERR Text file containing error messages for SFD.EXE. SFD.MSG Data file containing explanatory program messages for SFD.EXE. SFD.FOR Screenfile for SFD.EXE. SFD.FIN Screen index file. SCL.ERR Optional (Error-) Message file to be used for your programs. You can add your own messages as required. SAMPLExS Turbo Pascal program examples to demonstrate SCL. SAMPLEx.EXE Compiled versions of the above. SAMPLEx.SCS Screenfiles to above. SAMPLEx.SCI Indexfiles to above. SAMPLEx.MSG Message files to above. SAMPLEx.ERR Error messages to above. Chapter I, System Overview and Features page 27 Chapter I, System Overview and Features page 27 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual System Requirements System Requirements IBM PC or compatible 256 KB Memory minimum Hard disk *) PC DOS/MS-DOS 2.0 or later Turbo Pascal 4.0 or later *) Note: Note The Screen Format Designer program requires a hard disk in order to Screen Format Designer run. Other typical Application Programs build with OASIS normally run OASIS happily on a floppy system. See Appendix A for Details on System Resource Considerations. See Appendix A for Details on System Resource Considerations. Chapter I, System Overview and Features page 28 Chapter I, System Overview and Features page 28 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Installation Instructions Installation Instructions _________________________ There is no special Installation procedure necessary since OASIS is not copy protected. Just create a subdirectory on your hard disk and copy the content of both distribution disks to it. Now add to your CONFIG.SYS file the following two statements: FILES=16 FILES=16 BUFFERS=32 BUFFERS=32 If your configuration file should already contain a "FILES=nn" statement, then you just increase the number to at least 16; if it is already bigger, leave it as it is. The same applies to the "BUFFER=nn" Statement. This completes the installation. To start the Screen Design Program just go to the subdirectory you've loaded the distribution disks to (using the DOS Command "CD") and enter SFD. SFD Chapter I, System Overview and Features page 29 Chapter I, System Overview and Features page 29 Chapter II Chapter II OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Chapter II, SFD getting started page 31 Chapter II, SFD getting started page 31 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Screen Format Designer The Screen Format Designer ( S F D ) ( S F D ) Getting Started Getting Started (A Short Tutorial) (A Short Tutorial) Chapter II, SFD getting started page 32 Chapter II, SFD getting started page 32 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Explanation of keyboard functions Explanation of keyboard functions At first you will probably find the following explanations rather complicated and confusing, but upon trying you will soon find that everything does function in a very intuitive way and you will very quickly get familiar with it. Much care has been taken regarding the way the different functions are layed out to achieve ease of operation and a maximum of ergonomy. Variables and Constants Variables and Constants Variables and Constants are the two main categories of format fields. Whenever you happen to see the cusor, either as a blinking underline character or as a big block (which may or may not blink) you are in a Variable field and you are expected to enter some data. Variable If the cursor is not visible you are in a Constant field. You can't Constant enter any data into Constants, all you can do is to select or deselect them by pressing Return or Enter. A typical example for Return Enter. Constant fields is a Menu. You just select one (in some cases more Constant than one) possibility out of a choice being presented to you. The keys to travel between fields and their functions are as follows: The keys to travel between fields and their functions are as follows: Right : Next Field. Left : Previous Field. Down : First field on next line. Up : Last field on previous line. Home : First field in line. End : Last field in line. PgDn : Last field on format. PgUp : First field on format. Tab : Next field.*) ShiftTab : Previous field.*) Note: Note: *) Tab and Right respectively ShiftTab and Left are not identical. See next paragraph. Chapter II, SFD getting started page 33 Chapter II, SFD getting started page 33 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Variable field specials Variable field specials Upon approaching a Variable field you will realize several things happening. 1. The present content of the field (if there is any) is being shifted to the left, no matter how it was formatted before. this is done in order to facilitate the entry or change of data. 2. In some cases, the part of the field not yet containing data is flushed with Fill characters (usually dots) or the whole field Fill is being underlined. Whichever the case, the intention is to give you an indication of the length of the field, i.e. how much space is left for data input. 3. The Cursor is visible in form of a blinking Underline character. Once you start entering data, the shape of the cursor changes to a big block which may or may not blink. This indicates that you are now in Entry mode and that the left and right arrows have changed their Entry meaning. Now Right advances you one character position and Left moves Right Left you to the previous character. Note that Tab and ShiftTab keep their Tab ShiftTab original functions. If you press Right while already being in the Right rightmost position of the field or if you press Left while being at Left the first character of the field you will be notified by a Beep. Beep. Besides just entering data, there is an alternate method to change from Travel to Entry mode : Pressing Return. This is especially handy Travel Entry Return in cases where you want to change already existing data in a field and you need to advance to the appropriate character position(s) using the arrows. arrows Editing keys Editing keys Backspace : Deletes character left of cursor. Insert : Inserts a space at cursor position. Delete : Deletes character under cursor. Note: Entering data into the rightmost position of a Variable Note: Variable automatically advances you to the next field. Chapter II, SFD getting started page 34 Chapter II, SFD getting started page 34 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Return Return As previously mentioned, pressing Return while in a Variable field Return Variable puts you into Entry Mode. Once you are in Entry mode pressing Return Entry Entry Return finishes this field an advances you to to the next one or, if this field was the last one, terminates the format. The resulting effect on the field content varies depending on your position within the field. If you were in the first position, the entire current field content is captured. For all other positions only the portion of the field left of the cursor is recognized. While in a Constant field, pressing Return toggles the status of the Constant Return field from not selected to selected and vice versa. The cursor will not selected selected automatically be advanced to the next field. In case you are already in the last field the format will be terminatedn In some cases, Constant fields can form a group, typically some kind Constant of a menu. In these cases only one field out of that group may be selected at any given time. So, if you select a field other than the one presently already selected, the latter one will automatically be deselected. If a field of such a group has been selected, the cursor automatically advances to the field immediately following the group (in case there is none left, the format will be automatically terminated). Selecting an item out of a group of Constant fields may or may not be Constant mandatory. In case it is, you are not allowed to deselect a field deselect (i.e. pressing Return in a field being presently selected results in Return selected a Beep or an error message to be displayed). Beep In such cases, deselecting a field is automatically done as soon as deselecting you select another field. This is very much the same as on a TV-Set select where you deselect a channel by just choosing another one. Escape Escape Escape can be used to tell the program independently of the cursor position that you are finished with the present format and you want to exit it. Chapter II, SFD getting started page 35 Chapter II, SFD getting started page 35 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Function keys Function keys F1 F1 Pressing F1 displays General Help Informations including key F1 functions etc. F2 F2 F2 displays specific Informations relative to what you are presently doing. Please note that F2 help is not available for every format. In F2 help such cases, if you press F2 you will just hear a beep. F2 beep. F3 F3 The UNDO key. Pressing F3 will restore the content of your present F3 field to whatever it was before you changed it; i.e. will UNDO your changes. Note that UNDO only applies to Variable fields. Variable F10 F10 The ABORT key. Pressing F10 tells the program that you want to F10 unconditionally abort your present operation. Any data you may have entered on your present format will be lost. For this reason, Abort Abort is only available with a few formats. Formats where Abort is not available can typically only be exited by Abort hitting the Escape key while the data fields are empty. Escape Other (local) functions Other (local) functions On some formats there may be further functions available. Pressing F1 F1 (Help) will always give you the appropriate details. Chapter II, SFD getting started page 36 Chapter II, SFD getting started page 36 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Errors & Automatic Help System Errors & Automatic Help System ______________________________ Invalid data entry Invalid data entry Whenever you try to enter invalid data you will be notified by a Beep Beep and, in some cases, a system generated error message may be displayedn Missing mandatory data Missing mandatory data If you attempt to exit a format before having entered all mandatory fields, the program will notify you in the same way as in the case of invalid data. In addition, the cursor will automatically be positioned into the field where data is missing. Autohelp feature Autohelp feature If you make a certain number of consecutive input errors (Default = 3) the program will automatically come up with information where and how to obtain help. Note: You can change nearly all Help system Parameters according to Note: your requirements. See under 'System Defaults' for details. Chapter II, SFD getting started page 37 Chapter II, SFD getting started page 37 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Design Cycle Design Cycle ____________ To make you familiar with the operation of SFD we will now go together through the complete cycle of design and specification of a format. During this exercise we will also look at some of the features the program offers. Once we are done with the design of your format we will test it using SFD's own test facility. Those already familiar with the basic operation of SFD can skip this Those already familiar with the basic operation of SFD can skip this part of the manual. part of the manual. Start the program by entering SFD (Make sure to be in the SFD right directory). After a short moment you will be presented with the programs main menu. It is divided into three parts. The header shows the program name, version etc as well as some informations about the directory you have selected, the workfile and the number of formats in it. Since you have just started up the program the following information should be displayed. Act dir : . Workfile : . Nr of Formats: 0. The middle part of the menu is occupied by a number of menu items, subdivided into seven groups. Presently, the first item (Layout) of the first group (Design) should be highlighted. The last line of the menu is called Message Line and gives you a Message Line brief explanation of the highlighted item. If you press F1 (just do it !) a screen informing you about the F1 meaning of keys etc will appear. To leave the Help format press either Return or Escape. Return Escape. F2 will give you a bit more detailed Information about the presently F2 highlighted group of items on the menu. Again, to leave the help format you must press Return or Escape. Return Escape. You can use F1 on any format, F2 may not be available in some cases. F1 F2 Chapter II, SFD getting started page 38 Chapter II, SFD getting started page 38 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual You can travel around on the menu using the appropriate keys. If you don't know which ones either look in this manual under 'Meaning of keys' or press F5. While you are traveling around on the menu, watch F5 the message line changing. | You may also want to press F2 while being in different fields and read the appropriate explanations. Once you are familiar with how to travel on a format, we can proceed to some 'real' work. | Before we start I want to remind you of the two 'Help' keys F1 and F2 During this exercise it is probably a good idea to use them very frequently (Especially F2) and read the information they containn | Don't forget that the help provided by F2 is context sensitive (i.e. the kind of information provided may change depending where you presently are on the format. Should you require further detailed informations, then read the appropriate chapter later on in this manual. Chapter II, SFD getting started page 39 Chapter II, SFD getting started page 39 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Designing a format layout Designing a format layout _________________________ 1. Travel to the appropriate item (Layout). 2. | Hit Return. This selects the item. Since you have not yet loaded a work filel SFD will come up with a SFD tiny window asking you for a name. Enter a name (without extension since SFD uses its own extensions), SFD | say 'Myfile', and press Return. The window disappears again and a new one will come up informing you that SFD will ask you whether you want to create a new format. You SFD say yes. Now you will be presented with the layout editor's worksheet (a fancy name for an empty screen, isn't it ?). It's size defaults to 25 lines with 80 characters each (a full screen). In order to familiarize you with the different features, you should | now read both the F1 and F2 help formats. | You probably have already noticed some additional functions on F4 to | F9 During our little exercise we will try out most of them. However we should first talk about the other keys. Some have a slightly different meaning as on a normal format. Chapter II, SFD getting started page 40 Chapter II, SFD getting started page 40 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Layout editor - Meaning of keys Layout editor - Meaning of keys | Backspace, Insert and Delete have the same meaning as under normal operation. | Home moves the cursor to the upper left corner of your worksheet. | End moves the cursor to the first position on the last line. | PgUp deletes the line under the cursor. | PgDn inserts a line. | Return moves the cursor to the first character of the next line. | The Arrow keys allow you to move freely on the format. Note that the | Arrows are working in wrap-around mode. This means that: | If you press Right while being in the rightmost position you will be moved to the first position of the next line. | If you press Left while being in the first position of a line you will be moved to the last position of the previous line. Right while being in the lower right corner moves you to the upper | left corner; the opposite happens if you then press Left. | Pressing Up while being in the first line moves you to the last line | and the opposite happens with Down while in the last line. Before starting to draw a format we will learn how to specify its size. (The size can actually be changed anytime during the layout design). Chapter II, SFD getting started page 41 Chapter II, SFD getting started page 41 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Changing the Format Size Changing the Format Size | Press F9. This will display the editors local menu. Select the first item (Change format size). A new window comes up with the present settings. Just enter new values, let's assume 15 lines with 40 characters each. That's it. You'll now see that the unused portion of the screen is filled with tiny dots. This is done to give you an idea of your drawing area. You will also realize that cursor movement is now confined to this area. Now we will start drawing a screen format. Chapter II, SFD getting started page 42 Chapter II, SFD getting started page 42 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Drawing fields Drawing fields In our exercise we will build a format for a rather trivial program to print address labels. While drawing it make sure that you don't put any text into the first character position on any line because we will need this space later on. First go to the second line and give the format a header of your own | choice. Once you have written it go to column 1 and press Insert until it is approximately in the center. (If you have moved it too | far, use Delete) Now go to line 4 and enter the following: [Mr][Mrs][Miss] The open square bracket means 'Begin of field', the closed means 'End of field'. In your example, the first character position of the first field is the 'M', the last is the 'r'. the field has a length of two characters. Now complete your format according to the drawing below. Move everything that it looks nice. The exact length and position of the fields does not matter at the moment, just check that you have left line 1, line 3, the line below 'City' and line 15 (the last) as well as the first and last column empty. We will need them in a moment... -Header- [Mr][Mrs][Miss] Name.......[ ] Street.....[ ] City.......[ ] Number of Labels[ ] Msg[ ] Chapter II, SFD getting started page 43 Chapter II, SFD getting started page 43 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Drawing boxes Drawing boxes Presently our format doesn't look too appealing, does it ? We will correct this now by drawing boxes around the different parts. First we want to draw a frame around the complete format. We need to | Mark two diagonal corners of the box we want to draw. Therefore we go | to line 1, Column 1 (Home) and press F5 (Mark). The mark is shown as | a small rhombus. (By the way, an accidentally set Mark can easily be | removed by positioning the cursor over it and pressing F5 again). | To get to the other (lower right) corner we can now press Left twice. | Again F5 to mark it. | Now press F8 (Draw Box). Observe !. Observe ! | Incidently, key F7 does exactly the opposite of F8, i.e you can | undraw (delete) a box with it. The box drawing feature can also be used to draw vertical or horizontal lines. Just place the two marks in either the same line or the same column. Apart from double lines as you have already seen, boxes can be drawn in all kind of line styles which ca be seperately defined for horizontal and vertical lines. To do this, go by the following instructions. Chapter II, SFD getting started page 44 Chapter II, SFD getting started page 44 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Selecting Linestyles Selecting Linestyles We now want to seperate the different parts of the format. However we would rather like to use single lines instead of double lines. In order to achieve this you go to the local menu (F9) again and select the second option (Box Linestyles) by highlighting it and pressing | Return. The small triangles you see on the format being presented to you specify the currently selected linestyles (Double lines). Since we want single lines for horizontal, highlight the second field and | press Return. The vertical lines we leave as they are. Once back on | your worksheet, go to Line 3, first column. Place a Mark. | Go to the last position of the line below 'City'. Mark it as well. (Actually you could also have marked the other two diagonal corners, i.e. line 3, last column and the first column of the line below 'City'). | Press F8 to draw the box. As you can see, all necessary Junctions are done automatically. (For your information: This applies not only for 'T', but also for (For your information: This applies not only for 'T', but also for 'X' junctions, whenever you use single or double lines). 'X' junctions, whenever you use single or double lines). By now, you should be reasonably satisfied with your format (don't be too fancy after all, it is not that terribly sophisticated anyway) and we will proceed to specify its parameters. | To leave the editor, press Escape. SFD will verify whether you really want to leave the editor, select SFD 'Yes'. Note: The program is now checking your format. If for some reason Note: you did not properly use the brackets (Field delimiters) a window will be displayed informing you of the kind of error you made. In | this case, hit Escape or Return to go back to the editor and correct your piece of art before attempting to leave it again as described above. Chapter II, SFD getting started page 45 Chapter II, SFD getting started page 45 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Field specifications Field specifications Now you should see your format (the field delimiters have been removed) and a small menu offering four different choices. We want to specify the fields of your format, so take the first one. The menu vanishes and you are back in your address label format. It now behaves like any other format you've seen so far. The first field is highlighted and you can travel around using the familiar keys. Before going further we should think a moment about your format and what it should look like. The first three fields (Mr,Mrs and Miss) should be a group of options. There is no data to be entered into these fields , we just want the user to select one (and only one) of the given options. Such | fields are called Constants in SFD. To make the selection exclusive SFD (only one may be selected) we must declare them as a group. And we also want the selection to be mandatory. To conclude. 1. We want fields 1 to 3 to be a group of selectable items (Constants). 2. We want to declare them as mandatory. Now let's do it. Go to the first field (the 'Mr') and select it by pressing Return. A window will come up giving you several options to preset the field specifications. At present, your field is set to the default values, meaning it is assumed to be a variable, any input is allowed, there are no checks to be made and some more. We don't want to preset it to anything else (all other fields are currently declared in the same way), so we choose 'None'. But we do want to change some of the specification details, so choose 'Yes'. Chapter II, SFD getting started page 46 Chapter II, SFD getting started page 46 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Now the Field specification format comes up. The 'Type' still says | Variable. We want to change it to Constant. Since the cursor is | already in the 'Type' field just press Return. A small menu will come | up. Choose 'Constant' and press Return again. That's it. The next two fields show 'Group from 1 to 1'. Change the second '1' | to '3' and press Return. | Now you go to 'Mandatory' and hit Return to change it to 'Yes'. Note: If you want to know the meaning of the other specifications, Note: | just make use of your mighty F2 Help key. At this point in time we could also specify the colors and attributes, but for the time being we will leave them unaltered at their default values and come back to them later on in this exercise. | You can now press Escape to finish the format. Since we have specified that field 1 is the first of a group ranging from field 1 to field 3, SFD automatically copies it's specifications SFD to the remaining fields of the group. There are however some specifications which are not copied: The 'message', the delimiters | and whether the field is Selected or not. The next three fields (4 to 6) on your address label format are to be | used to enter data, in other words, they are Variables. We want to make input to them mandatory. Call up the field specifications for the first one (Field Nr 4, the 'Name' field). Go to the 'Fill' field. Enter a 'dot'. Into the 'Delimiter left' field put a colon. (The colon will be displayed at the Position were you put your open square bracket when you designed the layout). Set 'Mandatory' to 'Yes'. Now leave the format. The next two fields on your format (street and city) should look the same as the 'name' field. Consequently you can use the 'Preset' function to copy the previous fields specs. As mentioned earlier, the 'Delimiters' are not copied, so, if you want to have a colon in front of these fields as well, you must specify it (otherwise you can choose the 'Details No' Option). Chapter II, SFD getting started page 47 Chapter II, SFD getting started page 47 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual There are two fields left on your format, 'Nr of Copies' and 'Msg'. 'Nr of copies': Here again you can copy the specs from the previous field. But go into the details as well since we want to specify some input check parameters. First of all, we only want Integer numbers (there is nothing like 2.4 labels). Hence go to the 'Inp.Check' field and press Return. Now make your choice. We also want to limit the Number of address labels one can obtain. We will assume a minimum of 1 and a maximum of 25 labels. Enter the appropriate values and finish the format. The 'Msg' field we want to use for error messages (If we don't | specify a field for them we would just hear a Beep in case of erroneous data input). | Specify the type as Output only and also set 'Justify' to 'Center' (just to make the messages look nice). Leave the format. | Since we now have specified all fields in your format, press Escape. You are now back in the 'Change Format Specs' menu. Chapter II, SFD getting started page 48 Chapter II, SFD getting started page 48 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Control Specifications Format Control Specifications Select 'Format Control Specs'. | Once the format is diplayed you probably best press F2 first and read the infomations to get an idea. Now let's begin. The first field we want to change is 'Error Message Field'. Enter the number of your 'Msg' field, 8. Actually, we are already finished with our specifications, but let's | take the opportunity to talk about the User Function Key specifications on the lower half of this format. User Function Key Specifications User Function Key Specifications The purpose of these specifications is to tell SCL later on in your SCL program when to invoke special user written routines like additional checks, prefilling of fields and many other things. By default, i.e. without the need to be specified, facilities are provided by SCL to SCL optionally invoke user written routines whenever a format field is entered, left or if the format is exited. In addition to this, SCL can be instructed to allow user written SCL routines to take over control whenever certain keys are pressed. In order to allow this to happen, the appropriate keys must be specified | as User Functions. SFD lets you specify any of the ten function keys and, in addition, SFD | up to ten other keys to serve as User Functions. ('Key' in this context can be any valid CNTRL or ALT key combination as well). In addition to the here mentioned Interrupt specifications which are valid throughout the whole format there is one more which can be specified for each single field. You may have seen it already when you did the field specifications. It is called 'CharCheck' and, if set, can invoke a user written procedure at each single keystroke if the cursor is in the appropriate field. As you probably can imagine, the possibilities offered by the User Interrupt System are enormous. Advice and examples on how to use them are provided in A[[endix A. Further informations can also be found in the SCL part of this SCL manual. Chapter II, SFD getting started page 49 Chapter II, SFD getting started page 49 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual We have now completed the format specification (colors and attributes | will be discussed during the format test). Press Escape to go back to the little 'Specifications' Menu and select 'End'. Your format is now written to the format file on disk and you are back in the Main Program Menu. If you look at 'Nr of formats' in the header of the menu, you'll see '1', indicating that you have created your first format. If you want, you can print a hardcopy of it on your printer before we continue to test it and try out the Color/Attribute specifications. By now you should have a better understanding of some of SFD's SFD's features and I hope that you have enjoyed our exercise so far. When you are ready to continue, we will take a look at SFD's Format SFD Test feature. Chapter II, SFD getting started page 50 Chapter II, SFD getting started page 50 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Testing a Format Testing a Format ________________ | Select Design Test/Modify on the main menu. When asked for the name of the format you want to test, enter 'Myformat' or whatever name you called it. If you entered the wrong name, you will be notified by a | Beep. In this case, either correct it or, if you don't know the name | anymore, press F10 to get back to the main menu and use the Display | Formats option to find out the right one. Anyway, as soon as you have entered the name of your format, press | Return and it will be displayed. It now behaves exactly according to your specifications. All input checks are being performed and if you enter something wrong or forget to enter mandatory data you will be notified. Take yourself a couple of minutes to try out all kind of things like leave off mandatory data, try to enter invalid data etc and watch the results. Note: Handling of a format under 'Test' is a lot slower than later Note: on in the program. This limitation is imposed by the fact that all messages must be read from a disk file as opposed to later on in the program where they are stored in memory. Now let us modify the way it looks. | To do this, you have to select the local menu (you know how, don't you ?). This menu offers the following choices: Change field specs/Active field Change field specs/Active field Allows you to change the specifications of the field in which you currently are. Change field specs/Other field Change field specs/Other field This option enables you to change any other field on your format. It is particularly useful to change fields you can't get at (Output only fields). Global Colors/Attributes Global Colors/Attributes This option allows you to change the colors/attributes of all fields of a kind (all variables, all constants or all output only fields) on your format. Format/Control Specs Format/Control Specs The same as you have seen already during layout design. Chapter II, SFD getting started page 51 Chapter II, SFD getting started page 51 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Colors/Attributes Colors/Attributes _________________ You now select 'Global Colors/Attributes'. When asked for a field type, select 'Constant'. This means that you want to change the appearance of all Constants in your format. In your case these are the first three fields. Before starting to do any modification, it is important to describe | the meaning of Normal, Active and Selected fields. | What determines if a field is displayed in Normal or Active status is related to your position to this field, in other words, whether you are 'in it' or not; i.e. it becomes active if you go there. | Selected is mainly utilized for Constants (nevertheless it can be useful with other fieldtypes as well for certain effects, see | Appendix A under 'Advanced Programming Technics'). Selected is a boolean status proprietary to a field. In the case of a Constant field it can be toggled by pressing Return while being in the field. To express the above states, field attributes, seperate for monochrome and color screens, can be choose as required. Field Attributes Field Attributes On monochrome displays, some of the field attributes like 'underline' | and 'Inverted' are exclusive. Since Selected can come together with | both Normal and Active field status, it is your responsibility to make sure that the attributes don't exclude each other. As an | example, if you would specify 'Selected' as being inverted and Active as being underlined the appearance of the appropriate field wouldn't change whether you were in the field or not, it would just being inverted in both cases. This could be very irritatating since you might not be able to recognize what field you were in. In the case of 'Color' attributes the same is true for example if you | choose an 'intensified' color for selected and the 'Intens' attribute | for Active. If you have a monochrome adapter, you can't see the results of any changes made to the 'Color' attributes and vice versa. Nevertheless, you should at least read the appropriate chapters. Then try out some combinations of attributes matching the display adapter you are using. Chapter II, SFD getting started page 52 Chapter II, SFD getting started page 52 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Color Screen Attributes Color Screen Attributes | The Normal and Selected Choices are pretty straightforward. You can select any one out of 16 foreground colors and any one out of 8 background colors for each one of the two. Keep in mind, that if you use 'intensive' forground colors you may | get in conflict with the 'Intens' attribute for Active. | The choices you have for Active are: Invert : The foreground color becomes the background color and vice versa. Intensified background colors are not possible. Therefore the non intensified equivalent is being used if necessary. Blink : Self explanatory. The blink frequency can be adjusted. See under 'System Defaults'. Intens : The foreground color is displayed intensified. Multiple choices of the above attributes are possible. Multiple choices of the above attributes are possible. | Now let us specify a 'new look' for the Constants in our format. The foreground and background colors you see are modified as follows: Select the appropriate field. Choose your favourite from the selection you are presented with. Simple, isn't it? | The Active attributes can be set or reset by pressing the Return key. Once you have made your selection, go back to your format. If you have a Color Monitor you will instantly see the results of your modifications. Chapter II, SFD getting started page 53 Chapter II, SFD getting started page 53 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Monochrome Attributes Monochrome Attributes Norm : 'White' text on black where 'White' means the color of the screen you are using (usually green or amber). Intens : Same as 'Norm' but brighter Text. Obviously, 'Norm' and 'Intens' exclude each other. If 'Intens' is used together with 'Invert' text just appears to be 'thinner'. Invert : Black text on 'White' background. Underline : Field will be underlined. 'Underline' and 'Invert'exclude each other. In this case, 'Invert' takes precedence. Marked : Directly before and after the field a triangle pointing towards the field will be displayed. If | 'Marked' is used as an Active attribute the triangles | will blink, if it is used as a Selected attribute they are static. Blink : The field content will blink. The blink frequency can be adjusted. See under 'System Defaults' for details. Multiple choices of above attributes are possible with the exceptions Multiple choices of above attributes are possible with the exceptions mentioned. mentioned. To set/reset monochrome attributes just travel to the appropriate | fields and press Return. Now make your choices. Once you have finished go back to your format you will instantly see the Results of your modifications (at least if you are working on a monochrome monitor). To get some exercise, feel free to venture using other options as well. Maybe you even want to change some other specifications. Just do it and watch the results. Once you are done with the exercises two ways are offered to exit your format. 1. | Fill it out completely and press Return or 2. Hit the ABORT key. Chapter II, SFD getting started page 54 Chapter II, SFD getting started page 54 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Conclusion Conclusion __________ The purpose of this exercise was to give you a brief overview on the Screen Format Designer. Only a small part of the features was Screen Format Designer touched, but you should now have enough knowledge to continue your exploration on your own, using the descriptions later on in this manual. If you should have encountered any difficulties during our exercise or did not get along with the instructions given, I encourage you to just try it again and I am sure you will succeed this time. Anyway, as long as you are not completely familiar with the system | you are urged to make frequent use of the Help feature. Note: If for some reason you accidentally 'scrambled' your address Note: label format during our exercise, don't worry you will find one among the sample programs which came on your distribution disk. Some of them, (including the address label format) will be used later on to give you an idea about SCL and others will be discussed in the SCL Appendix A of this manual to demonstrate some advanced SCL programming technics. Chapter II, SFD getting started page 55 Chapter II, SFD getting started page 55 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Screen Format Designer The Screen Format Designer ( S F D ) ( S F D ) Functional Description Functional Description OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Functional Description - Introduction Functional Description - Introduction | This chapter of the manual provides a functional description of The The | Screen Format Designer Program. Screen Format Designer The first chapter describes the basic program layout. It includes an overview on all files being used or created by SFD as SFD well as the keyboard functions and a description of the Online Help System. The next chapter covers the main menu and all functions accessible from it. The third chapter then talks about Format Design and all related functions. Chapter II, SFD functional description page 57 Chapter II, SFD functional description page 57 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SFD Basic Program Layout SFD Basic Program Layout SFD has been designed around a Main Menu which automatically comes up SFD as soon as the program has been started. All basic functions are shown and accessible from here. They are logically grouped in seven lines. Within each group the most important item is listed first. | The Up and Down keys can be used to jump between the groups and items | in a group are selected with the Right and Left keys. There are two functions on the main menu which are considerably more complex than all others Format layout design and Test. They are virtually subsystems on their own. | Format layout design for example leads through a whole series of screens and functions. It first starts with the actual layout editor. Within the layout editor, many keys have a different meaning compared to normal operation and there are also a lot of special functions available including it's own little menu offering additional features. Once the | Layout editor is left, the Format Specification Mode is entered presenting another local menu with all selections necessary to specify a format and it's fields. | Leaving the Format Specification Mode then finally leads back to the | Main Menu. | The Format Test function is not that complex but it also allows to | enter the Format Specification Mode, in this case via another local menu. This allows a very interactive method of testing a new format. If initial requirements are not met or require to be redefined, the appropriate changes can be performed and verified instantly in a simple iteration. Chapter II, SFD functional description page 58 Chapter II, SFD functional description page 58 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Files used by SFD Files used by SFD In order to run, SFD requires the following files to be present in SFD the same subdirectory as SFD.EXE itself: SFD.FOR: SFD.FOR: SFD's own format file, containing nearly sixty formats. This file is SFD's not exactly compatible with the '.SCS' files being generated by SFD and no attempt should be made to modify this file using SFD. This SFD SFD could lead to unpredictable results. SFD.FIN: SFD.FIN: Sorted Index file for SFD.FOR. This file is similar to the .SCS files being generated by SFD and contains informations to access the SFD formats in SFD.FOR. SFD.MSG: SFD.MSG: | Contains all field messages proprietary to SFD. It has the same SFD format as the .MSG files created by SFD. SFD SFD.ERR: SFD.ERR: | A Text file containing all necessary system messages, i.e all messages required by SCL (as contained in "SCL.ERR") as well SCL additional ones having been especially defined for SFD. SFD SFD.DEF: SFD.DEF: | This file is automatically created if any of the SFD Defaults (Design or System Defaults) are changed and saved. If it is not present, SFD SFD will use its own built in defaults. If for any reason it is desired to go back to default parameters, just remove this file. Chapter II, SFD functional description page 59 Chapter II, SFD functional description page 59 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Files generated by SFD Files generated by SFD Whenever a new work file is opened with SFD, the following files will SFD be created: .SCS: .SCS: Format file. This file will contain all formats including their specifications with every format occupying about 4.5 KB. The Layout of this file is described in file SCL.DOC as type 'Screen'. For a discussion of it's content refer to "Format Specifications" later in this manual. .SCI: .SCI: Index (Key) file for .SCS. This file contains indexing information to the format file such as all the format names and the relative positions of these formats within .SCS. In addition, it also contains informations whether a format is deleted. The layout of this file can be found in SCL.DOC under 'Sckeyrec'. It has to be sorted in order to access formats in a user program via SCL. | This is automatically done whenever you Exit the SFD program. Since SFD the keyfile is very small, sorting it usually takes only a few seconds. .MSG: .MSG: | Contains all explanatory messages specified for fields on any of the formats in .SCS. The format file itself only stores a pointer to these messages. The file consists of records with a length of 71 bytes each (described in SCL.DOC as 'Msgrec'). This leads to a maximum message length of 70 bytes since the first byte of each record is used to store the length of the message. Note: All of the above mentioned files are required by SCL to handle Note: SCL the formats in your . Details on how they are used can be found later in this manual under "The Screen Control Language". Chapter II, SFD functional description page 60 Chapter II, SFD functional description page 60 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Basic Keyboard Functions Basic Keyboard Functions The following keyboard functions apply for all formats in SFD. In the SFD layout editor some keys have different functions. For details see under "The Layout Editor". | Right : 1. In Travel Mode : Next Field. Right | 2. In Entry Mode : Next Character. | Left : 1. In Travel Mode : Previous Field. Left | 2. In Entry Mode : Previous Character. Down : First field on next line. Down Up : Last field on previous line. Up Home : First field in line. Home End : Last field in line. End PgDn : Last field on format. PgDn PgUp : First field on format. PgUp Tab : Next field. Tab ShiftTab : Previous field. ShiftTab Backspace : Delete character left of cursor. Backspace Insert : Insert a space at the cursor position. Insert Delete : Delete character under cursor. Delete Return : 1. Entry mode. Return 2. Finish field and advance to next field (if already in the last field, finish the format). | 3. Toggle Selected Status of a Constant. Escape : Finish Format. Escape F1 : Format related Help information. F1 F2 : Field related Help information. F2 F3 : UNDO. Restores field to previous content. F3 F10 : Abort current activity (not valid with everyformat). F10 Note: A detailed explanation of all key functions can be found Note: earlier in this manual under "Getting started". Keys only being valid in certain contexts are mentioned where they apply. Chapter II, SFD functional description page 61 Chapter II, SFD functional description page 61 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Online Help Facility Online Help Facility SFD provides an extensive Online Help Facility in up to four levels SFD as follows: Explanatory field input informations: Explanatory field input informations: This feature is only available with some formats, one being the main menu. SFD automatically displays some informations regarding the SFD currently active field (in the case of the main menu, on the bottom line). AutoHelp: AutoHelp: | Optional feature, selectable via System Defaults which causes some basic Help information to be displayed if a specified number of consecutive input errors have been made. Format Help: Format Help: Context sensitive Help relative to the current format. Can be | accessed anytime by pressing F1. Field Help: Field Help: Context sensitive Help informations relative to the currently active | field. This feature can be accessed anytime by pressing F2. Field Help may not be available in all cases. Chapter II, SFD functional description page 62 Chapter II, SFD functional description page 62 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Input Error Handling Input Error Handling If an Input error is detected, the system reacts with a 'Beep' and, depending on the format, an error message may be displayed. If the | Autohelp feature is enabled and a specified number of consecutive errors has occurred, a format containing some basic help informations is displayed in addition. There are basically three different types of errors which can occur: 1. An invalid key has been pressed. 2. Wrong data has been entered into a field. 3. A field where data entry is mandatory has not been filled in. They are described in the following. Invalid Key Invalid Key Whenever a key is pressed it is checked for validity in the given context. Some examples: | * Entering a displayable character while being in a Constant | field. * Pressing an 'Alpha' key where numeric data is anticipated. * Entering a decimal point if an integer number is required. * Pressing a function key not valid on this format. Wrong data Wrong data Whenever an attempt is made to leave a field (i.e pressing RETURN, TAB or a similar key) the data having been entered into it is checked for validity. Should it be found to be invalid, the user is forced to correct it before he is allowed to leave the field. Missing mandatory data Missing mandatory data Any attempt to leave a format missing mandatory data will be refused. The cursor will automatically be placed into the first field where data was found to be missing. Chapter II, SFD functional description page 63 Chapter II, SFD functional description page 63 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Main Menu The Main Menu The main menu is subdivided into an header, the main body finally, below it, the message line. The Menu Header The Menu Header In it's upper part the program name, the release number and a copyright note are displayed. Below this, there are three lines of information: Act DIR Act DIR Displays the currently active disk and subdirectory. Workfile Workfile Displays name and path of the currently loaded workfile (or ''). Formats Formats The number of valid formats in the current workfile. The Main body The Main body It shows seven groups (lines) of items. On the lefthand side of each line the name of a group of functions is mentioned and the entries to the right of it represent the functions available within the appropriate group. All functions are described in the following paragraphs under their group description in the order they appear on the menu. The Message Line The Message Line A short explanation of the currently highlighted function. Chapter II, SFD functional description page 64 Chapter II, SFD functional description page 64 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual DESIGN DESIGN This Group provides all functions necessary to design a format layout, specify it's parameters and finally to test it. Since this group is amongst the most comprehensive parts of SFD it's functions SFD are covered under an own header ("Format Design") later on in this manual. Chapter II, SFD functional description page 65 Chapter II, SFD functional description page 65 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FILE FILE There are three functions belonging to this group. Load File: Load File: Load File can not only be selected via the main menu, it also comes up automatically whenever no workfile is loaded and any other function requiring a workfile has been selected. Allows to load a | formatfile as the active workfile and can also be used to change the active workfile. If this Function is selected SFD will ask for the name of the SFD | workfile to be loaded which will then be searched for in the Active | Directory. | Since a format file is always assumed to have an extension of .SCS it is not required to specify it and any extension entered will be ignored by SFD. SFD | If the format file specified exists in the active directory it is then loaded. Otherwise SFD displays a message prompting whether a new file should SFD be created or not. Note that if another format file was loaded before it is automatically saved to disk. In case the specified format file (.SCS) was found, exceptions loading it are handled as follows: If no Indexfile (.SCI) exists it will be created. If no message file (.MSG) is found, SFD offers the option SFD to create a new (empty) one. Please note that in this case all field messages which might have been specified for any formats in the will be lost and have to be reentered. CHDir: CHDir This option provides essentially the same services as the equivalent DOS command. | With CHDir you can change the currently active drive and/or subdirectory. A file to be loaded or to be copied from will always be assumed to be | in the Active Directory. Note: The active directory and even the current disk drive can be Note: changed anytime during program execution, even while a workfile is loaded. Since SFD always stores the full path of any file having been SFD loaded, the change of the active subdirectory does not affect it. Therefore, a file is always stored back to the subdirectory it was loaded from. Chapter II, SFD functional description page 66 Chapter II, SFD functional description page 66 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Crunch: Crunch: This function physically removes all previously deleted formats from the active workfile. | Once a Crunch has been performed on a workfile it is not any longer | possible to undelete previously deleted formats. A Crunch reduces the size of the format file by the space previously allocated to the deleted formats (about 4.5 KB per format) and also speeds up subsequent format access. | For these reasons it is recommended to perform a Crunch prior to use a format file in a program. Before SFD attempts to crunch a file, it saves the old version of the SFD format file under the name .BAK. This is done in order to provide a backup possibility in case of system errors etc during the actual crunch operation. The index file is not saved since it can easily be rebuild. The following procedure should be applied to recover an old format | file from .BAK whenever it is suspected that an error might | have occurred during Crunch and you are not sure about the integrity of the format file : 1. Save the files .* on a backup disk and store them safely away. On your work disk, perform the following operations: 2. Delete .SCI, the index file. (This index file had been | created to match the crunched version of the format file and is therefore useless at the moment. 3. If present, delete file .SCS (the newly generated, crunched format file, which is suspected to be wrong. 4. Rename .BAK to .SCS. 5. Start SFD and load as your workfile. SFD 6. SFD will automagically create a new index file for it SFD (.SCI). 7. Check the integrity of the format file by looking at the number of formats and/or printing a format list. Once you are satisfied create a backup copy of .* and discard the intermediate backup copy you have made at the beginning of this procedure. 8. You now have backed up to the point before you attempted to | perform the Crunch operation. Chapter II, SFD functional description page 67 Chapter II, SFD functional description page 67 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FORMAT FORMAT This set of functions deal with copying, deleting and undeleting of formats in the workfile. The meaning of the single items is as follows: Copy: Copy: Duplicates a format under a different name within the workfile. This feature is especially handy if several similar formats are required | for one program. Using Copy to duplicate a master version and change it later on can save considerable time over building every single format from scratch. | If Copy is selected you will be asked for the name of the format to be copied (Origin) and the name under which you want it to be copied | (Destination). Destination must be a name not yet existing in your format file. | Copy (together with Delete) can also be used to change the name of a format by first copying it to the new name and afterwards deleting the old one. Delete: Delete: Deletes a format from the active work file. Delete does not actually remove this format from the file, it is just | marked invalid (logically deleted). This has several advantages, probably the biggest one being that it can still be recovered (undeleted). | Please note that undelete is only possible as long as no Crunch has been performed on the work file. Undelete: Undelete: | Undelete restores a format which had been logically deleted before, | in other words, it can reverse a Delete operation. Before attempting | to undelete a format, make sure that no other format exists with the same name. | The names of all formats capable of being undeleted can be seen by | either printing a Format list or via the Display formats command. Transfer: Transfer: To load a format from a different format file. If this function is selected SFD will ask for both the name of the SFD format file and the name of the format to be loaded. In case both can | be found in your Active directory the format is added under the same | name to your active work file. Note that like in all cases where you are asked for a format file, the name of it is expected to have an | extension of .SCS, any other extension you may specify is masked off. Chapter II, SFD functional description page 68 Chapter II, SFD functional description page 68 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual DISPLAY DISPLAY Formats: Formats: The names of all formats in the current work file are displayed. The | logically deleted formats will be included as well, they are marked as being deleted. Files: Files: | Initiates a display of the names of all format files in the active | directory. Directory: Directory: Provides the same functions as the DOS "Dir" command. A file specification according to DOS rules is expected and all files matching this specification will be displayed. Wild card as well as drive/subdirectory specifications follow the same rules as for the DOS "Dir" command. Chapter II, SFD functional description page 69 Chapter II, SFD functional description page 69 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PRINT PRINT Single format: Single format: Prints a hardcopy of the format specified, accompanied by a description of its fields, on the active printer. If the printer is not ready or out of paper, such a status will be reported back to you and you are given the option to either correct the situation or abort the print. Note that in order to work correctly the printer must be capable to print the upper half of the character set according to IBM standard. All formats: All formats: Similar to above, but prints hardcopies of all valid formats in the active work file. Format list: Format list: Prints a listing of the most important details of all formats in the active work file. These are : Format name, size of the format, total number of fields, cursor home | position, the related help format and information whether the format is deleted or not. A summary is also added. It lists the total number of formats in the file as well as the number of valid and deleted formats. Chapter II, SFD functional description page 70 Chapter II, SFD functional description page 70 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual DEFAULTS DEFAULTS The two functions in this group allow to inquire or change of SFD's SFD's program default specifications. If changed, the Option is given to save the new defaults in a disk file (SFD.DEF) to be automatically used again with any subsequent run of SFD until they become altered again. If the option is choosen not SFD to save the new defaults, they will only be valid for the current program run. Design: Design: Left Field Limit: Left Field Limit: The character to be interpreted as the left limit of a field, i.e whenever this character is found, SFD assumes that a field is about SFD to start at the next character position. The default setting of this parameter is '['. Right Field Limit: Right Field Limit: The character indicating the end of a field. The field ends at the character position ipreceeding the Right Field Limit Character. The default is ']'. Note: For detailed informations on how to use the field limit Note: | characters refer to Basic Format Layout Design. later on in this manual. Background Color: Background Color: One among eight colors to be used as background during format layout design. The default is 'Blue'. Foreground Color: Foreground Color: One among sixteen colors to be used as foreground (text) color during format layout design. The default is 'light grey'. Note: The above two color options only apply when a color graphics Note: | adapter is used. On systems using a Monochrome adapter, the Design | Background Color is always "Black" and the foregound color is "White" (i.e the color of your screen). Chapter II, SFD functional description page 71 Chapter II, SFD functional description page 71 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Surrounding Area: Surrounding Area: | Used by the Layout Editor. If a format layout work area is defined to be smaller than a full screen, the surrounding (unused) area is filled with the character specified here. The default setting for this option is Character Ascii (Hex) 'FA' (a dot). Note: For more information on how to enter special characters see Note: Appendix A, 'Tips and Tricks'. Chapter II, SFD functional description page 72 Chapter II, SFD functional description page 72 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual System defaults System defaults The following parameters can be altered: The following parameters can be altered: Auto Help: Auto Help: SFD can be configured to automatically come up with Help information SFD if a certain number of consecutive input errors have occurred. 'Yes' is the default setting and indicates that this feature is | enabled. If 'No' is selected, Auto Help is disabled. After n Errors: After n Errors: | Specifies the number of consecutive errors after which the Auto help screen is to be displayed. Please note, that if consecutive errors are identical they are counted double i.e. the second and all following occurrences are counted twice. The Default is '3'. Beep yes/no: Beep yes/no: Determines whether SFD 'beeps' in case of errors. SFD If 'no' is selected, SFD will stay quiet. SFD The default setting is 'Yes'. Length (ms): Length (ms): Duration of the 'beep' tone in milliseconds. The default is 200. Pitch (Hz): Pitch (Hz): Every 'beep' is made up of several short bursts of two alternating frequencies which can be freely specified. A Sound using a single frequency can be selected by setting both frequencies to the same value. The frequencies must be between 100 and 9999 Hz. The default settings are 200 Hz for the first and 350 Hz for the second frequency. Field Blink Frequency: Field Blink Frequency: SFD allows to select the frequency a field is blinking. This figure SFD is expressed in milliseconds and determines the delay to wait before inverting the field color again. Chapter II, SFD functional description page 73 Chapter II, SFD functional description page 73 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Char YES: Char YES: The Ascii code of the upper case letter indicating 'Yes', i.e. in the case of english '89' ('Y'). Char NO: Char NO: Same as above for 'No', i.e in the case of english '78' ('N'). Note: The above two options are used in the case of 'boolean' Note: fields. These fields only allow either one of above characters to be entered. Lower case characters are automatically translated. Cursor Wraparound Disabled: Cursor Wraparound Disabled: If this option is set to 'Yes' then Cursor Wraparound is disabled for | all formats in SFD. This Option is especially beneficial if a Mouse SFD is utilized to operate SFD. SFD | Provided Cursor Wraparound is not disabled, pressing Right or Down while being in the last field of a format moves the cursor to the | first field. The opposite happens if Left or Up is pressed while being in the first field of a format. Please note, that even if cursor wraparound may not be disabled it is not available with all formats in SFD. SFD Chapter II, SFD functional description page 74 Chapter II, SFD functional description page 74 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual EXIT EXIT Terminate Program: erminate Program: If a workfile was loaded it is automatically sorted before SFD SFD terminates. This is necessary to make the formats within this workfile accessible for SCL routines. SCL Note: SCL cannot be used with unsorted format files. Any attempt to Note: SCL do so will result in a fatal error aborting the appropriate program. Chapter II, SFD functional description page 75 Chapter II, SFD functional description page 75 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Design Format Design _____________ Basic Work Flow Basic Work Flow The basic flow of developping a new format is as follows: The basic flow of developping a new format is as follows: 1. Design of the basic format layout. 2. Specification of all fields. 3. Global specifications. 4. Determination of colors & attributes. 5. Test of the format and necessary changes. Note: This sequence only represents a crude guideline. Note: Except for step 1, SFD does not impose restrictions on the sequence SFD these actions have to be performed. In practice, you will find that some steps can sometimes be omitted completely since SFD's default SFD's settings are often sufficient. On the other hand you may find that some activities have to be performed more than once in order to achieve the desired results. Initially, steps 1 through 4 should always be performed via the main | menu item Layout Design. Beside a few restrictions, steps 2 to 4 can also be carried out using | the Format test facility with the added advantage that results of changes become immediately visible. | However, since changes are much more convenient within the layout | design system it is advisable to perform all major specification work there and use the test facility only to carry out minor corrections found necessary while testing the format. Chapter II, format design page 76 Chapter II, format design page 76 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Layout Editor The Layout Editor The Layout editor is activated by selecting the first item on the | Main Menu, "Layout Design". First, SFD will ask for the name of the SFD format to load. In case this format exists, it is loaded and displayed, otherwise SFD gives you the option to create a new format SFD with the specified name. The Layout editor provides a worksheet to develop or change a format layout as well as to specify size and location of its fields. Formats in the layout editor are displayed in a slightly different | fashion than under Test or if they are used in a SCL application SCL program: * All fields are shown with Left and Right delimiters (Default: '[' and ']'). * The Cursor has the shape of a big block and can be moved freely across the whole format. * If the format is smaller than a full screen (80 X 25) then the area outside the format is filled with the characters specified | for this purpose in Design Defaults. In addition some keys do have other meanings than in normal formats. Note: If the Layout editor has been instructed to create a new Note: format, SFD assumes by default that it's size is 25 lines with 80 SFD characters each (a full screen). This is the reason why the whole screen is initially erased in order to serve as a drawing board. Chapter II, format design page 77 Chapter II, format design page 77 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Layout editor Meaning of keys Layout editor Meaning of keys | Backspace, Insert and Delete have the same meaning as under normal Backspace Insert Delete operation, but they do work on a full line instead of in a field. Home moves the cursor to the upper left corner of your worksheet. Home | End moves the cursor to the first character of the last line. End | PgUp deletes the line under the cursor. PgUp | PgDn inserts a line. PgDn | Return moves the cursor to the first character of the next line. Return | The Arrow keys allow the cursor to move freely on the format. | The Arrows are working in wrap-around mode as follows: The Arrows are working in wrap-around mode as follows: Right with the cursor being in the rightmost position moves it to the first position of the next line. Left with the cursor being in the first position of a line moves it to the last position of the previous line. Right while being in the lower right corner of the worksheet moves the cursor to the upper left corner. Left while being in the upper left corner moves the cursor to the lower right corner of the worksheet. | Pressing Up while being in the first line moves the cursor to the | last line and the opposite happens with Down while in the last line. Note: All Special key functions belonging to the layout editor are Note: discussed later on in this chapter together with the actions they perform. Chapter II, format design page 78 Chapter II, format design page 78 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Drawing Fields Drawing Fields | All desired fields in a format must be determined within the Layout | Design phase. To describe their position and length two special characters are | defined in SFD: The Left Field Delimiter (LD) and the Right Field | Delimiter (RD). The default values are '[' for LD and ']' for RD. These values can be | changed to any other character via Design Defaults. A LD determines the begin of a field. SFD always assumes that a field SFD begins at the character position immediately following an LD. It also assumes that it ends at the position immediately before a RD. A field must always end on the same line it begun, i.e it may not continue on the next line. In order to allow consecutive fields with only one character position between them, it is possible to omit the RD character. In this case, the LD is interpreted as the termination of a field at the position preceeding it and also as the start of a new field at the position succeding it. However you should note that the last field on any line has still to be terminated with an RD character. According to this, all the examples below represent valid field constructions. (The line below the actual delimiters shows the range of each field as described by the delimiters in form of 'x' characters). [ ] [ [ [ ][ ] xxxxxxxx xxxxxxxxx xxxxxxxx xxxxxxxxx xxxxxxxxx Chapter II, format design page 79 Chapter II, format design page 79 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Special Functions Special Functions In order to facilitate the process of developing a format layout, the Layout Editor offers a whole range of special functions. Although very versalite, they can be activated using very few different keys. The ones that are most frequently used are directly accessible via function keys. Some other, less often used functions can be called up via a small menu which itself is accessible with a function key. The appropriate Function keys are as follows: The appropriate Function keys are as follows: F4 : Delete Block F5 : Mark Block Corner F6 : Copy Block F7 : Undraw Box (or line) F8 : Draw Box F9 : Menu Functions The following paragraphs will discuss all special functions in logical sequence. Chapter II, format design page 80 Chapter II, format design page 80 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Mark Corner (F5) Mark Corner (F5) | Many of the layout editors special functions are so called Block | Functions. | Before any of these Block Functions can be performed it is necessary to important to describe the rectangular area (block) they should act | upon. This is done by simply marking its two diagonal corners. A block does not necessarily have to be two-dimensionall it can also | be a line or a column of any desired length. In these cases just mark both ends of it. Pressing F5 sets a mark at the cursor position, shown as a small F5 rhombus. | Incidentally set Marks can simply be removed again by positioning the | cursor on them and pressing F5 again. Notes: Only a maximum of two marks may be set at any time, any Notes: additional attempt is refused. Marks are automatically removed as | soon as the Block Function is performedn Copy Block (F6) Copy Block (F6) | Pressing F6 will duplicate the marked block at the current cursor F6 position (Building it's upper left corner). Please note that for obvious reasons it is not possible to copy a block into itself, in | other words to a cursor position enclosed by the marked Block. If the block to be copied is bigger than the space available at the cursor position, the parts which do not fit are automatically truncated. Delete Block (F4) Delete Block (F4) | F4 erases the marked Block, in other words, moves spaces to it. This F4 function can also be used to erase the whole worksheet by marking its two corners. Chapter II, format design page 81 Chapter II, format design page 81 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Draw Box (F8) Draw Box (F8) | Pressing F8 causes a box to be drawn with the two marks representing F8 its diagonal corners. The linestyles used for both horizontal and vertical lines can be | selected via the local menu (for further details refer to "Local Menu Functions"). When using single or double lines graphic characters the proper connections to other boxes will be done automagically. Beside for drawing boxes, this function can also be used to draw lines by positioning the two marks in either the same column (vertical line) or the same row (horizontal line). Undraw box (F7) Undraw box (F7) Erases the marked box, i.e replaces it by space characters. The same | rules apply as for the Draw Box Function. Chapter II, format design page 82 Chapter II, format design page 82 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Menu Functions Menu Functions The menu can be accessed by pressing F9. It offers the following F9 functions: Change Format size Change Format size This function allows to change the size of the currently loaded format layout. Valid sizes can be anything from 1 to 25 lines with 1 to 80 characters each. Boxes Linestyles Boxes Linestyles This function facilitates the selection of the linestyles to be used | with the Box drawing feature. Possible linestyles are displayed in two groups, one for horizontal and one for vertical lines. Each of them can be determined independently. Each group contains the following: 1. Double Line Block Graphics characters. 2. Single Line Block Graphics characters. 3. White half Blocks. 4 to 6: Full Blocks in different shades. 7. Any other character, see Text below. For the first two Options (Single and Double line block graphic characters), SFD is even capable to connect boxes using the SFD appropriate 'X' and 'T' elements available in the Character set. The last Option is used to choose any other displayable character. If selected, another format comes up showing an extract of 32 characters at a time out of the complete system characterset. The | Left and Right keys can then be used to point to the desired character or to select another set of 32 Characters to choose fromn | Once the desired character is found just press Return to pick it. Using this feature boxes and/or lines made up for example of smiling faces or $-signs can easily be created. Chapter II, format design page 83 Chapter II, format design page 83 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Key Redefinition Key Redefinition This function allows to assign any desired keyboard key to any displayable character. It becomes very handy if certain Characters are required in a format which can not normally be accessed with a keyboard key. The selection of the appropriate character to be displayed works in a | similar fashion as the one above described for User selectable | linestyles. Up to six keyboard keys can be redefined at the same time. Note: There exists also another possibility to display characters Note: normally not accessible via the keyboard which is described in Appendix A under 'Tips and Tricks'. Chapter II, format design page 84 Chapter II, format design page 84 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Specifications Format Specifications All format specification parameters are stored in the actual format file (.SCS). | Once a new format has been designed and the Layout Editor is exited, all these parameters will be set to default values, i.e every field is assumed to be a variable, there is no input check to be performed, the color of the format is white on a black background and so on. These specifications can then be tailored to your own requirements. When an existing format is modified, SFD where format specifications SFD | can be changed. The main one is directly after the layout Editor has been exited and the other one, which is slightly limited in some | aspects is accessible via a local menu during Format Test. Two main groups of specifications exist: Field Specifications Field Specifications The specifications defining a single field on a format. Global Specifications Global Specifications All specifications proprietary to the whole format. Not only are the format specifications directly accessible and alterable but it is also possible to copy field specifications from another field or to change colors and attributes of a whole group of fields such as all variables or all constants on a format. | Note: Some parameters cannot be modified during Format Test, where Note: this is the case, it is mentioned in the following. The discussion of the format specifications is subdivided under three headings: * Field Specifications * Colors and Attributes * Global Specifications and Control Parameters Chapter II, format design page 85 Chapter II, format design page 85 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Field Specifications Field Specifications Type Type Defines the field type. This parameter cannot be modified during | Format Test. The possible choices are: Variable: A normal data entry field.This is the default. Variable | Constant: A selectable item (for example in a menu). Constant Output : Output A field not accessible by the cursor (for example a message line). Group from/to Group from/to | Important for Constants. All Constants within one group are exclusive, i.e. only one field within a group can be selected at any one time. Enter the numbers of the first and the last field of the group. The default is the current field for both values. These parameters have no meaning for fields other than constants. If the field specifications for the first field of a group are modified, they are automatically copied to all other fields of that group. The only parameters not being copied are: 'Selected' and 'Messages. | This parameter can not be modified during Test. Message Message A message can be specified for each field on a format. It is stored | in file .MSG and automatically displayed in the Message field (see under 'Global Specifications'). There are also some other possibilities to use this message, see Appendix A under 'Advanced Programming Technics'. The default is no message. Helpscreen Helpscreen | The name of the format to display if the Field help Key, usually 'F2' is pressed. The default is no helpscreen. Fill Fill Variables only. The character to replace all spaces with if the field | is active. The default is . Chapter II, format design page 86 Chapter II, format design page 86 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Delimiter Left Delimiter Left | The character to display at the position where the Left field | delimiter was put during Layout Design, i.e the character position preceeding the field. The default is . Delimiter Right Delimiter Right | The character to display at the position where the Right field | delimiter was put during Layout Design, i.e the position immediately after the field. The default is . Justify Justify Determines how text within the field is to be justified. The possible choices are 'Left', 'Right' and 'Center'. The default is 'Left'. Decimals Decimals Numeric variables onlyn Determines how many positions are to be displayed after the decimal point. The default is 0 (zero). Mandatory Mandatory Determines whether input is mandatory to this field. In case of | constants it determines whether a selection within the Group has to be made. The default is 'No'. Selected Selected Determines the initial status of the boolean attribute 'Selected'. It usually applies to constants but it can also be used for some special effects like highlighting etc. See Appendix A under 'Advanced Programming Technics' for details. The default status is 'No'. Note that this attribute cannot be copied to other fields. Char Check Char Check If this parameter is set to 'Yes', each single keystroke can be externally checked, i.e SCL hands over control to your application SCL after each keystroke before actually acting on it. For details on the use of this parameter see the description of the SCL procedure SCL 'Handle_Format' later on in this manual. Additional hints can be found in Appendix A (Sample Programs, especially Sample 4). The default for this parameter is 'No'. Chapter II, format design page 87 Chapter II, format design page 87 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Input Check Input Check Variables only. Determines the kind of data to be accepted as valid input in this field. The possibilities are as follows: None: No input check is performed. Any data may be entered in None this field. This is the default. Integer: Only integer numbers may be entered. Any other input is Integer refused. The numeric value entered must be within the limits of 'Min' to 'Max' (see below). The maximum possible range is -32768 to +32767. Fields where entries outside this range are required must be declared as 'Real' (see below). Real: Any number with or without a decimal point can be entered. Real It's value must be in the range of 'Min' to 'Max' (see below). It is not possible to enter numbers in scientific notation. Alpha: Only alpha characters are allowed in this field. Other Alpha input is refused. | Y,y,N,n: Only the characters defined as Boolean_Yes and Y,y,N,n | Boolean_No (both lower and upper case) may be entered in this field. For Details see the explanation of these two SCL routine SCL upon the initialisation of the program. This feature makes it possible to define optimum formats without any compromises. Chapter II, format design page 88 Chapter II, format design page 88 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Monochrome Attributes Monochrome Attributes Normal: The way the field should appear if it is neither 'active' nor Normal 'selectedg. The possible choices are white characters on a black background (Norm) or white intensified characters on a black background (Intens). The default is 'Norm'. Selected: The way the field should look if it is 'Selected' (see Selected above). The possible choices are: Invert : Black text on white background. Underl : Text underlined. Intens : Intensified textn Marked : Two triangles are displayed to the left and the right of the field. Combinations of above attributes are possible with the following exceptions: Invert and Underline are exclusive. Invert and Intensified result in Invert only. Active: The way the field should be highlighted if the cursor is in Active it. Possible choices are: Invert : The field is inverted. Underl : Underlined text. Intens : Intensified text. Marked : Two blinking triangles are displayed to the left and the right of the field. Blink : The field blinks. Combinations of the above attributes are possible with the same | exceptions as the ones mentioned for the Selected attributes. Since | the Active attributes are just 'added' if the field becomes active (for example, a constant can be both 'selected' and 'activeg at the same time) careful consideration should be given the question what combination of attributes should be used. If for example the same attributes are choosen for both 'active' and 'selected' it may not be possible to see, in which field the cursor is (in the case of 'marked', there is a differentiation because the triangles blink if the field is active). In addition, restrictions apply to the combined use of 'Invert' together with 'Underline' or 'Intens'. The result is always 'Invert' only. Chapter II, format design page 89 Chapter II, format design page 89 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Color Attributes Color Attributes The Color Attributes are less complicated to use than the monochrome ones. For both 'Normal' and 'Selected' there is a choice of one out of eight background colors and one out of sixteen foreground (text) colors. All available colors are listed in Appendix B. As far as the 'Active' attribute is concerned there are three different options. Invert: The field colors are inverted, i.e background becomes Invert: foreground and vice versa. Since intensified background is not possible, these colors are replaced by their non intensified (i.e. darker) counterpart. Blink : The field is made blinking. Blink : Intens: The text is displayed intensified. Intens: The combination of the above options is possible but it should be considered that the 'Intens' attribute is only meaningful if the foreground colors choosen for 'Normal' and 'Selected' are non intensified ones, otherwise it won't be visible. Chapter II, format design page 90 Chapter II, format design page 90 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Global Specifications Global Specifications & Control Parameters & Control Parameters Global Specifications Global Specifications Cursor Home: Cursor Home: System generated and not changeable. The first cursor accessible (non Output) field on the format. Input Message Field: Input Message Field: The field where all Input Messages are to be displayed (Input Messages are the messages specified for single fields, see under 'Field Specifications' for details). If this Parameter is set to 0 (zero) no input messages are displayed. Note that for obvious reasons, the field specified for input messages should be an 'Output' field, i.e. not be accessible by the cursor. The default for this parameter is 0. Error Message Field: Error Message Field: The field where all (system as well as user generated) error messages | are displayed. Everything said above for the Input Message Field applies here as well. If this field is set to 0 (zero) no error messages are displayed. There are no restrictions to use the same field for both error and input messages. The default is 0 (zero) i.e no error messages are displayed. Help Format: Help Format: | The name of the format to be displayed if the Format Help Key (usually 'F1') is pressed. The default is no help format. Color Foreground: Color Foreground: One out of sixteen colors in which the text on the format (except for the fields) is to be displayed. This option is only meaningful in the case of Color screens. On monochrome screens, the foreground color is always white, non intensified. Color Background: Color Background: One out of colors in which the format background (except for the fields) is to be displayed. For monochrome screens, the format background is always black. Chapter II, format design page 91 Chapter II, format design page 91 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Cursor Wraparound: Cursor Wraparound: | If Cursor Wraparound is disabled, pressing Right or Down while the | cursor is in the last field or Left or Up while the cursor is in the first field causes a beep. Otherwise, the cursor would be advanced to the first or last field, respectively. Note: Alternatively, Cursor Wraparound can also be disabled on a Note: global basis, i.e effective for all formats in a program by setting the SCL Constant 'No_Wrap' to TRUE. Refer to the SCL part of this SCL SCL manual for more details. Format Abort Ok Format Abort Ok | If this option is set to 'Yes', pressing the F10 key causes the | format to be unconditionally terminated, otherwise the Abort function is disabled for this format. Chapter II, format design page 92 Chapter II, format design page 92 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual User Function Keys User Function Keys The User Function Key specifications control SCL's user interrupt SCL's system. This facility allows to invoke user written routines upon certain occasions while the format is being handled by SCL routines. SCL Details and examples on how to use them can be found in both the SCL SCL part of this manual and in Appendix A. In principle they work as follows: When a specified condition occurs, the SCL procedure SCL 'Handle_format' notifies an external procedure and gives it the choice to do whatever it is intended for (like a special input check for example). This external procedure can also return a result indicating an error or a exception to cause 'Handle_format' to proceed in the desired way. By default, i.e. without the need to be explicitly specified, SCL SCL allows you to invoke external procedures whenever a new field is entered with the cursor, when it is being left and when the format is due to be exited. Beside what is mentioned above it is possible to specify optional | User Function Keys for any format. User Function keys can be any of the ten actual Function keys (F1 to F10) and additionally to this up to ten other keyboard keys. F1 through F10: F1 through F10: If selected, causes 'Handle_format' to transfer control whenever the corresponding function key has been pressed. There are numerous uses for these Interrupts like the initiation of program functions or to temporarily disable SCL functions like 'Help' etc. SCL Remaining fields: Remaining fields: Up to ten different keyboard keys can be defined per format which, when pressed, cause 'Handle_format' to transfer control. 'Keyboard keys' in this context can also be combinations like 'CNTRL-LEFT' etc. | To define a key as a User Function move the cursor to one of the | fields containing the text '' and press Return. Then press | the key or key combination you want to specify. To delete a User | function Key specification, just position the cursor on it and hit | Return. | Chapter II, format design page 93 Chapter II, format design page 93 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Test Feature The Test Feature Introduction Introduction SFD allows new formats to be tested without having to write a user SFD | program. With very few limitations, formats under Test react exactly as they later on will in a user program. This even includes input checks etc. While a format is being tested, it is possible to modify most of it's specifications and instantly observe the results of these changes, thus allowing for a very interactive way of developing formats. The local Menu The local Menu | All functions to modify Format Specifications during Test are available through a local menu which can be called up by pressing key 'F9'. It offers the following choices: Change Field Specifications/Active Field Change Field Specifications/Active Field Allows to change the specifications of the field the cursor is currently in. Change Field Specification/Other Field Change Field Specification/Other Field This Option is mainly intended but not limited to allow to change 'Output' fields. If choosen, SFD will ask for the number of the field SFD whose specifications are to be changed. Change Global Colors/Attributes Change Global Colors/Attributes Allows to change Colors or attributes of all fields of a type to be | specified (Variable, Constant or Output) on the format under Test in one go. Change Format/Control Specifications Change Format/Control Specifications Allows to change the Global Specifications as well as the Interrupt Parameters. Chapter II, format design page 94 Chapter II, format design page 94 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual System Limitations System Limitations The SFD Format Test Feature has a few limitations. These are: SFD Speed Speed Since rather than reading from memory as it normally would be done by SCL much information has to be read from disk, thus slowing down the SCL | operation of a format under Test quite considerably. Help Formats Help Formats It is not possible to access the Help formats specified for the | format under Test via F1 and F2. They have to be tested seperately. | F1 and F2 display SFD's own help information relative to Test SFD's operations. Format Specifications Format Specifications | Some specifications can not be altered during Test. These include: Field Type, Group from/to and Input and error message fields. In order to change these specifications the format has to be loaded into | the Layout Editor and the changes have to be performed there. Chapter II, format design page 95 Chapter II, format design page 95 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual This Page is intentionally left blank Chapter II, format design page 96 Chapter II, format design page 96 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Chapter III Chapter III OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual This Page is intentionally left blank Chapter III, Screen Control Language page 98 Chapter III, Screen Control Language page 98 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Screen Control Language Screen Control Language ( S C L ) ( S C L ) Chapter III, Screen Control Language page 99 Chapter III, Screen Control Language page 99 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction Introduction ____________ The Screen Control Language The Screen Control Language SCL is accommodated in several TURBO PASCAL Source Library files SCL which must be 'included' in your application programs in order to access the constructs they contain. The following is a functional description of all relevant constructs | contained in these Include Files. For more details on SCL, including explanations and samples available SCL in Appendix A. Chapter III, Screen Control Language page 100 Chapter III, Screen Control Language page 100 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Files SCL Files The following is a brief description of all SCL files. SCL SCL.TPU : SCL.TPU : Contains all SCL definitions and routines. All elements of SCL can be SCL accessed from your Turbo Pascal 4 program by specifying SCL in the USES statement. Example: Example USES CRT,SCL,PRINTER; SCL.ERR : SCL.ERR : This is a basic Error Message File for your programs and contains all SCL internal error messages. Its use is explained later in this manual. Chapter III, Screen Control Language page 101 Chapter III, Screen Control Language page 101 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL - Global Declarations SCL - Global Declarations General General | Many of SCL's Global Constants are actually declared as typed Global Constants | constants. This was done to allow their alteration during program runtime. | Despite all their advantages, Typed Constants in TURBO PASCAL also have one slight disadvantage: Since they are are only initialized once, i.e at the time the program is loaded into memory, irritating effects can occur if an application program is compiled to memory and afterwards run from there more than once. For this reason it is recommended to compile programs using SCL to a SCL '.EXE' file on disk in order to test them. | The following chapters describe most of the Global Declarations | forming part of SCL, starting with the Global Constants and | Variables and followed by those Type declarations which could be of use outside SCL as well. SCL Chapter III, Screen Control Language page 102 Chapter III, Screen Control Language page 102 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Control Parameters SCL Control Parameters The following parameters define the maximum size of files etc. Their default settings are layed out in such a way that they should be sufficient in most cases. They can cater for up to: 100 Error Messages. 400 Field (explanatory) Messages. 20 Formats displayed simultaneously. Looking at these figures you can see that only some special, usually very large applications may require parameter changes. Max_Error_Messages Max_Error_Messages Declaration: CONST Max_Error_Messages = 100; Explanation: The highest allowed user message number. This constant must be set to a value equal to or greater than the number of records in file .ERR. The default setting allows for about 60 additional user messages, since approximately 40 records are already occupied with system error messages. Max_Input_Messages Max_Input_Messages Declaration: CONST Max_Input_Messages = 400; Explanation: | Contains the maximum number of Field Messages. This constant must be set to a value equal to or greater than the number of records in file .MSG which can be calculated as follows: (Size of file .MSG (in bytes) divided by 71) + 1. Remark: In order to allow for later changes to your formats it is recommended to increase the minimum number calculated as above by at least 50 %. Max_Heap_Screens Max_Heap_Screens Declaration: CONST Max_Heap_Screens = 20; Explanation: The maximum number of formats which can be 'stacked' one on top of the other on the display. Chapter III, Screen Control Language page 103 Chapter III, Screen Control Language page 103 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual File Names File Names The following constants define what file name extensions SCL expects. SCL While it is recommended to leave them at their default settings (i.e compatible with SFD), it is still possible to change them if required. In this case the files created by SFD must be renamed before they can be used with the appropriate application. In any case, make sure that you don't use extensions which do have special meanings in your system like '.BAK' (backup file) or '.PAS' (Pascal source file). Screenfile_Ext Screenfile_Ext Declaration: CONST Screenfile_Ext = '.scs'; Explanation: File name extension used for the format file. Change if a different extension is desired. Indexfile_Ext Indexfile_Ext Declaration: CONST Indexfile_Ext = '.sci'; Explanation: File name extension to be used for the format index file. Change if a different extension is to be used. Errorfile_Ext Errorfile_Ext Declaration: CONST Errorfile_Ext = '.err'; Explanation: File name extension to be used for the file containing the system and user error messages. Change if a different extension is to be used. Messagefile_Ext Messagefile_Ext Declaration: CONST Messagefile_Ext = '.msg'; Explanation: File name extension to be used for the file containing the field messages. Change if a different extension is to be used. Chapter III, Screen Control Language page 104 Chapter III, Screen Control Language page 104 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Help System Parameters Help System Parameters Autohelp_Screen Autohelp_Screen Declaration: CONST Autohelp_Screen = 'autohelp'; Explanation: | The name of the format to be used for the Autohelp feature. Change if another format is to be used. Maxerrors Maxerrors Declaration: CONST Maxerrors : INTEGER = 3; Explanation: If 'Autohelp_Set' is true, this value determines the number of | consecutive errors before the Autohelp format is displayed. Auto_Help_Set Auto_Help_Set Declaration: CONST Auto_Help_Set : BOOLEAN = TRUE; Explanation: | If this parameter is TRUE , the Auto_Help feature is enabled, i.e the | format specified as Autohelp_Screen is displayed automatically | whenever Maxerror consecutive input errors have been made. If it is | set to FALSE, the Auto_Help feature is disabled. Code_Help_Field Code_Help_Field Declaration: CONST Code_Help_Field : INTEGER = 1060; Explanation: | The key used to display the Help Format declared for the currently active field. Code_Help_Format Code_Help_Format Declaration: CONST Code_Help_Format : INTEGER = 1059; Explanation: | The key used to display the Help Format declared for the currently active format. Note: For information on how keyboard keys are coded see under Note: | Keyboard Key Specifications. Chapter III, Screen Control Language page 105 Chapter III, Screen Control Language page 105 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Beep Parameters Beep Parameters The following parameters allow to change pitch and duration of the | Beep, i.e. the sound SCL uses in order to attract the users attention SCL because of input errors etc. Beep_Off Beep_Off Declaration: CONST Beep_Off : BOOLEAN = FALSE; Explanation: If set to TRUE SCL will not 'beep' in case of errors. SCL Beep_Time Beep_Time Declaration: CONST Beep_Time : INTEGER = 3; Explanation: Duration of the 'beep' in clock ticks (55 ms). Beep_Frequency_1 Beep_Frequency_1 Declaration: CONST Beep_Frequency_1 : INTEGER = 200; Explanation: First frequency used for the 'beep' sound in hertz. The 'beep' consists out of two alternating frequencies. Beep_Frequency_2 Beep_Frequency_2 Declaration: CONST Beep_Frequency_2 : INTEGER = 350; Explanation: Second frequency used for the 'beep' sound in hertz. The 'beep' consists out of two alternating frequencies. Chapter III, Screen Control Language page 106 Chapter III, Screen Control Language page 106 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Message Display Message Display The following two parameters can be used to allow different, user selectable 'Help' levels. Input_Msg_Set Input_Msg_Set Declaration: CONST Input_Msg_Set : BOOLEAN = TRUE; Explanation: | If set to FALSE, no Field Messages will be displayed. Can be used to suppress explanatory messages with experienced users. Error_Msg_Set Error_Msg_Set Declaration: CONST Error_Msg_Set : BOOLEAN = TRUE; Explanation: If set to FALSE, no messages will be displayed in case of input | errors. SCL will however still 'beep' as long as Beep_Off is FALSE. SCL Chapter III, Screen Control Language page 107 Chapter III, Screen Control Language page 107 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Field Attributes Field Attributes The following specifications define the blink frequency for constants (see 'Blink' field attribute) as well as what characters are used for the 'Marked' field attribute. Blink_Count Blink_Count Declaration: CONST Blink_Count : INTEGER = 0; This count is incremented each clock tick. A clock tick occurs about 18.2 times per second (every 55 ms). Blink_count can be interogated by user routines. Timer_Intervall Timer_Intervall Declaration: CONST Timer_Intervall : INTEGER = 4; Explanation: Used as a delay for the field blinking procedure. Determines the delay after which the fieldcolor is inverted again. Decrease for faster and increase for slower blinking. Mark_Field_Left Mark_Field_Left Declaration: CONST Mark_Field_Left : Byte = 16; Explanation: | The ASCII code of the character used as the Mark on the left side of the field (see 'Marked' field attribute). Mark_Field_Right Mark_Field_Right Declaration: CONST Mark_Field_Right : Byte = 17; Explanation: | The ASCII code of the character used as the Mark on the right side of the field (see 'Marked' field attribute). Chapter III, Screen Control Language page 108 Chapter III, Screen Control Language page 108 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Key Specifications Key Specifications The values of all keyboard keys associated with functions are defined as constants in order to be able to adapt programs to non standard keyboards. Their values are calculated as follows: 1. Use the decimal ASCII code of the key to perform the appropriate function. 2. | Add 1000 in case this key creates an extended code, i.e one preceeded by an 'ESC' character. Code_Cancel_Act Code_Cancel_Act Declaration: CONST Code_Cancel_Act : INTEGER = 1061; Explanation: The key used to cancel a change to a 'variable' and to restore the original content of it (Default:F3). Modify in case you want some key to perform this action. Code_Abort Code_Abort Declaration: CONST Code_Abort : INTEGER = 1068; Explanation: The the key to unconditionally terminate the current format in case the 'Abort Ok' attribute is set to 'Yes' in its Global specifications. Code_Escape Code_Escape Declaration: CONST Code_Escape : INTEGER = 27; Explanation: The key to terminate a format. Chapter III, Screen Control Language page 109 Chapter III, Screen Control Language page 109 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Performing 'Edit' functions Performing 'Edit' functions CONST Code_Home : INTEGER = 1071; CONST Code_Tab : INTEGER = 9; CONST Code_Ctrltab : INTEGER = 1116; CONST Code_Rtab : INTEGER = 1015; CONST Code_Return : INTEGER = 13; CONST Code_Left : INTEGER = 1075; CONST Code_Right : INTEGER = 1077; CONST Code_Down : INTEGER = 1080; CONST Code_Up : INTEGER = 1072; CONST Code_End : INTEGER = 1079; CONST Code_Ins : INTEGER = 1082; CONST Code_Del : INTEGER = 1083; CONST Code_Backspace : INTEGER = 8; CONST Code_Pgup : INTEGER = 1073; CONST Code_Pgdown : INTEGER = 1081; Function Keys Function Keys | The following are the codes of the keys associated with the Function | Key Interrupts (see 'Global Format Specifications'). Change as required for non standard keyboard layouts. CONST Code_F1 : INTEGER = 1059; CONST Code_F2 : INTEGER = 1060; CONST Code_F3 : INTEGER = 1061; CONST Code_F4 : INTEGER = 1062; CONST Code_F5 : INTEGER = 1063; CONST Code_F6 : INTEGER = 1064; CONST Code_F7 : INTEGER = 1065; CONST Code_F8 : INTEGER = 1066; CONST Code_F9 : INTEGER = 1067; CONST Code_F10 : INTEGER = 1068; Chapter III, Screen Control Language page 110 Chapter III, Screen Control Language page 110 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Nationalisation Parameters Nationalisation Parameters The following declarations determine the message to be displayed in case of a fatal program abort initiated by SCL. Change for other languages as required. CONST Fatal_Msg_1 = 'FATAL SCL ERROR: '; CONST Fatal_Msg_2 = 'ERROR NR: '; CONST Fatal_Msg_3 = 'PROGRAM ABORTED.'; | The following two parameters define the valid input for Boolean | Variables. Change according to the language used. Code_Yes Code_Yes Declaration: CONST Code_Yes : INTEGER = 89; Explanation: The first letter of the word meaning 'Yes' in upper case (Y). Used | for Boolean Fields. Change for other languages. Code_No Code_No Declaration: CONST Code_No : INTEGER = 78; Explanation: The first letter of the word meaning 'No' in upper case (N). Used for | Boolean Fields .Change for other languages. Character sets for Variables Character sets for Variables The following constants define the characters permitted to be entered into the various types of Variable fields. Change as required for national character sets. CONST Anything_Set : SET OF Byte = [1..6,8,14..27,32..255]; CONST Integer_Set : SET OF Byte = [32,43,45,48..57]; CONST Real_Set : SET OF Byte = [32,43,45,46,48..57]; CONST Alpha_Set : SET OF Byte = [32,65..90,97..122,128..167]; Chapter III, Screen Control Language page 111 Chapter III, Screen Control Language page 111 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Country Information Parameters Country Information Parameters SCL_Country SCL_Country Declaration: CONST Scl_Country : INTEGER = 0; Explanation: The country information to be used for SCL. If this parameter is set to 0 (zero) SCL uses the country specified in the computers CONFIG.SYS file. If another countries informations are to be used set this constant to the appropriate value. (Example : 49 for germany). The country codes available are described in your DOS manual under the COUNTRY command. SCL interrogates the Country informations during initialization and sets up the following variables accordingly: Country Country Declaration: VAR Country : INTEGER; Explanation: Contains the country code of the country currently being used by SCL. SCL This is either the Country code specified in CONFIG.SYS or if 'SCL_Country' (see above) is set to a value other than 0 (zero) it is set equal to this. Date_Format Date_Format Declaration: VAR Date_Format : INTEGER; Explanation: Determines the date format being assumed by SCL's date formatting and check routines. 0 means MMDD and 1 means DDMM format. Date_Separator Date_Separator Declaration: VAR Date_Separator : CHAR; Explanation: The character to be used as a separator between days, months and year by SCL's date formatting routines. Chapter III, Screen Control Language page 112 Chapter III, Screen Control Language page 112 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Time_Separator Time_Separator Declaration: VAR Time_Separator : CHAR; Explanation: The character to be used as a separator between hours and minutes by SCL's time formatting routines. Currency Currency Declaration: VAR Currency : String10; Explanation: Contains the name or symbol of the currency of the country being assumed by SCL (see above). Note: Since SCL's own date and time formatting routines are using Note: the above informations, they automatically adapt to different countries and don't therefore have to be nationalized manually. The same principle should be applied to user written application programs wherever possible. Chapter III, Screen Control Language page 113 Chapter III, Screen Control Language page 113 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Control Parameters SCL Control Parameters Progpath Progpath Declaration: VAR Progpath : String80; Explanation: Progpath holds the complete path description (including Drive) of the subdirectory which was active when SCL was initialized, i.e at the time, the procedure 'Select_Format_File' was called. SCL remembers this subdirectory because it expects to find its files there, even if the active subdirectory was changed during program execution. This variable is quite useful to find other, non SCL files if they reside in the same directory as the program itself. Example: Example: Assumed a program using SCL is started from directory '\Appl\Mydir' on drive C. If SCL has been initialized then 'Progpath' contains the following information: 'C:\Appl\Mydir\'. The statement 'Assign(myfile,Progpath + Example.Fil)' now will assign the following file name to 'Myfile': c:\Appl\Mydir\Example.Fil Note: The information contained in 'Progpath' must not be changed. Note: No_Wrap No_Wrap Declaration: CONST No_Wrap : BOOLEAN = FALSE; Explanation: | If No_Wrap is set to false, the cursor wraparound feature is controlled individually for each format by its global attribute 'Wraparound Ok'. | In case No_Wrap is set to TRUE, this will override the appropriate specifications and cursor wraparound will therefore be disabled for all formats. This Option has been provided to adapt SCL written applications SCL easily to 'Mouse' operation. | If a program is operated with a keyboard Cursor Wraparound can be very helpful, especially on large formats. On the other hand , if a | 'Mouse' is being used, Cursor Wraparound can be very confusing. | No_Wrap allows to choose the optimum in both cases. Chapter III, Screen Control Language page 114 Chapter III, Screen Control Language page 114 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Pointers Format Pointers S_Ptr S_Ptr Declaration: VAR S_Ptr : INTEGER; Explanation: S_Ptr controls the format stack and always points to its top, i.e to the currently active format. If a format is loaded to the Heap by | Select_Format, S_Ptr is incremented and once the format is finished | it is decremented by Format_Done. | If S_Ptr is 0 (zero) after Format_Done has decremented it this means that all formats have been finished and the screen is therefore cleared. Other values indicate that there are still one or more formats on the | stack which have not yet been finished. The one S_Ptr is now pointing to is therefore restored and its handling can continue where it was interrupted before. Note: For more details on the above matter refer to 'SCL Procedures Note: and functions' later in this manual. R_Ptr R_Ptr Declaration: VAR R_Ptr : INTEGER; Explanation: | R_Ptr is a Variable mainly used by the routines R_Cont, G_Cont, R_Sel | and G_Sel. It points to the format to be read from. R_Ptr is adjusted equal to | S_Ptr by the routine Handle_Format. This means, R_Ptr will still point to a format, even if this format is not any longer active. For a detailed description of this mechanism refer to the description of the above mentioned procedures. Chapter III, Screen Control Language page 115 Chapter III, Screen Control Language page 115 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual W_Ptr W_Ptr Declaration: VAR W_Ptr : INTEGER; Explanation: | W_Ptr is mainly used by the routines W_Cont, C_Cont and W_Sel. It points to the format currently being written to W_Ptr is normally | equal to S_Ptr. This means that Format fields can be written into as | soon as the format has been loaded by Select_Format and as long as it | has not been finished by Format_Done. For a detailed description of this mechanism see Appendix A. Chapter III, Screen Control Language page 116 Chapter III, Screen Control Language page 116 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Handling Parameters Format Handling Parameters | Many of the following parameters are intended to be used in User | Interrupt Procedures during format handling. Detailed descriptions and examples of user interrupt handling procedures can be found in Appendix A. Active_Field Active_Field Declaration: VAR Active_Field : INTEGER; Explanation: Active_Field always points to the field being processed by | Handle_Format. If a format has no fields, 'Active_Field' is equal to 0 (zero). This Variable can be interrogated by user procedures, typically | during User Interrupt handling. Char_Code Char_Code Declaration: VAR Char_Code : INTEGER; Explanation: Char_Code contains the input character last fetched from the keybuffer by Handle_Format. Handle_Format User interrupt procedures can interrogate or modify 'Char_Code'. If, for example in case of a User Function Key Interrupt the statement User Function Key Interrupt 'Char_Code:=Code_Noop' is executed, Handle_Format then ignores this key. Glb_Error Glb_Error Declaration: VAR Glb_Error : INTEGER; Explanation: This Variable is used by external procedures normally invoked by User User Interrupts to return an error description to 'Handle_Format'. Interrupts In case the external procedure returns a value other than 0 'Handle_Format' initiates an error routine using the error message to which 'Glb_Err' points. Chapter III, Screen Control Language page 117 Chapter III, Screen Control Language page 117 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Handling Parameters Format Handling Parameters The following variables are intended to be interrogated by user written SCL interrupt handling procedures to determine the type of interrupt having occurred. They are all controlled by the procedure Handle_Format. Handle_Format Refer to Appendix A for more details on how to use them. User_Function User_Function Declaration: VAR User_Function : BOOLEAN; Explanation: This variable is TRUE whenever either a User Function Key was User Function Key depressed or any other key was hit during input to a field with the 'CharInt' parameter set to TRUE. For details on the above mentioned parameters refer to 'Format Specifications' in the SFD part of this manual. SFD Begin_Of_Field Begin_Of_Field Declaration: VAR Begin_Of_Field : BOOLEAN; Explanation: This variable is TRUE whenever a new field is due to be entered. End_Of_Field End_Of_Field Declaration: VAR End_Of_Field : BOOLEAN; Explanation: This variable is TRUE whenever a field is due to be left and after all SCL internal checks specified for the appropriate field have been successfully completed. Chapter III, Screen Control Language page 118 Chapter III, Screen Control Language page 118 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual End_Of_Format End_Of_Format Declaration: VAR End_Of_Format : BOOLEAN; Explanation: This variable is TRUE whenever a format is due to be left and after all SCL internal checks have been successfully completed. Please notice that the Abort feature bypasses this interrupt. Abort Checkrequired Checkrequired Declaration: VAR Checkrequired : Boolean; Explanation: At the time of a End_Of_Field interrupt, 'checkrequired' is true if End_Of_Field the field has been changed and false if it hasn't. 'Checkrequired' should be interrogated by an external field input check procedure to find out whether a check has to be done or not. For further information see Appendix A under 'User Interrupt Procedures'. Chapter III, Screen Control Language page 119 Chapter III, Screen Control Language page 119 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Screen related Parameters Screen related Parameters The following variables can be interrogated by user programs but should always be left unchanged. Screen_Mode Screen_Mode Declaration: VAR Screen_Mode : Byte; Explanation: Screen_Mode holds information about what display adapter the computer is currently working with and what mode it is in. Since SCL only works in 80 column text mode, the possible values of Screen_Mode and Screen_Mode their meaning are: 2 : CG Adapter; 80 Columns Text ; No Color. 3 : CG Adapter; 80 Columns Text ; With Color. 7 : Monochrome (or Hercules) Adapter; 80 Columns Text. Mono_Adapter Mono_Adapter Declaration: VAR Mono_Adapter : BOOLEAN; Explanation: Mono_Adapter is true whenever the computer is using the Monochrome Adapter. The status of 'Mono_Adapter' decides to which display memory address SCL writes. Color_True Color_True Declaration: VAR Color_True : BOOLEAN; Explanation: Color_True is set if Screen_Mode is equal to 3. Screen_Mode The status of Color_True determines which set of field attributes is to be used. Chapter III, Screen Control Language page 120 Chapter III, Screen Control Language page 120 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format related Parameters Format related Parameters Xoff Xoff Declaration: VAR Xoff : INTEGER; Explanation: Xoff holds the horizontal offset of the currently active format. If for example Xoff is equal to 5, then the upper left corner of the currently active format starts at column 6 on the screen. Yoff Yoff Declaration: VAR Yoff : INTEGER; Explanation: Yoff holds the vertical offset of the currently active format. If for example Yoff is equal to 3, then the upper left corner of the currently active format starts at row 4. Chapter III, Screen Control Language page 121 Chapter III, Screen Control Language page 121 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Background Processing Parameters Background Processing Parameters LP_Background_Pointer LP_Background_Pointer Declaration: VAR LP_Background_Pointer : POINTER; Explanation: This Variable is a pointer to the procedure to be invoked by SCL as the low priority background task. Example: Example The following statement would cause SCL to perform Myproc as background task: LP_Background_Pointer:=@Myproc; HP_Background_Pointer HP_Background_Pointer Declaration: VAR HP_Background_Pointer : POINTER; Explanation: This Variable is a pointer to the procedure to be invoked by SCL as the high priority background task. Example: The following statement would cause SCL to perform Myproc as high priority background task: HP_Background_Pointer:=@Myproc; Note: SCLs background tasking feature is explained in detail in Note: Appendix A. Chapter III, Screen Control Language page 122 Chapter III, Screen Control Language page 122 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Miscellaneous Parameters Miscellaneous Parameters Glb_Status Glb_Status Declaration: VAR Glb_Status : INTEGER; Explanation: This Variable is a status count controlling the procedure 'Handle_Format' and carries Information about the present status of the format handling process. There is normally no need to interrogate Glb_Status itself, since SCL provides a comprehensive set of Boolean Glb_Status SCL variables for this purpose. Please refer to 'Format Handling Parameters' for details. Glb_Status should not be changed by user routines. Glb_Ok Glb_Ok Declaration: VAR Glb_Ok : BOOLEAN; Explanation: Glb_Ok is set to FALSE by some SCL procedures and functions to flag errors during their execution. It can be interrogated by user programs to make sure that these procedures did not encounter problems during their execution. Details of the conditions under which Glb_Ok is set to FALSE can be found in the descriptions of the appropriate procedures and functions. Format_Aborted Format_Aborted Declaration: VAR Format_Aborted : BOOLEAN; Explanation: A boolean variable which is set to TRUE by the procedure Handle_Format to indicate to succeding procedures that a format has Handle_Format been terminated via the Abort key and that they should therefore Abort key ignore the data having been entered so far into this format (and which is likely to be incomplete, anyway). Chapter III, Screen Control Language page 123 Chapter III, Screen Control Language page 123 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Global Type Declarations Global Type Declarations The following SCL TYPE declarations are not limited to SCL, they are TYPE of rather universal use in a TURBO PASCAL program and can be used in other parts of the application program as well. More type declarations inluding the declarations for the SCL files can be found SCL in the file SCL.DOC. TYPE String128: STRING[128]; TYPE String80 : STRING[80]; TYPE String70 : STRING[70]; TYPE String40 : STRING[40]; TYPE String20 : STRING[20]; TYPE String13 : STRING[13]; TYPE String10 : STRING[10]; Chapter III, Screen Control Language page 124 Chapter III, Screen Control Language page 124 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Procedures and Functions Procedures and Functions Introduction Introduction The following chapters describe all SCL procedures and functions intended to be accessed by user programs in logical sequence. While the routines described here actually only represent a small fraction of the total number of the SCL routines being available, they will enable you to perform all necessary operations. If you are an experienced SCL programmer, you may come along a occasion where you want to access a low level routine directly for some reason. While nothing is actually preventing you from doing so, you should take extreme care not to interfere with SCL. In addition, be aware that most of these low level routines are, usually for performance reasons, not protected against invalid parameters and may therefore cause runtime errors if you pass such data to them. As a general rule, don't use any undocumented SCL routines unless you As a general rule, don't use any undocumented SCL routines unless you really know exactly what you are doing. really know exactly what you are doing. Note: In Appendix B you can find a complete alphabethic list of all Note: SCL routines together with brief comments on their purpose and restrictions. Chapter III, Screen Control Language page 125 Chapter III, Screen Control Language page 125 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Entering and leaving SCL Entering and leaving SCL PROCEDURE Select_Format_File(Filename:String10); PROCEDURE Select_Format_File(Filename:String10); This procedure should be the first SCL routine performed in a program. It first checks the present screen mode to ensure that it is one of the 80 character text modes. Then it opens the screenfile indicated by 'Filename' (.SCS) as well as the Index file (.SCI) belonging to it. The index file is checked in order to ensure that it is sorted. Then the field message file (.MSG and, if available, the error message file (.ERR) are loaded into the Heap. Finally some SCL variables are initialized and the screen is cleared. If errors are encountered during this process, SCL halts the program and displays a message indicating the reason for the abort. Note: The parameter 'Filename' must be specified without extension. Note: It is recommended to set the screen mode to the desired value using the Turbo Pascal Construct 'TextMode' before SCL is initialized since SCL aborts the program if the mode is wrong. PROCEDURE Close_Formats; PROCEDURE Close_Formats; This procedure is the last SCL routine to be performed in a program. It frees all space previously occupied by SCL in the Heap, closes the Heap screen files, clears the screen and finally restores the cursor to its normal shape. On the next page you find an example of the basic skeleton of a program using SCL routines. Chapter III, Screen Control Language page 126 Chapter III, Screen Control Language page 126 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Structure of a SCL Program Structure of a SCL Program PROGRAM EXAMPLE; USES SCL; {make SCL accessible} {User declarations, procedures and functions } BEGIN; {of main body of program example} Select_Format_File('exforms'); {This is the first SCL statement in any program. It loads the necessary files and initializes SCL.} {main program} Close_Formats; {Last SCL statement in any program. It closes all SCL files and clears the screen} END; {of main body of program example} Chapter III, Screen Control Language page 127 Chapter III, Screen Control Language page 127 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Loading and displaying formats Loading and displaying formats PROCEDURE Select_Format(Fname:String10); PROCEDURE Select_Format(Fname:String10); Select_Format is the first procedure to be called in order to display and handle a format. It reads the description of the format indicated by 'Fname' from the format file and loads it into memory. If another format is currently being processed and not yet finished, its status is saved in the stack for later recovery once 'Fname' has been finished. Since 'Select_Format' modifies the 'W_Ptr' to point to the new format, its fields can now be 'prefilled' if necessary. PROCEDURE Display_Format(Xoffset,Yoffset:INTEGER); PROCEDURE Display_Format(Xoffset,Yoffset:INTEGER); Once a format has been 'selected' using procedure 'Select_Format' it is displayed on the screen with 'Display_Format'. In addition to display the format, all its fields are initialized according to their specifications and the cursor is placed into the first accessible field (Cursor Home). If there is no field on the format, the cursor is made invisible. Display_Format requires two parameters: Xoffset and Yoffset. They define where on the screen the upper left corner of the new format is to be positioned. Both values are zero based, since they specify offsets counted from the upper left corner of the screen rather than absolute positions. Therefore if for example Xoffset is specified as Xoffset '10' and Yoffset as '0' the format will be displayed with it's upper left corner at Row 1 (the first row), Column 11. Example: Example PROCEDURE Bring_Up_Myformat; BEGIN; Select_Format('Myformat'); {Loads 'Myformat' into Memory} Display_Format(0,0); {displays it starting at the upper left} END; {corner of the screen} Chapter III, Screen Control Language page 128 Chapter III, Screen Control Language page 128 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Note: It is user responsibility to ensure that the space specified Note: by Xoffset and Yoffset is large enough to hold the format to be Xoffset Yoffset displayed. If the space specified is found to be to small, a 'Fatal Error' halting the program will result. Therefore it is recommended to preferably use the functions 'X_Max' and 'Y_Max' wherever possible to specify offsets. For details see overleaf. Chapter III, Screen Control Language page 129 Chapter III, Screen Control Language page 129 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual X_Max and Y_Max X_Max and Y_Max FUNCTION X_Max:INTEGER; FUNCTION X_Max:INTEGER; Returns a value equal to 80 the width of the currently selected format. This function is intended to be used together with the 'Display_Format' Procedure. FUNCTION Y_Max:INTEGER; FUNCTION Y_Max:INTEGER; Returns a value equal to 25 the height of the currently selected format. This function is intended to be used together with the 'Display_Format' Procedure. Examples: Examples Display_Format(X_Max,1); Display_Format(X_Max,1); Displays the format in the upper right corner of the screen. Display_Format(X_Max div 2,Y_Max); Display_Format(X_Max div 2,Y_Max); Displays the format on the bottom of the screen and horizontally centered. Display_Format(1,Y_Max); Display_Format(1,Y_Max); Displays the format in the lower left corner of the screen. Display_Format(X_Max div 2,Y_Max div 2); Display_Format(X_Max div 2,Y_Max div 2); Displays the format centered on the screen. Display_Format(X_Max-3,Y_Max -2); Display_Format(X_Max-3,Y_Max -2); Displays the format wit it's lower right corner positioned on line 23, column 77. Chapter III, Screen Control Language page 130 Chapter III, Screen Control Language page 130 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Handling format input Handling format input PROCEDURE Handle_Format; PROCEDURE Handle_Format; This routine can be seen as the kernel of the SCL System. It's basic purpose is to obtain keyboard input and act upon it. Besides this, it also manages a variety of other important functions such as: * Cursor control. * Input checks according to field specifications and display of error messages. * Display of Help screens and explanatory messages. * Formatting and display of field input. * Control of field attributes according to specifications. * User interrupt recognition and handling. * Invoking of background tasks. Note: 'Handle_Format' is always called in form of a REPEAT....UNTIL Note: REPEAT....UNTIL loop. An example is given at the end of the description of 'Format_Done' on the next page. FUNCTION Format_Done:BOOLEAN; FUNCTION Format_Done:BOOLEAN; This Function is used together with the procedure 'Handle_Format' described above in a REPEAT....UNTIL Loop. REPEAT....UNTIL It checks whether the format currently being handled is finished and, if this is the case, it then terminates it. This means: It also sets the color of the first and last line as well as the first and last column of the format to Backgroundcolor if it was Backgroundcolor highlighted before (see 'Display_Format'). It then it checks for the presence of another format waiting on the stack to be reactivated (one which had not been finished before) and, if this is the case, restores the parts of the screen which had been overwritten. Then all pointers are adjusted to this format and its handling is carried out from where it was interrupted before. If there was no format waiting on the stack to be reactivated, the screen is then cleared. Note: The complete principle of SCL's format stacking is described Note: in Appendix A (Sample 3). Chapter III, Screen Control Language page 131 Chapter III, Screen Control Language page 131 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example: Example REPEAT HANDLE_FORMAT; {Here optional User Interrupt handling statements could be inserted} UNTIL FORMAT_DONE; The above represents the basic construct of any SCL format input handling procedure. The REPEAT....UNTIL loop will be left as soon as the (boolean) REPEAT....UNTIL function 'Format_Done' detects that the format had been finished (In this case, 'Format_Done' returns TRUE). Whenever a User Specified Interrupt (see under 'Format User Specified Interrupt Specifications' in the SFD part of this manual) comes up, the SFD procedure 'Handle_Format' is exited and the user is given the chance to take over control via appropriate statements within the REPEAT....UNTIL loop as indicated in the above example. Since REPEAT....UNTIL 'Format_Done' always returns FALSE as long as the format is not finished, 'Handle_Format' will be reentered once the user specified procedures have been performed. Note that due to this construction the specification of user interrupt handling procedures is optional; even if interrupts have actually been specified for the appropriate format. Chapter III, Screen Control Language page 132 Chapter III, Screen Control Language page 132 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Format Handling Control Format Handling Control PROCEDURE Blank_Format; PROCEDURE Blank_Format; This procedure causes the space the currently handled format occupies on the screen to be cleared (filled with spaces). PROCEDURE Goto_Field(Fieldnr:INTEGER): PROCEDURE Goto_Field(Fieldnr:INTEGER): This Procedure can be used during in a User Interrupt Procedure User Interrupt Procedure (End_of_Field) to jump to another field on the format. It is your responsibility to make sure that the field number to jump to is valid and not declared as Output Only. Output Only PROCEDURE Finish_Format(Check:BOOLEAN); PROCEDURE Finish_Format(Check:BOOLEAN); This procedure is used to terminate the currently displayed format while it is being processed by 'Handle_Format', usually depending on a condition being checked within a User Interrupt Procedure. It User Interrupt Procedure causes 'Handle_Format' to react in exactly the same way as if an appropriate keyboard key would have been pressed. Terminate_Format requires a boolean argument which decides in what way the format is to be finished. If 'Check' is FALSE, it will be terminated unconditionally in a similar way as if the 'ABORT' key would have been pressed. If 'Check' is true, 'Handle_Format' will react as if 'ESCape' would have been pressed. This means, before actually terminating the format it is checked whether all mandatory fields are filled in and the termination is refused if this should not be the case. Notes: Terminating a format unconditionally with the above procedure Notes: works even in case Abort_OK is set to FALSE for this format. Please Abort_OK remark also, that Format_Aborted is not set to TRUE. Format_Aborted Detailed examples of how to handle formats including User Interrupt User Interrupt Procedures can be found in Appendix A under 'SCL Programming Procedures examples'. Chapter III, Screen Control Language page 133 Chapter III, Screen Control Language page 133 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Reading/Writting Format Fields Reading/Writting Format Fields Introduction Introduction In order to read and write both the (boolean) status of the 'selected' attribute as well as the actual content of format fields several SCL routines are provided. The following routines serve to access the field content: The following routines serve to access the field content: R_Cont: R_Cont: 'Read field content'. A procedure to read the content of a field into a string variable. G_Cont: G_Cont: 'Get field content'. Similar to above, but in form of a function. W_Cont: W_Cont: 'Write field content'. A procedure to write the content of a string variable to a field. C_Cont: C_Cont: 'Clear field content'. A procedure to clear a field i.e to fill it's content with spaces). | The following routines serve to access the Selecte attribute of The following routines serve to access the Selecte attribute of format fields: format fields: R_Sel: R_Sel: 'Read field selected status'. A procedure to read the status of the 'selected' attribute into a boolean variable. G_Sel: G_Sel: 'Get field selected status'.Similar to 'R_Sel' but in form of a boolean function. W_Sel: W_Sel: 'Write field selected status'. Sets the status of the 'selected' attribute to the desired value. Note: A detailed description of these routines can be found on the Note: following pages. Chapter III, Screen Control Language page 134 Chapter III, Screen Control Language page 134 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Reading Field Content Reading Field Content PROCEDURE R_Cont(Fieldnr:INTEGER; VAR Contents:String80); PROCEDURE R_Cont(Fieldnr:INTEGER; VAR Contents:String80); This procedure acts on the format pointed to by 'R_Ptr'. It reads out the content of field 'Fieldnr' and puts it left justified into 'Contents'. Note that the content of the field is always returned in form of a string, even in the case of numeric variables. In case the value in 'Fieldnr' does not represent a valid field or 'R_Ptr' does not point to a valid format an empty string (length = 0) is returned and 'Glb_Ok' is set to FALSE. Example: R_Cont(2,Mystring); Example: R_Cont(2,Mystring); The content of the second field of the format pointed to by 'R_Ptr' is returned in 'Mystring'. Note: R_Ptr normally either points to the format in process or to Note: the one that was last processed by 'Handle_Format'. Therefore, as long as 'Handle_Format' has not been performed on a new format, the last one is still accessible, even after it is 'finished' (in this case however only as long as no new format has been loaded with 'Select_Format'). If no format has been processed yet or if the format last having been processed was overwritten by a new one (it was finished and 'Select_Format' has been called) 'R_Ptr' contains 0 (Zero) and any attempt to read a field now would result in in a 'Fatal SCL Error' halting the program. For detailed information on the above refer to Appendix A. FUNCTION G_Cont(Fn:INTEGER):String80; FUNCTION G_Cont(Fn:INTEGER):String80; This Function calls the procedure 'R_Cont'. Therefore the statement Mystring:=G_Cont(2) is equivalent to R_Cont(2,Mystring). The use of 'G_Cont' instead of 'R_Cont' often leads to more elegant constructs and better readable programs. It can also save in many cases the declaration of local variables. The two (functionally identical) examples on the next page may illustrate this. Chapter III, Screen Control Language page 135 Chapter III, Screen Control Language page 135 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Examples for R_Cont and G_Cont Examples for R_Cont and G_Cont Example 1 (using R_Cont): Example 1 (using R_Cont): PROCEDURE Read_Format; VAR Wrkstr:String80; {TYPE String80 is defined as STRING[80]} BEGIN; R_Cont(1,Surname); {Read the content of field 1 to 'Surname'} R_Cont(2,Forename); {Field 2 to 'Forename'} R_Cont(3,Wrkstr); {Field 3 to 'Wrkstr'} City:=Capital(Wrkstr); {Change 'Wrkstr' to upper case and} END; {store it in 'City'.} Example 2 (using G_Cont): Example 2 (using G_Cont): PROCEDURE Read_Format; BEGIN; Surname :=G_Cont(1); {Read the content of field 1 into 'Surname'} Forename:=G_Cont(2); {Field 2 to 'Forename'} City:=Capital(G_Cont(3)); {Field converted to uppercase and END; {stored in 'City'.} Chapter III, Screen Control Language page 136 Chapter III, Screen Control Language page 136 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Writing Field Content Writing Field Content PROCEDURE W_Cont(Fieldnr:INTEGER;Cont:String80); PROCEDURE W_Cont(Fieldnr:INTEGER;Cont:String80); This procedure works on the format pointed to by 'W_Ptr'. It writes the string 'Cont' to the field indicated by 'Fieldnr'. If 'Fieldnr' doesn't point to a valid field no action is performed and 'Glb_Ok' is set to FALSE. If 'Cont' does not completely fit into the field it is cut off at the appropriate length and 'Glb_Ok' is set to false as well. Note that since W_Cont expects a string value, numeric information has to be W_Cont converted first. In case the format being written to is currently displayed, the appropriate field content is changed on the screen as well. Example: Example: PROCEDURE Prefill; VAR Wrkstr : String80; A_String : String80; {Info to be written to field 1} A_Real_Number : REAL; {Info to be written to field 2} A_Integer_Number : INTEGER; {Info to be written to field 3} BEGIN; A_String :='This is a string'; {Initialize} A_Real_Number :=1.234; {our silly } A_Integer_Number:=67; {examples } W_Cont(1,A_String); {Writes 'A_String' to field 1} STR(A_Real_Number,Wrkstr); {Converts it to a string...} W_Cont(2,Wrkstr); {...and writes it to field 2} W_Cont(3,St(A_Integer_Number); {uses the SCL Function 'St'..} END; {..to convert it to a string and writes it to field 3.} {Note:'St' can only be used to convert 'INTEGER values} Note: W_Ptr is initially set by the procedure 'Select_Format' and Note: keeps on pointing to this format until it is finished. Detailed information on 'W_Ptr' can be found in Appendix A. Chapter III, Screen Control Language page 137 Chapter III, Screen Control Language page 137 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Deleting Field Content Deleting Field Content PROCEDURE C_Cont(Fieldnr:INTEGER); PROCEDURE C_Cont(Fieldnr:INTEGER); This procedure 'clears' the field indicated by 'Fieldnr'. It is equivalent to: W_Cont(Fieldnr,' '). Everything having been said under W_Cont(Fieldnr,' ') 'W_Cont' applies to 'C_Cont' as well. Example: Example: C_Cont(1); {Clears field 1, i.e. writes spaces to it.} Chapter III, Screen Control Language page 138 Chapter III, Screen Control Language page 138 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Reading the 'Selected' Attribute Reading the 'Selected' Attribute PROCEDURE R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN); PROCEDURE R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN); This procedure acts on the format pointed to by R_Ptr. This procedure returns in 'Sel' the status of the Selected attribute Selected of the field identified by 'Fieldnr'. In case the value in 'Fieldnr' does not represent a valid field or 'R_Ptr' is not pointing to a valid format 'Glb_Ok' is set to FALSE. For further information on 'R_Ptr' refer to the description of 'R_Cont'. Example: Example: R_Sel(2,Status); R_Sel(2,Status); After performing this operation, 'Status' will be TRUE if the second field of the format pointed to by 'R_Ptr'is Selected. Selected FUNCTION G_Sel(Fn:INTEGER):BOOLEAN; FUNCTION G_Sel(Fn:INTEGER):BOOLEAN; This function calls the procedure R_Sel. Therefore the construct Status:=G_Sel(2) is equivalent to R_Sel(2,Status). In many cases, the use of 'G_Sel' in favour of 'R_Sel' can not only save the declaration of local variables but also allow more elegant constructs. The following two (functionally identical) examples illustrate this. Example 1 (using R_Sel): Example 1 (using R_Sel): R_Sel(1,Mrs); R_Sel(2,Miss); Female:= Mrs or Miss; Example 2 (using G_Sel): Example 2 (using G_Sel): Female:=Gsel(1) or gsel(2); Chapter III, Screen Control Language page 139 Chapter III, Screen Control Language page 139 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Writing the 'Selected' Attribute Writing the 'Selected' Attribute PROCEDURE W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN); PROCEDURE W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN); This procedure works on the format pointed to by 'W_Ptr'. It sets the 'Selected' attribute of the field indicated by 'Fieldnr' to the boolean value of 'Sel'. If 'Fieldnr' doesn't point to a valid field no action is performed and 'Glb_Ok' is set to FALSE. In case the format being written to is currently displayed, the appropriate field is changed to reflect the status of the 'selected' attribute on the screen as well. Example: Example: W_Sel(5,TRUE); {Marks Field 5 to be 'selected'} Note: W_Ptr is initially set by the procedure 'Select_Format' and Note: keeps on pointing to this format until it is finished. For detailed information on 'W_Ptr' refer to Appendix A. Chapter III, Screen Control Language page 140 Chapter III, Screen Control Language page 140 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual String Handling routines String Handling routines FUNCTION Capital(Wrkstr: String): String; FUNCTION Capital(Wrkstr: String): String; This function returns the input string converted to uppercase letters. Example: Example: Mystring:=Capital(Mystring); If Mystring was ' aBc' it becomes ' ABC'. FUNCTION Stripleft(Wrkstr: String): String; FUNCTION Stripleft(Wrkstr: String): String; Returns the input string with all leading spaces stripped off. Example: Example: Mystring:=Stripleft(Mystring); If Mystring was ' ABC ' it becomes 'ABC '. FUNCTION Stripright(Wrkstr: String): String; FUNCTION Stripright(Wrkstr: String): String; Returns the input string with all trailing spaces stripped off. Example: Example: Mystring:=Stripright(Mystring); If Mystring was ' ABC ' it becomes ' ABC'. Chapter III, Screen Control Language page 141 Chapter III, Screen Control Language page 141 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE Strip(VAR Wrkstr:String;VAR Len:INTEGER); PROCEDURE Strip(VAR Wrkstr:String;VAR Len:INTEGER); Removes all leading and trailing spaces from Wrkstr and returns it's resulting length in len. Example: Example: Mystring:=' ABC '; Strip(Mystring,Stlen); After performing the above statements, Mystring equals 'ABC' and Stlen equals 3. FUNCTION Charstring(Whatchar:CHAR;Len:INTEGER):String; FUNCTION Charstring(Whatchar:CHAR;Len:INTEGER):String; Returns a string of length = Len, completely filled with Whatchar. Example: Example: Mystring:=Charstring('A',5); Mystring now contains 'AAAAA'. PROCEDURE Frontstring(Str:String; VAR Head,Tail:String); PROCEDURE Frontstring(Str:String; VAR Head,Tail:String); Returns the first word of 'Str' in 'Head' and the remainder in 'Tail'. In both cases, leading blanks are stripped off. Word separators can be one or more blanks. If 'Str' only contains one word, 'Tail' is returned with a length of 0 (zero). Example: Example: Var S1, S2 :String; Begin; Frontstring('This_is.a-Frontstring 'This_is the tail ',S1,S2); End; S1 now contains 'This_is.a-Frontstring' and S2 contains 'This_is the tail '. Please notice that trailing spaces in the tail are not removed. Please notice that trailing spaces in the tail are not removed. Chapter III, Screen Control Language page 142 Chapter III, Screen Control Language page 142 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FUNCTION Justify_Left(STR:String;Len:INTEGER):String; FUNCTION Justify_Left(STR:String;Len:INTEGER):String; Returns the input string justified left in a field of length Len. The remaining part of the field is filled up with spaces. If the input string was, after the leading and trailing spaces were removed, still longer than len, it is cut off at len. In this case, Glb_Ok is set to false. Example 1 : Example 1 : Mystring:=' abc '; Mystring:=Justify_Left(Mystring,5); After execution, Mystring is equal to 'abc '. Example 2 : Example 2 : Mystring:=' abc '; Mystring:=Justify_Left(Mystring,2); In this example, Mystring would be returned as 'ab' and Glb_Ok would be false. FUNCTION Justify_Right(STR:String;Len:INTEGER):String; FUNCTION Justify_Right(STR:String;Len:INTEGER):String; Returns the input string justified left in a field of length Len. with the part before the text being filled up with spaces. If the input string without leading and trailing spaces is longer than len, it is cut off at len. In this case, Glb_Ok is set to false. Example 1: Example 1: Mystring:=' abc '; Mystring:=Justify_Right(Mystring,5); This example returns Mystring = ' abc'. Example 2: Example 2: Mystring:=' abc '; Mystring:=Justify_Right(Mystring,2); Mystring would now be equal to 'ab' and Glb_Ok would be false. Chapter III, Screen Control Language page 143 Chapter III, Screen Control Language page 143 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FUNCTION Justify_Center(STR:String;Len:INTEGER):String; FUNCTION Justify_Center(STR:String;Len:INTEGER):String; Returns the input string centered in a field of length Len. If the input string without leading and trailing spaces is longer than Len, it is cut off at Len. In this case, Glb_Ok is set to false. Examples : Examples : Mystring:=' abc '; 1. Mystring:=Justify_Center(Mystring,5); This example returns Mystring = ' abc '. 2. Mystring:=Justify_Center(Mystring,1); The value returned is 'a' and Glb_Ok is false. Chapter III, Screen Control Language page 144 Chapter III, Screen Control Language page 144 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual System Functions System Functions FUNCTION Environment(Name:String128):String128; FUNCTION Environment(Name:String128):String128; This function returns the content of the specified line out of the DOS Environment. For Details on the DOS Environment and how it can be DOS Environment used refer to the description of the 'Set' command in your DOS manual. Example: Example: Var Mystr:String; BEGIN; Mystr:=Environment('COMSPEC'); END; Mystring contains now the complete path and name of your systems primary command processor, for example 'C:/COMMAND.COM'. PROCEDURE Execute(VAR Progstring:String80); VAR Result:INTEGER); PROCEDURE Execute(VAR Progstring:String80); VAR Result:INTEGER); This Procedure executes the program specified by 'Progstring'. Once this program has finished execution, control is returned to the calling program (your application). Since Execute does not read the settings of 'Path' or 'Environment', Execute 'Progstring' must contain, beside the actual program name, the complete path description if the program to be executed is not in the Active directory. In addition, 'Progstring' can optionally contain Active directory one or more parameters. The program name extension (i.e '.EXE' or '.COM' is optional. If no extension is specified, Execute will first Execute look for a '.COM' and then, in case it is not found for a '.EXE' file. The result of the operation are returned in DOSERROR and DOSEXTCODE (see your Turbo Pascal Manual). Example: Example: Execute('C:\Myprog firstparam secondparam thirdparam'); {Fires up 'Myprog' with three parameters. Once 'Myprog' has finished, control is passed back to your application. Note that no extension for 'Myprog' has been specified in the above example. If 'Execute' does not find an extension, it first tries '.COM' and if such a file cannot be found, it then tries '.EXE'} Note: See also the 'ExecuteDos' command. Note: Chapter III, Screen Control Language page 145 Chapter III, Screen Control Language page 145 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE ExecuteDos(Command:String128); PROCEDURE ExecuteDos(Command:String128); This procedure fires up the DOS command processor (usually COMMAND.COM) and passes the string contained in 'Command' to it. The command processor the acts upon this string in the same way as if it had been entered on the normal DOS prompt. Once the command has been executed, the command processor terminates and control is passed back to your application. The results of the operation are returned in DOSERROR and DOSEXITCODE (see turbo Pascal 4.0 Manual). If 'Command' is an empty string (i.e a string with a length of 0) or if it only contains blanks, the DOS Command processor is fired up and remains active for input until it is terminated with the DOS Command Exit (refer to your DOS Manual for details). Then control is passed Exit back to your program. Note: In addition to actual DOS commands there are also some other Note: programs which require COMMAND.COM to be running in order to execute properly. This applies particularly to many external commands (for example CHKDSK.COM) but also to all kind of batch file processing. Such tasks must therefore be started up using 'ExecuteDos' rather than 'Execute'. An important restriction for both 'Execute' and 'ExecuteDos' is the fact that they only work if the application program has been compiled to disk. In addition you must make sure that enough memory has been left over for the programs to be executed. In order to achieve this you must limit the Maximum free dynamic memory value (the 'A' Maximum free dynamic memory selection on TURBO PASCALS 'Option' menu) to an appropriate value prior to compiling your program. The value to choose cannot be exactly determined, it very much depends on your program. Crude guidelines can be found in Appendix A. Examples: Examples: ExecuteDos('Dir a:*.*') ExecuteDos('Dir a:*.*') {Loads the command processor and passes 'Dir a:*.*' to it. Once the 'Dir' command has been performed, the command processor terminates and control is passed back to your program.} ExecuteDos(''); ExecuteDos(''); {Invokes DOS including the familiar prompt. You can now enter any commands you want. 'Exit' returns you to your program. Note: For further examples of the above constructs refer to Appendix Note: A. Chapter III, Screen Control Language page 146 Chapter III, Screen Control Language page 146 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Date related routines Date related routines Most of the following routines apply the specifications being contained in the DOS Country Information for date formatting. This DOS Country Information offers the tremendous advantage that the appropriate routines in your program never have to be changed, independant of the country the program is used in. For more details on this matter please refer to the Appendix A. FUNCTION Date:String10; FUNCTION Date:String10; Returns the system date in form of a string. Both its format, i.e MMDDYY or DDMMYY, and the delimiters being used are obtained and automatically set according to the Country Information SCL has been Country Information SCL told to use. By default, SCL assumes the country specified in the SCL file 'CONFIG.SYS'. There are several possibilities to influence or override this selection within SCL, for details refer to Appendix A. SCL Assuming the Country is UK (Country = 44) 'Date' returns a string of the form 'DD-MM-YY', in the case of Germany (Country = 49) it would be 'DD.MM.YY' and for USA (Country = 1) the format would be 'MM-DD- YY'. FUNCTION Date_String(Y,M,D:WORD):String10; FUNCTION Date_String(Y,M,D:WORD):String10; This function returns the date passed to it as integers (Y,M and D) in form of a string. Everything having been said above for the function 'Date' applies to 'Date_String' as well. Date_String accepts the year in both 2 and 4 digit format. Chapter III, Screen Control Language page 147 Chapter III, Screen Control Language page 147 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE Check_Date(VAR Date_Str:String10; VAR Y,M,D:WORD); PROCEDURE Check_Date(VAR Date_Str:String10; VAR Y,M,D:WORD); 'Check_Date' converts 'Date_Str' into three integers values Y,M and D. 'Date_Str' must contain a valid date in the format DD-MM-YY or MM-DD-YY, depending on the Country Information being used (see Country Information above). The separators can be any non numerical characters. Leading zeroes can be omitted. The year can be entered either in full (as for example '1987') or as a 2 digit number (as '87'). The date in 'Date_Str' is checked for validity and, if it is found to be invalid, 'Glb_Ok' is set to false. FUNCTION Weekday(Y,M,D:WORD):INTEGER; FUNCTION Weekday(Y,M,D:WORD):INTEGER; 'Weekday' calculates the day of the week for the date passed to it in Y,M and D. The day of the week is returned in form of an Integer number. The meanings are: 0=Sunday, 1=Monday and so on. Please notice that if the year is passed to this function as a 2 digit value 1900 is added to it. Therefore this routine cannot be used for years below 100 A.D. FUNCTION Julian_Date(VAR Y,M,D:WORD):REAL; FUNCTION Julian_Date(VAR Y,M,D:WORD):REAL; This function returns the date passed to it in Y,M,D in form of a number of days since 1.Jan 00 A.D. The value passed back is in form of a REAL number. Julian_Date can be ideally used to calculate the number of days between two dates. If 'Y' contains a value less than 100, 1900 is added to it. Therefore this routine can not be used for any year below 100 A.D. PROCEDURE Normal_Date(VAR Julian:REAL;VAR Y,M,D:WORD); PROCEDURE Normal_Date(VAR Julian:REAL;VAR Y,M,D:WORD); Normal_Date is the counterpart of 'Julian_Date' above, i.e it converts a Julian date passed to it into three Integer Values Year, Month and Day. Note: For examples on how to use the above routines please refer to Note: Appendix A. Chapter III, Screen Control Language page 148 Chapter III, Screen Control Language page 148 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Time related Routines Time related Routines FUNCTION Time(Seconds:BOOLEAN):String10; FUNCTION Time(Seconds:BOOLEAN):String10; 'Time' returns the system time (24 hour based) in form of a string. If 'Seconds' is TRUE, this string has the format HH:MM:SS, otherwise it is HH:MM. The separators being used (in the above example ':') depends on the Country Information and can therefore be different Country Information depending on the country. Refer to Appendix A for details. FUNCTION Time_String(H,M,S:WORD):String10; FUNCTION Time_String(H,M,S:WORD):String10; 'Time_String' converts the time passed to it in H,M and S to a string of the form 'HH:MM:SS'. Leading blanks are replaced by '0'. Everything having been said under 'Time' regarding separators applies to this function as well. In order to obtain a time string without seconds the following construct may be used: Mystring:=COPY(Time_String(H,M,S),1,5); PROCEDURE Check_Time(VAR Time_Str:String10; VAR H,M,S : WORD); PROCEDURE Check_Time(VAR Time_Str:String10; VAR H,M,S : WORD); Converts the value in 'Time_Str' to three Integers and checks it for validity. If the check does not succeed, 'Glb_Ok' is set to false. The string passed in 'Time_Str' must have one of the following formats: 'HH:MM:SS' or 'HH:MM'. Leading zeroes can be omitted. Separators can be any non numerical characters. Hours are assumed to be based on the 24 hour format. Chapter III, Screen Control Language page 149 Chapter III, Screen Control Language page 149 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Background Processing Tasks Background Processing Tasks SCL is capable to perform user written routines as Background tasks. Background tasks There are two different hooks for Background Tasks provided in SCL, Background Tasks one for low priority and the other for high priority work. The High priority background task is unconditionally performed by SCL every time it goes through the internal loop of 'Handle_Format' (Whenever SCL waits for keyboard input it is idling in this loop). The low priority background task is identical except that it is only performed when no other tasks are pending, i.e. there is no keyboard input waiting to be processed and no screen updates are required. In order to declare a user written routine (Procedure) to be performed as a background task by SCL all you need is to include one of the following two statements in the program: LP_Background_Pointer:=@; {this will cause SCL to execute as a Low Priority background task} or HP_Background_Pointer:=@ {SCL will execute as a High priority Background Task} Note: Please notice that background procedures must be compiled with Note: the 'Force Far Calls' Compiler Option. More details on Background tasks can be found in the explanation of SAMPLE4 distributed in Appendix A. Chapter III, Screen Control Language page 150 Chapter III, Screen Control Language page 150 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Other Routines Other Routines FUNCTION St(I:INTEGER):String80; FUNCTION St(I:INTEGER):String80; Returns an Integer number converted to a string. This function is especially useful to write numeric values to format fields. Example: Mystring:=St(15) returns '15' in Mystring. Example FUNCTION Rst(R:REAL;Decimals:INTEGER):String80; FUNCTION Rst(R:REAL;Decimals:INTEGER):String80; Returns an Real number converted to a string. Decimals must contain the number of positions to be shown after the decimal point. Example: Mystring:=Rst(3.55555,2) returns '3.56'. Example FUNCTION Nr(St:String80) : INTEGER; FUNCTION Nr(St:String80) : INTEGER; Converts a string into an Integer number. 'St' must be a string expressing an integer value. If 'St' does not epress an Integer value according to the rules for numeric constants then 'Nr' returns 0 (zero) and Glb_Ok is set to false. This function is mainly intended to read numeric format fields into integer variables. Example: My_Integer_Number :=Nr(G_Var(2)); Example FUNCTION Rnr(St:String80) : REAL; FUNCTION Rnr(St:String80) : REAL; Converts a string into an Real number. 'St' must be a string expressing a valid real value. If 'St' does not epress a Real value according to the rules for numeric constants then 'Rnr' returns 0 (zero) and Glb_Ok is set to false. This function is mainly intended to read the contents of numeric format fields into 'Real' variables. Example: My_Real_Number :=Rnr(G_Var(2)); Example Chapter III, Screen Control Language page 151 Chapter III, Screen Control Language page 151 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual FUNCTION Power(Mantissa, Exponent : REAL):REAL; FUNCTION Power(Mantissa, Exponent : REAL):REAL; Returns the value of Mantissa raised to the power of Exponent. FUNCTION Exist(Fn : String80):BOOLEAN; FUNCTION Exist(Fn : String80):BOOLEAN; Returns TRUE if a file with the name of Fn exists. Fn can contain a complete path description according to DOS rules. PROCEDURE Beep; PROCEDURE Beep; Creates a sound with a length of 'Beep_Time' clock ticks, alternating every every clock tick between the two frequencies 'Beep_Frequency_1' and 'Beep_Frequency_2'. Note: A clock tick occurs approximately 18.2 times per second (about Note: every 55 ms). FUNCTION Sys_Msg(Msgnr : INTEGER):String80; FUNCTION Sys_Msg(Msgnr : INTEGER):String80; Returns the text of record in file .ERR. Can be used in user programs to receive strings etc stored in this file (See also Appendix A; "The error message file"). FUNCTION Format_Name:String10; FUNCTION Format_Name:String10; Returns the name of the currently active format. Chapter III, Screen Control Language page 152 Chapter III, Screen Control Language page 152 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Chapter IV Chapter IV OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual This Page is intentionally left blank OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual S C L S C L Data Communications Subsystem Data Communications Subsystem OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction Introduction Due to their background tasking capability, SCL programs are ideally suited for data communications. This opens many exciting possibilities especially in the area of micro-mainframe connections, but also allow you to build terminal emulators etc. The datacom routines provided by SCL allow you to easily develop complex protocols that enable SCL programs to communicate with other machines via the RS232 serial interface. All necessary communications parameters can be programatically changed and easily adapted to any requirements. The actual handling and monitoring of the RS232 port is interrupt driven and therefore very powerful without imposing unnecessary overhead on your program. The following discusses the complete SCL Data Communications Subsystem. In order to help you develop your own protocols two example programs have been provided on your distribution disks, these will be discussed as well. Note: Note: In order to utilize the SCL Data Communications routines, your computer must be equipped with a serial asynchronous Interface (COM1:). This Interface will typically be connected to a Modem. CHAPTER IV, SCL Data Communication subsystem page 156 CHAPTER IV, SCL Data Communication subsystem page 156 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Global Communications Parameters Global Communications Parameters The following parameters must be set according to your needs. Since all major parameters are declared using Typed Constants this Typed Constants can be done either in the program source or during runtime. DC_Parity DC_Parity Declaration: CONST Dc_Parity : CHAR = 'E'; This parameter determines which parity is being used, if any. The possible values are 'E' (Even), 'O' (Odd) and 'N' (None). DC_Stopbits. DC_Stopbits. Declaration: CONST Dc_Stopbits : Integer = 1; Set this value to 2 if two stopbits are required. DC_Speed DC_Speed Declaration: CONST Dc_Speed : Integer = 9600; This parameter determines the line speed in baud. The possible values are 110, 150, 300, 600, 1200, 2400, 4800 and 9600 baud. DC_Charsize DC_Charsize Declaration: CONST Dc_Charsize : Integer = 7; This value determines the number of bits per character. The possible values are 7 or 8. BCC_Set BCC_Set Declaration: CONST BCC_Set : BOOLEAN = FALSE; If this variable is TRUE, a Block Check Character is sent with all messages. Refer to the description of 'Send_Buffer' for further details. CHAPTER IV, SCL Data Communication subsystem page 157 CHAPTER IV, SCL Data Communication subsystem page 157 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Timers and Delays Timers and Delays Tx_Char_Timeout Tx_Char_Timeout Declaration: CONST Tx_Char_Timeout : INTEGER = 500; Maximum time to wait until the previous character has been sent in milliseconds. See also procedure 'DC_Write'. Rts_Cts_Timeout Rts_Cts_Timeout Declaration: CONST Rts_Cts_Timeout : INTEGER = 500; Maximum time in milliseconds to wait for 'Clear to Send' after 'Request to send' was raised. See also function 'Tx_Ok'. Rts_Cts_Delay Rts_Cts_Delay Declaration: CONST Rts_Cts_Delay : INTEGER = 0; Minimum time in milliseconds between the raising of 'Request to send' and sending of the first character. This option is required with some datasets where 'clear to send' may come up before the modem is actually ready to receive the first character. Rts_Holdover Rts_Holdover Declaration: CONST Rts_Holdover : INTEGER = 0; The time in milliseconds to wait before 'Request to send' is dropped after the last character has been transmitted. This option is required with some datasets in order to avoid datacom line noise. CHAPTER IV, SCL Data Communication subsystem page 158 CHAPTER IV, SCL Data Communication subsystem page 158 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Data Communications Control Characters Data Communications Control Characters The following definitions have been provided to enhance the readability and to facilitate the writing of terminal and line protocols. CONST Nul = $0; Soh = $1; Stx = $2; Etx = $3; Eot = $4; Enq = $5; Ack = $6; Bel = $7; Con = $7; Bs = $8; Ht = $9; Lf = $a; Vt = $b; Ff = $c; Cr = $d; S0 = $e; S1 = $f; Dle = $10; Dc1 = $11; Dc2 = $12; Dc3 = $13; Dc4 = $14; Nak = $15; Syn = $16; Etb = $17; Can = $18; Em = $19; Sub = $1a; Esc = $1b; Fs = $1c; Gs = $1d; Rs = $1e; Us = $1f; Pol = $70; Sel = $71; Fsl = $73; Bsl = $74; Del = $7f; CHAPTER IV, SCL Data Communication subsystem page 159 CHAPTER IV, SCL Data Communication subsystem page 159 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Other Declarations Other Declarations DC_Buff_Size DC_Buff_Size Declaration: CONST DC_Buff_Size = 2500; This is the size of the circular buffer in which the received characters are written by the interrupt service routine. DC_Rx_Buffer DC_Rx_Buffer Declaration: VAR DC_Rx_Buffer : ARRAY[0..DC_Buff_Size] of BYTE; The circular buffer used by the interrupt service routine. DC_Rx_Buff_Bottom DC_Rx_Buff_Bottom Declaration: CONST DC_Rx_Buff_Bottom : INTEGER = 0; Points to the 'bottom' (= the first character to be read) of DC_Rx_Buffer. If DC_Rx_Buff_Bottom is equal to DC_Rx_Buff_Top then the receive buffer is empty. DC_Rx_Buff_Top DC_Rx_Buff_Top Declaration: CONST DC_Rx_Buff_Top : INTEGER = 0; Points to the 'Top' (= the position where the ISR will write the next character received) of DC_Rx_Buffer. If DC_Rx_Buff_Bottom is equal to DC_Rx_Buff_Top then the receive buffer is empty. CHAPTER IV, SCL Data Communication subsystem page 160 CHAPTER IV, SCL Data Communication subsystem page 160 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Bcc Bcc Declaration: VAR Bcc : Byte; Used to calculate the block check character. DC_Open DC_Open Declaration: CONST Dc_Open : BOOLEAN = FALSE; This Typed Constant is set to TRUE if the SCL datacom system is Typed Constant initialized. CHAPTER IV, SCL Data Communication subsystem page 161 CHAPTER IV, SCL Data Communication subsystem page 161 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Data Communications SCL Data Communications Procedures and Functions Procedures and Functions CHAPTER IV, SCL Data Communication subsystem page 162 CHAPTER IV, SCL Data Communication subsystem page 162 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Initializing and Terminating DC Initializing and Terminating DC PROCEDURE Open_Dc(VAR Result:INTEGER); PROCEDURE Open_Dc(VAR Result:INTEGER); This procedure initializes the datacom subsystem and installs the Interrupt Service Routine to receive characters. All parameters like line speed, parity etc must be correctly set before this procedure is called. Both Line and Modem status after the initialization are returned in 'Result'. The meaning of 'Result' is as follows: Bit High order byte (line status) Low order Byte (Modem) Bit High order byte (line status) Low order Byte (Modem) 7 Time_Out Error Rx line signal detect 6 Transfer Shift Register empty Ring indicator 5 Transfer Holding Register empty Data set ready 4 Break_Detect error Clear to send 3 Framing error Delta RxLSD 2 Parity error Trailing edge RI 1 Overrun error Delta DSR 0 Data Ready Delta CTS PROCEDURE Close_Dc; PROCEDURE Close_Dc; This procedure must be called to terminate the DC subsystem. It deinstalls the interrupt service routine and reinstates the interrupt vector to its original content. Failing to call this routine before the program is finished can lead to strange effects and may make a system reboot necessary. CHAPTER IV, SCL Data Communication subsystem page 163 CHAPTER IV, SCL Data Communication subsystem page 163 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Sending Data Sending Data PROCEDURE Send_Char(Code:BYTE ; VAR OK:BOOLEAN); PROCEDURE Send_Char(Code:BYTE ; VAR OK:BOOLEAN); This procedure raises RTS, and, once CTS is raised, sends the character with the ASCII code of 'Code' onto the RS232 interface. Then RTS is dropped again. If either CTS does not come up within 'RTS_CTS_Timeout' or if the character cannot be sent within 'Tx_Char_Timeout' then the operation is aborted and 'Ok' is returned FALSE. Example: Example: Send_Char(EOT,Ok); {sends an 'EOT' character (ASCII 4) } PROCEDURE Send_String(Data:String255;VAR OK:BOOLEAN); PROCEDURE Send_String(Data:String255;VAR OK:BOOLEAN); This procedure is similar to 'Send_Char' except that a string (Data) is sent. Example: Example: Send_String('Hello',Ok); PROCEDURE Send_Buffer(VAR Tx_Buff; PROCEDURE Send_Buffer(VAR Tx_Buff; Buff_Start,Buff_Length,Bcc_Add:INTEGER; Buff_Start,Buff_Length,Bcc_Add:INTEGER; Head:String255; var Ok:BOOLEAN); Head:String255; var Ok:BOOLEAN); This procedure first sends the string 'Head', then an 'STX' character (ASCII 2) and thereafter 'Buff_Length' bytes of 'Tx_Buff', starting at a displacement of 'Buff_Start' bytes. Then an 'ETX' (ASCII 3) is sent. If 'BCC_Set' is true, a block check character follows. This block check character is calculated by adding all characters starting from the 'STX' up to and including the 'ETX' to Bcc_Add without Carry, i.e using an 'XOR' function. 'Bcc_add' can be used to include 'Head' into the Bcc calculation if required. Error handling etc are identical to the those described under 'Send_String'. The data contained in Tx_Buff must be bytes representing the ASCII codes of the characters to be sent. This procedure is compatible with the most commonly used data communication protocols. Note: Note: An example for 'Send_Buffer' is shown on the next page. CHAPTER IV, SCL Data Communication subsystem page 164 CHAPTER IV, SCL Data Communication subsystem page 164 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example: Example: PROCEDURE Example; VAR My_Buffer:ARRAY[0..2000] of bytes; My_Header:String255; Write_Ok :BOOLEAN; CONST My_String:String255 = 'Hello'; BEGIN; BCC_Set:=TRUE; {send block check character} My_Header:=SOH + 'A' + '1'; {a typical header for poll/select} MOVE(My_String,My_Buffer,LENGTH(My_String)+1); {first byte is length of the Send_Buffer(My_Buffer,1,LENGTH(My_String),0,My_Header,Write_Ok); END; {displacement of 1 to exclude the byte containing length} The above procedure causes the following string to be sent: A1Hello The BCC is calculated without header (starting from 'STX'). If it is required to include the header into the BCC calculation, its BCC must be calculated externally and passed to 'Send_Buffer' via 'BCC_Add'. For this example the BCC for the header could be calculated using the following statement: Head_Bcc := SOH XOR ORD('A') XOR ORDd('1'); CHAPTER IV, SCL Data Communication subsystem page 165 CHAPTER IV, SCL Data Communication subsystem page 165 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Receiving Data Receiving Data PROCEDURE Receive_Char(VAR Code:INTEGER; VAR Ok:BOOLEAN); PROCEDURE Receive_Char(VAR Code:INTEGER; VAR Ok:BOOLEAN); Returns the ASCII Code of the character in the circular receive buffer pointed to by the 'Bottom' pointer (This character was received from datacom and put into the buffer by the Interrupt Service Routine). The 'Bottom' buffer pointer is then incremented. If the circular receive buffer does not contain any characters (Top = Bottom) then 'Ok' is returned FALSE. CHAPTER IV, SCL Data Communication subsystem page 166 CHAPTER IV, SCL Data Communication subsystem page 166 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Other Functions Other Functions PROCEDURE Disable_Port; PROCEDURE Disable_Port; This Procedure can be called to disable the RS232 port temporarily, for example to change parameters. PROCEDURE Enable_Port; PROCEDURE Enable_Port This procedure reinstates datacom if it was disabled using 'Disable_Port'. PROCEDURE Clear_Rx_Buffer; PROCEDURE Clear_Rx_Buffer; This Procedure clears the circular receive buffer, i.e it sets Top equal to Bottom. PROCEDURE Set_DC_Params; PROCEDURE Set_DC_Params; This Procedure must be called if data communication parameters (speed, parity etc) have been changed. The following sequence of procedures is recommended to change communication parameters: Disable_Port; DC_Speed:=4800; Set_DC_Params; Enable_Port; Clear_RX_Buffer; PROCEDURE DC_Diagnose(On:BOOLEAN); PROCEDURE DC_Diagnose(On:BOOLEAN); If 'On' is TRUE, the loopback feature for diagnostic testing will be set. This causes the output of the 'Send' shift register in the RS232 adapter to be directly looped back to the 'Receive' shift register input, i.e all data transmitted is immediately received again. If 'On is FALSEl the loopback feature will be reset and normal operation is resumed. This feature can be used for test purposes. PROCEDURE Get_Dc_Status(VAR Status:INTEGER); PROCEDURE Get_Dc_Status(VAR Status:INTEGER); This procedure returns the present line and modem status. The meaning of 'Status' is the same as described under 'Open_Dc'. CHAPTER IV, SCL Data Communication subsystem page 167 CHAPTER IV, SCL Data Communication subsystem page 167 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Low Level Routines Low Level Routines PROCEDURE Set_Dtr(On:BOOLEAN); PROCEDURE Set_Dtr(On:BOOLEAN); Depending on the the status of 'On', this procedure sets or resets Data terminal Ready. If 'On' is FALSE, Request to send will also be dropped. PROCEDURE Set_Rts(On:BOOLEAN); PROCEDURE Set_Rts(On:BOOLEAN); This procedure raises or drops Request to send. PROCEDURE DC_Write(Code:BYTE;VAR Ok:BOOLEAN); PROCEDURE DC_Write(Code:BYTE;VAR Ok:BOOLEAN); This procedure sends the character indicated by 'Code' onto the RS232 Interface. It does not manipulate RTS as the appropriate High Level Routines do (Send_...). The setting and resetting of RTS can be performed with 'Tx_Ok' and 'Set_Rts'. If the Character cannot be sent before 'Tx_Char_Timeout' the operation is aborted and 'Ok' is returned FALSE. FUNCTION Tx_Ok:BOOLEAN; FUNCTION Tx_Ok:BOOLEAN; Tx_Ok raises 'Request to send' and returns TRUE if Clear to Send comes up before 'Rts_Cts_Timeout'. FUNCTION Dsr:BOOLEAN; FUNCTION Dsr:BOOLEAN; Dsr returns the present status of Data set ready. FUNCTION Cts:BOOLEAN; FUNCTION Cts:BOOLEAN; Cts returns the present status of Clear to send. PROCEDURE DC_Break; PROCEDURE DC_Break; This procedure causes a 'Break' to be sent. CHAPTER IV, SCL Data Communication subsystem page 168 CHAPTER IV, SCL Data Communication subsystem page 168 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE DC_Isr; PROCEDURE DC_Isr; This is the Interrupt service routine for interrupt Hex 0C. It is called by the IRQ4 whenever a character has been received via the RS232 Interface. DC_Isr fetches this character and places it into the circular Receive buffer where it the can be read using 'Receive_Char'. DC_Isr may not be called directly by a user program. CHAPTER IV, SCL Data Communication subsystem page 169 CHAPTER IV, SCL Data Communication subsystem page 169 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Data communications SCL Data communications Example Programs Example Programs Chapter IV, SCL Data Communication example programs page 170 Chapter IV, SCL Data Communication example programs page 170 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual A Simple Line Monitor (SAMPLE7.PAS) A Simple Line Monitor (SAMPLE7.PAS) In this example program the SCL datacom routines are used to build a simple datacom line monitor which interprets and displays and interprets the traffic on a datacom line. The major datacom parameters like baudrate, wordsize, number of stopbits and parity can be dynamically changed while the interpretation of the line traffic is instantly visible. This program is therefore a neat tool to rapidly decipher the parameter settings of the datacom line you are connected to. In order to verify the functionality of this program, just connect COM1: to a busy datacom line and start it. Below you find the complete source code of the line monitor program, a detailed description follows afterwards. Chapter IV, SCL Data Communication example programs page 171 Chapter IV, SCL Data Communication example programs page 171 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Listing of SAMPLE7.PAS Listing of SAMPLE7.PAS PROGRAM dc_monitor; {a simple datacom line monitor} uses scl; {make SCL accessible} VAR Ok : BOOLEAN; Wrkstr : String80; Temp : INTEGER; Freeze : BOOLEAN; FUNCTION Xlate(Cn:INTEGER):String10; {datacom control character} VAR Tmp:String10; {interpretation} BEGIN; CASE Cn OF $0 : Tmp:=''; $1 : Tmp:=''; $2 : Tmp:=''; $3 : Tmp:=''; $4 : Tmp:=''; $5 : Tmp:=''; $6 : Tmp:=''; $7 : Tmp:=''; $8 : Tmp:=''; $9 : Tmp:=''; $a : Tmp:=''; $b : Tmp:=''; $c : Tmp:=''; $d : Tmp:=''; $e : Tmp:=''; $f : Tmp:=''; $10: Tmp:=''; $11: Tmp:=''; $12: Tmp:=''; $13: Tmp:=''; $14: Tmp:=''; $15: Tmp:=''; $16: Tmp:=''; $17: Tmp:=''; $18: Tmp:=''; $19: Tmp:=''; $1a: Tmp:=''; $1b: Tmp:=''; $1c: Tmp:=''; $1d: Tmp:=''; $1e: Tmp:=''; Chapter IV, SCL Data Communication example programs page 172 Chapter IV, SCL Data Communication example programs page 172 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual $1f: Tmp:=''; $70: Tmp:=''; $71: Tmp:=''; $72: Tmp:=''; $73: Tmp:=''; $7f: Tmp:=''; $80..$ff: Tmp:='<' + St(Cn) + '>'; {return character code} ELSE Tmp:=CHR(Cn); {return character} END; Xlate:=Tmp; END; {$F+} {far call option required for SCL background tasks} PROCEDURE Lp_Background_Task; {updates the line traffic field} BEGIN; IF NOT Freeze THEN {F9 toggles Freeze} BEGIN; REPEAT Receive_Char(Temp,Ok); {receive char from datacom} IF Ok THEN {there was one} BEGIN; Wrkstr:=Wrkstr+Xlate(Temp); {interpret it} WHILE LENGTH(Wrkstr) > 76 DO {cut off oldest} DELETE(Wrkstr,1,1); END; UNTIL NOT Ok; {no more characters} W_Cont(7,Wrkstr); {update traffic field} END; END; {$F-} {reset far calls again} Chapter IV, SCL Data Communication example programs page 173 Chapter IV, SCL Data Communication example programs page 173 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE Update_Params; {spacebar pressed} VAR Sp:INTEGER; BEGIN; CASE Active_Field OF 1: BEGIN; {linespeed} Sp:=Nr(G_Cont(1)); {get current speed} IF Sp = 110 THEN Sp:= 150 ELSE IF Sp = 150 THEN Sp:= 300 ELSE {switch} IF Sp = 300 THEN Sp:= 600 ELSE {to} IF Sp = 600 THEN Sp:=1200 ELSE {next} IF Sp = 1200 THEN Sp:=2400 ELSE {speed} IF Sp = 2400 THEN Sp:=4800 ELSE IF Sp = 4800 THEN Sp:=9600 ELSE Sp:=110; Dc_Speed:=Sp; {update speed} W_Cont(1,St(Sp)); {update field} END; 2: BEGIN; {char size} Sp:=Nr(G_Cont(2)); Sp:=Sp+1; IF Sp > 8 THEN Sp:=5; Dc_Charsize:=Sp; {update param} W_Cont(2,St(Sp)); {update field} END; 3: BEGIN; Sp:=Nr(G_Cont(3)); {stop bits} IF Sp = 1 THEN Sp:=2 ELSE Sp:=1; Dc_Stopbits:=Sp; {update param} W_Cont(3,St(Sp)); {update field} END; 4: IF G_Cont(4) = 'Even'THEN {parity} BEGIN; W_Cont(4,'None'); Dc_Parity:='N'; END ELSE IF G_Cont(4) = 'None'THEN BEGIN; W_Cont(4,'Odd'); Dc_Parity:='O'; END ELSE BEGIN; W_Cont(4,'Even'); Dc_Parity:='E'; END; END; Chapter IV, SCL Data Communication example programs page 174 Chapter IV, SCL Data Communication example programs page 174 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Disable_Port; {temporary disable datacom} Set_Dc_Params; {set new dc params} Enable_Port; {enable datacom again} END; PROCEDURE Handle_Uf; BEGIN; IF Char_Code = 32 THEN {Spacebar pressed} BEGIN; Update_Params; {update dc params} Char_Code:=Code_Noop; {no further action} END ELSE IF Char_Code = Code_F9 THEN {F9 Pressed} BEGIN; Freeze:= NOT Freeze; {toggle freeze} Char_Code:=Code_Noop; {no further action} END ELSE IF Char_Code = Code_Return THEN Char_Code:=Code_Tab ELSE IF Char_Code = Code_Escape THEN Char_Code:=Code_Noop; END; PROCEDURE Handle_First; {This Procedure handles format 'first'.} BEGIN; Select_Format('main'); W_Cont(1,St(Dc_Speed)); {prefill} W_Cont(2,St(Dc_Charsize)); {the} W_Cont(3,St(Dc_Stopbits)); {fields} IF Dc_Parity = 'E' THEN W_Cont(4,'Even') ELSE IF Dc_Parity = 'O' THEN W_Cont(4,'Odd') ELSE W_Cont(4,'None'); Freeze:=FALSE; {display incoming traffic} Display_Format(0,0); REPEAT Handle_Format; {Complete Loop to handle format input} IF User_Function THEN {user key pressed} Handle_Uf; {user interrupt procedure} UNTIL Format_Done; {Either completely filled in or abort pressed} END; Chapter IV, SCL Data Communication example programs page 175 Chapter IV, SCL Data Communication example programs page 175 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual VAR Res:INTEGER; BEGIN; {of main} Wrkstr:=''; Select_Format_File('Sample7'); {initializes SCL and loads the format file 'Sample7'} LP_Background_pointer:=@LP_Background_task; {invoke our screen updating routine as low priority background task} Auto_Help_Set:=FALSE; {reset autohelp feature} Open_Dc(Res); {initialize Datacom system} Handle_First; {load,display and handle the format} Close_Formats; {terminate SCL} Close_Dc; {close Datacom system} END. {of main} Chapter IV, SCL Data Communication example programs page 176 Chapter IV, SCL Data Communication example programs page 176 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Description of SAMPLE7.PAS Description of SAMPLE7.PAS Main Program Main Program The first SCL datacom routine being called is 'Open_DC'. It initializes the datacom system and installs the Interrupt Service Interrupt Service Routine which from this very moment will receive all characters on Routine the datacom line and place them into the circular receive buffer. Then the procedure 'Handle_Main' is called to display and handle the only screen format in this program. If 'Handle_Main' is finished, 'Close_DC' is called which terminates the datacom system and deinstalls the ISR. Finally, 'Close_formats' terminates SCL as usual. Handle_Main Handle_Main As soon as the format is selected, its fields are 'prefilled' with the current settings of the main datacom parameters. The format is then displayed. The datacom line traffic is interpreted and displayed by the procedure LP_Background_Task. Handle_Uf Handle_Uf 'Handle_Uf is a user function procedure acting on several keyboard keys (Spacebar, F9, Return and Escape). In this program, the spacebar is used to change datacom parameters. If it is pressed, the procedure 'Update_Params' is called to process these changes. If F9 is pressed, the boolean variable 'Freeze' is toggled. If 'Freeze' is TRUE, the display of datacom line traffic is halted for better readability. Pressing F9 again will restart it. If Return is pressed, it is replaced by a 'Tab' to prevent SCL from terminating the format. 'Escape' is replaced by a NoOp (this program is terminated by pressing the 'Abort' key (F10). Update_Params Update_Params This procedure is called whenever the spacebar is pressed. For the currently active field, it substitutes the present SCL datacom parameter by the next possible choice and displays its new value. The datacom port is then temporarily disabled ('Disable_Port') before 'Set_DC_Params' is called to activate the new parameter setting. Finally the datacom port is enabled again using 'Enable_Port'. Chapter IV, SCL Data Communication example programs page 177 Chapter IV, SCL Data Communication example programs page 177 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual LP_Background_Task LP_Background_Task As long as 'Freeze' is FALSE, this 'Background processing' procedure permanently updates the line traffic display field (field 7). It reads all characters having been received since the last update from the circular buffer (using 'Receive_Char'). Each character is interpreted via the function 'Xlate' (see below) and the resulting string is then displayed in field 7. If the string to be outputed outgrows the size of the display window, the oldest characters are trimmed, thereby creating a horizontal scroll effect. For further informations on background processing please refer to Appendix A. Xlate Xlate This procedure makes the line traffic more readable by translating all ASCII codes representing datacom control characters into more meaningful strings. For example, character ASCII #4 is translated into the string ''. Similarly, all codes above ASCII 125 are translated into strings showing their ASCII code in '< >' brackets (example: ASCII 130 is returned as '<130>'). For all other codes their corresponding character images are returned. Chapter IV, SCL Data Communication example programs page 178 Chapter IV, SCL Data Communication example programs page 178 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual A Terminal Emulator Program (SAMPLE 8) A Terminal Emulator Program (SAMPLE 8) This example program features a terminal emulator program using a rather complex poll select protocol, which is even capable of handling multiple receive/transmit buffers. It has been derived from a 'real world' SCL program which works on a BURROUGHS mainframe datacom network together with other terminals in a multipoint environment at 9600 baud and emulates the datacom protocol of a BURROUGHS TD830 Terminal. This example program is intended to demonstrate how to write a datacom protocol, for this reason the screen interface deliberately is basic and only consists of a single format with two fields, one where a message to be sent can be entered and another one were all messages received from the mainframe are displayed. Since nearly every mainframe type uses a different protocol, details specific to this protocol are purposely not covered in depth, the intention is to concentrate on the more common aspects of how to write terminal protocols with the help of SCL. Nevertheless this example can probably serve as a good basis for your own developments. Note: Note: There are many different possibilities to interface SCL programs to mainframes; typically an SCL program will emulate the datacom interface of a terminal and do all other internal tasks using its own resources, thus presenting the user with its own powerful capabilities. Dialogues with the mainframe are usually performed in the background, automatically and totally transparent to the user. Chapter IV, SCL Data Communication example programs page 179 Chapter IV, SCL Data Communication example programs page 179 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Listing of Example Program 8 Listing of Example Program 8 The following is an extract of SAMPLE8.PAS and shows the poll select handling routines used by this program. CONST Tx_Buffers = 1; {nr of xmit buffers; minimum = 1} Rx_Buffers = 1; {nr of receive buffers; minimum = 1} Dc_Addr_1 : Byte = $33; {first byte of terminal address} Dc_Addr_2 : Byte = $31; {second byte of terminal address} TYPE Buffer_Data = ARRAY[1..Dc_Buffer_Size] OF Byte; Buffer_Type = RECORD {description of rx and tx buffers} Len :INTEGER; {length of data in buffer} Data:Buffer_Data; END; Rx_Buffer_Type= ARRAY[0..Rx_Buffers] OF Buffer_Type; Tx_Buffer_Type= ARRAY[0..Tx_Buffers] OF Buffer_Type; VAR Rx_Buffer_Overflow:BOOLEAN; {rx data > buffersize} Rx_Buffer:Rx_Buffer_Type; Tx_Buffer:Tx_Buffer_Type; Result_Ok:BOOLEAN; Ch_Code:INTEGER; State:INTEGER; {used in poll select state machine} Rx_Buff_Wptr, {rx buffer to be filled next} Rx_Buff_Rptr, {rx buffer to be read next} Tx_Buff_Wptr, {tx buffer to be sent last} Tx_Buff_Rptr : INTEGER; {tx buffer to be sent first} This_Char_Done:BOOLEAN; {used in poll select state machine} Dc_Msg_Header:String255; Cont_String:String255; Char_Ind:INTEGER; Ok : BOOLEAN; Head_Bcc:INTEGER; PROCEDURE Ps_Handler; {poll select state machine. run as } BEGIN; {background task} IF This_Char_Done THEN {previous character finished} Receive_Char(Ch_Code,Ok); {get next char from dc rx buffer} IF Ok THEN {there was a character} Chapter IV, SCL Data Communication example programs page 180 Chapter IV, SCL Data Communication example programs page 180 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual BEGIN; This_Char_Done:=TRUE; {preset} CASE State OF 0:IF Ch_Code = Eot THEN State:=1; {eot received} 1:IF Ch_Code = Dc_Addr_1 THEN {first byte of address} State:=2 {wait for second byte} ELSE State:=0; {reset state machine} 2:IF Ch_Code = Dc_Addr_2 THEN {second byte of address} State:=3 {wait for cntrl char} ELSE State:=0; {reset state machine} 3:IF Ch_Code = Pol THEN State:=4 ELSE {poll string} IF Ch_Code = Sel THEN State:=7 ELSE {select string} IF Ch_Code = Fsl THEN State:=15 ELSE {fast sel} State:=0; {otherwise reset state machine} 4:IF Ch_Code = Enq THEN {end of string} BEGIN; This_Char_Done:=FALSE; {dont read next char} State:=5 {next is state = 5} END ELSE State:=0; {reset state machine} 5:IF Tx_Buffer[Tx_Buff_Rptr].Len = 0 THEN BEGIN; {no data to send} Send_Char(Eot,Ok); {send eot} State:=0; {..and reset state machine} END ELSE {there is data to be sent} BEGIN; {send it with header and bcc} Send_Buffer(Tx_Buffer[Tx_Buff_Rptr].Data, 1,Tx_Buffer[Tx_Buff_Rptr].Len,Head_Bcc, Dc_Msg_Header,Ok); IF Ok THEN {successfully sent} State:=6 {wait for ack} ELSE State:=0; {otherwise reset state machine} END; 6:BEGIN; IF Ch_Code = Ack THEN {ack received} BEGIN; Send_Char(Eot,Ok); {send eot} IF Ok THEN {successfully sent} BEGIN; {clear buffer & increase pointer} Tx_Buffer[Tx_Buff_Rptr].Len:=0; Tx_Buff_Rptr:=SUCC(Tx_Buff_Rptr) MOD Tx_Buffers; END; State:=0; {reset state machine} END Chapter IV, SCL Data Communication example programs page 181 Chapter IV, SCL Data Communication example programs page 181 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual ELSE IF Ch_Code = Nak THEN {mainframe didnt receive ok} BEGIN; {resend data} This_Char_Done:=FALSE; State:=5; END ELSE {mainframe did not respond} State:=0; {reset state machine} END; 7: IF Ch_Code = Enq THEN {end of sel string} BEGIN; This_Char_Done:=FALSE; {dont receive next char} State:=8; {answer} END ELSE State:=0; {reset state machine} 8: IF Rx_Buffer[Rx_Buff_Wptr].Len > 0 THEN BEGIN; {we have no rx buffer available} Send_Char(Nak,Ok); {send nak} State:=0; {reset state machine} END ELSE {we can receive data} BEGIN; Send_Char(Ack,Ok); {send ack} IF Ok THEN State:=9 ELSE {ack could be sent} State:=0; {otherwise reset state machine} END; 9: IF Ch_Code = Soh THEN State:=10 {SOH received} ELSE State:=0; 10: IF Ch_Code = Dc_Addr_1 THEN {first byte of address} State:=11 ELSE State:=0; 11: IF Ch_Code = Dc_Addr_2 THEN State:=12 {second byte of address received} ELSE State:=0; 12: BEGIN; IF Ch_Code = Stx THEN {stx received} BEGIN; Bcc:=Stx XOr Head_Bcc; {start bcc calculation} Char_Ind:=1; {init rx buffer} State:=13; {rx data} END ELSE State:=0; {reset state machine} END; Chapter IV, SCL Data Communication example programs page 182 Chapter IV, SCL Data Communication example programs page 182 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual 13: BEGIN; {receive data & write into rx buffer} IF (Char_Ind < Dc_Buffer_Size) AND (Ch_Code <> Etx) THEN BEGIN; {buffer not full and not etx received} Rx_Buffer[Rx_Buff_Wptr].Data[Char_Ind]:=Ch_Code; Bcc:=Bcc XOr Ch_Code; {bcc calculation} Char_Ind:=SUCC(Char_Ind); {increase buffer index} END ELSE IF Ch_Code = Etx THEN {etx received} BEGIN; Bcc:=Bcc XOr Etx; {get final bcc} Rx_Buffer[Rx_Buff_Wptr].Len:=Char_Ind - 1; State:=14; END ELSE {rx buffer overflow} BEGIN; State:=0; {reset state machine} Rx_Buffer_Overflow:=TRUE; {set flag} END; END; 14: BEGIN; IF Ch_Code = Bcc THEN {received = calculated bcc} BEGIN; Send_Char(Ack,Ok); {send an ACK} IF Ok THEN {successfully sent, next rx buffer} Rx_Buff_Wptr:=SUCC(Rx_Buff_Wptr) MOD Rx_Buffers ELSE Rx_Buffer[Rx_Buff_Wptr].Len:=0;{forget rx data} END ELSE {bcc error} BEGIN; Rx_Buffer[Rx_Buff_Wptr].Len:=0;{forget rx data} Send_Char(Nak,Ok); {send nak} END; State:=0; {reset state machine} END; 15: IF Ch_Code = Soh THEN State:=16 ELSE State:=0; {FSL} 16: IF Ch_Code = Dc_Addr_1 THEN State:=17 ELSE State:=0; 17: IF Ch_Code = Dc_Addr_2 THEN State:=18 ELSE State:=0; Chapter IV, SCL Data Communication example programs page 183 Chapter IV, SCL Data Communication example programs page 183 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual 18: BEGIN; IF Ch_Code = Stx THEN {stx received} BEGIN; IF Rx_Buffer[Rx_Buff_Wptr].Len > 0 THEN State:=0 {no rx buffer available} ELSE BEGIN; {start bcc calculation} Bcc:=Stx XOr Head_Bcc; Char_Ind:=1; {init buff index} State:=13; {wait for rx data} END; END ELSE State:=0; {reset state machine} END; ELSE State:=0; {reset state machine} END; {end case} IF Ch_Code = Eot THEN State:=1; {preset state machine} END; END; PROCEDURE Clear_Rx_Buffers; {clear all rx buffers} VAR X:INTEGER; BEGIN; FOR X:=0 TO Rx_Buffers DO Rx_Buffer[X].Len:=0; {set length to 0} Rx_Buff_Wptr:=0; {both pointers to 0} Rx_Buff_Rptr:=0; END; PROCEDURE Clear_Tx_Buffers; {clear all xmit buffers} VAR X:INTEGER; BEGIN; FOR X:=0 TO Tx_Buffers DO Tx_Buffer[X].Len:=0; {set length to 0} Tx_Buff_Wptr:=0; {set both pointers to 0} Tx_Buff_Rptr:=0; END; Chapter IV, SCL Data Communication example programs page 184 Chapter IV, SCL Data Communication example programs page 184 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE Init_Ps; {init poll select system} VAR Stat:INTEGER; BEGIN; Rx_Buffer_Overflow:=FALSE; Cont_String:=CHR(Dc_Addr_1) + CHR(Dc_Addr_2) + CHR(Pol) + CHR(Enq); {set up contention string} Dc_Msg_Header:=CHR(Soh)+CHR(Dc_Addr_1)+CHR(Dc_Addr_2); {header} Head_Bcc:=Dc_Addr_1 XOr Dc_Addr_2; {calculate bcc for header} State:=0; {reset state machine} Clear_Rx_Buffers; {clear rx buffers} Clear_Tx_Buffers; {clear tx buffers} This_Char_Done:=TRUE; Open_Dc(Stat); {open datacom & install ISR} Send_String(Cont_String,Result_Ok); {send contention string} END; FUNCTION Data_Received:BOOLEAN; {returns true if at least one } BEGIN; {of the rx buffers contains data} Data_Received:= Rx_Buffer[Rx_Buff_Rptr].Len > 0; END; FUNCTION Dc_Write_Ok:BOOLEAN; {returns true if at least one} BEGIN; {of the tx buffers is available} Dc_Write_Ok:=Tx_Buffer[Tx_Buff_Wptr].Len = 0; END; PROCEDURE Read_Dc(VAR Data;VAR Len:INTEGER;VAR Ok:BOOLEAN); BEGIN; {call this routine to obtain data received from Mainframe} IF Data_Received THEN {one of the rx buffers contains data} BEGIN; {return it} Len:=Rx_Buffer[Rx_Buff_Rptr].Len; Move(Rx_Buffer[Rx_Buff_Rptr].Data,Data,Len); Rx_Buffer[Rx_Buff_Rptr].Len:=0; {clear this buffer} Rx_Buff_Rptr:=SUCC(Rx_Buff_Rptr) MOD Rx_Buffers; {incr pointer} Ok:=TRUE; END ELSE Ok:=FALSE; {no rx data available} END; Chapter IV, SCL Data Communication example programs page 185 Chapter IV, SCL Data Communication example programs page 185 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual PROCEDURE Write_Dc(VAR Buff; Len:INTEGER;VAR Ok:BOOLEAN); BEGIN; {call this routine to send data to mainframe} IF Dc_Write_Ok THEN {tx buffer available} BEGIN; Move(Buff,Tx_Buffer[Tx_Buff_Wptr].Data,SIZEOF(Buff)); Tx_Buffer[Tx_Buff_Wptr].Len:=Len; Tx_Buff_Wptr:=SUCC(Tx_Buff_Wptr) MOD Tx_Buffers; Ok:=TRUE; END ELSE Ok:=FALSE; {no tx buffer available} END; Chapter IV, SCL Data Communication example programs page 186 Chapter IV, SCL Data Communication example programs page 186 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Description of SAMPLE8.PAS Description of SAMPLE8.PAS The following is a broad discussion of the datacom routines used in example program 8 including some useful hints on how to implement such datacom protocols in a SCL program. Poll-Select Terminal Protocol Handling System Poll-Select Terminal Protocol Handling System The main routines in this system are 'Write_DC', 'Read_DC' and 'PS_Handler'. 'Write_DC' does not actually write to the datacom line (this is done by the underlying SCL Datacom system under the control of 'PS_Handler'). It just places the message to be sent into the first available transmit buffer. If no empty buffer is available (i.e queue full) an error code is returned to the calling procedure within the user program. 'Read_DC' works in a similar fashion, it just returns the message waiting in the first read buffer. If there are no messages pending, an error code is returned. 'PS_Handler' forms the interface to the underlying SCL Datacom system. It runs as a background job (called from within 'HP_Background_Task'). 'PS_Handler' checks all incoming datacom traffic for messages addressed to this terminal and acts upon them as required. It mimics a typical 'State Machine' in form of a big case statement and is controlled by the variable 'State'. Whenever the mainframe polls the terminal, 'PS_Handler' checks whether there is a message in the write buffer. If there is none, it sends an 'EOT', otherwise it sends the message, preceeded with a header containing the terminal address and followed by ETX and a block check character. If the mainframe prompts this message with an ACK the buffer is discarded and the pointer increased to the next buffer to be sent. In case the mainframe sends a message, 'PS_Handler' removes the header and the control characters and stores it in the first available receive buffer where it then can be fetched by 'Read_DC'. This way of implementing a datacom protocol in a SCL program takes full advantage of SCL's background processing capabilities and allows a user program to treat complex datacom transactions very much like writing and reading to an ordinary file, without having to bother about any protocol conventions and underlying logic etc. On the following page you find a detailed description of the flow of data through the different layers of this datacom system. Chapter IV, SCL Data Communication example programs page 187 Chapter IV, SCL Data Communication example programs page 187 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Poll Select Handler Datacom read data flow Poll Select Handler Datacom read data flow ____________________________________________ 1 The RS232 adapter hardware receives the datacom message from the mainframe and, whenever a complete character has been received, raises a hardware interrupt. 2. This hardware interrupt invokes SCL's Interrupt Service Routine Interrupt Service Routine (DC_ISR) which fetches this character and places it into the circular receive buffer. 3. 'PS_Handler', called from within 'HP_Background_Task' checks whether one or more characters have been received since the last time it was executing and, if this is the case, calls 'Receive_Char' to read them, one at a time, from the circular receive buffer. It then determines the necessary action depending on the value of 'State'. In case the character is not intended for this terminal it is discarded, otherwise, if it is the last character of a control string, 'PS_Handler' sends a prompt to the mainframe, and finally, if it belongs to a message just being received it is placed into the first available receive buffer. Once all characters of this message have been received and placed into the receive buffer, this buffer is marked valid and now available to be read by 'Read_DC'. 4. 'Read_DC', called from within the user program, moves the complete message from the receive buffer into the selected user variable. Chapter IV, SCL Data Communication example programs page 188 Chapter IV, SCL Data Communication example programs page 188 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Poll Select Handler Datacom write data flow Poll Select Handler Datacom write data flow _____________________________________________ 1. Called from within the user program, 'Write_Dc' moves the message to be sent to the first available write buffer. 2. If 'PS_Handler' receives a Pollstring it checks whether one of the write buffers contains data to be sent and if this is the case, passes it, together with a header, on to the procedure 'Send_Buffer'. 3. Send_Buffer then calls 'DC_Write' to send it, character by character, out to the datacom line. 4. 'PS_Handler' then waits for an 'ACK' from the mainframe and subsequently discards the content of the write buffer. Chapter IV, SCL Data Communication example programs page 189 Chapter IV, SCL Data Communication example programs page 189 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Appendix A Appendix A Sample Program Discussion Sample Program Discussion OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Introduction Introduction In this section you be given some insight of the programming mechanisms used in the 5 small demo programs made available to you. Key SCL programming technic are demonstrated and discussed here. You will be able to make ample use of these programs for training purposes, we actually recommend that you study them thoroughly. Having OASIS installed in your system and being already somewhat familiar with its operation (It's dead easy, very intuitive indeed) you will then be in a position to examine the specifications of the formats used in these sample programs. For each program, under the header 'What you could try:' you will 'What you could try:' find some ideas and recommendations to familiarize yourself with SCL and to understand the features & constructs used in the program under review. By following these recommendations, you will soon realize how simple and effective the use of SCL can be. In the mean time you can appreciate the purity of code, the speed and the flexibility provided by OASIS SCL designed programs. Below is a brief overview of all sample programs described herewith. SAMPLE1 SAMPLE1 A very short program including a single format. This program is of no practical use and is mainly intended to exhibit the basic architecture and requirements of any SCL program. SAMPLE2 SAMPLE2 A simple program to print mailing labels on your printer. SAMPLE3 SAMPLE3 A program demonstrating how the SCL format stack works. In this example, up to 10 formats are displayed on the screen simultaneously, overlapping each other. SAMPLE4 SAMPLE4 An automatic Disk menu program. Any program can be executed directly from the menu just by pointing to it. It can also let you wander across all subdirectories on your disk. SAMPLE5 SAMPLE5 A little Demo Program giving an overview on some of the features of SCL. Run it ! Appendix A, sample programs discussion page 191 Appendix A, sample programs discussion page 191 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example 1 (OASIS Easy Fields) Example 1 (OASIS Easy Fields) ______________________________ Due to its simplicity, the first example program offers little practical use, but beside showing the very basic structure and the minimum requirements of any SCL program it is perfectly suited for your first acquaintance with OASIS. It consists of the following files: SAMPLE1.SCS : The format file, containing a single format. SAMPLE1.SCI : The index file to above. SAMPLE1.MSG : Contains all Field Messages. Field Messages SAMPLE1.PAS : The Turbo Pascal source program as listed below. SAMPLE1.EXE : Compiled version of SAMPLE1.PAS. Below is a complete listing of SAMPLE1.PAS. It is meant to give you some basic knowledge about programming with SCL. As you can see it can't be easier. Note how little code is required. PROGRAM first; {$V-} {No Length Checks for Strings. Mandatory for SCL} USES SCL; {Make SCL accessible} PROCEDURE handle_first; {This Procedure handles format 'first'.} BEGIN; Select_Format('first'); {Load the format from disk} Display_Format(0,0); {Display it in the upper left corner} REPEAT Handle_Format; {Complete Loop to handle format input} UNTIL Format_Done; {Either completed or abort key pressed} END; BEGIN; {of main} Select_Format_File('Sample1'); {initialize SCL and load the} {format file 'Sample1'} handle_first; {load,display and handle the format} Close_Formats; {terminate SCL } END. {of main} Appendix A, sample programs discussion page 192 Appendix A, sample programs discussion page 192 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Explanations of SAMPLE1.PAS Explanations of SAMPLE1.PAS Compiler Option '$V-' Compiler Option '$V-' This Option is required in any SCL program. More details about compiler options can be found in your 'TURBO PASCAL' manual. Without this compiler option specified SCL programs won't compile. USES Statement USES Statement "USES SCL;" makes SCL accessible from within this program. Main Program Main Program The first statement is Select_Format_File('Sample1');. This procedure Select_Format_File('Sample1'); initializes SCL and all required files. Since no file SAMPLE1.ERR exists in this case, SCL only initializes the error numbers (without the messages). 'Select_Format_File' is the first SCL statement to be executed and it appears only once in any program. Close_Formats; is the last SCL statement. It`closes all files and Close_Formats; frees the memory space previously used by SCL. Between these two statements, the procedure which processes the format in this program, Handle_first, is called. Handle_first Format Handling Format Handling The procedure 'Handle_First' performs the complete handling of our screen format. The first statement, 'Select_Format('first');' loads our format (with 'Select_Format('first');' the name 'First') from the format file into the format stack in memory. 'Display_Format(0,0);' then displays it on the screen starting at the upper left corner (Displacement 0,0). Then follows the actual format handling loop: REPEAT Handle_Format; UNTIL Format_Done; Appendix A, sample programs discussion page 193 Appendix A, sample programs discussion page 193 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The same Loop is used to process any format in SCL. The procedure Handle_Format is exited when any of the following occurs: Handle_Format * Before a new field on the format is initialized (=entered) * Before a field is left * Before the format is left (if it is finished) * and, optionally, depending on the format specifications, if a User Function Key has been pressed. User Function Key The boolean function 'Format_Done' returns FALSE as long as the 'Format_Done' format has not been finished. The format is considered to be finished if any one of the following conditions occurs: * All mandatory fields are filled in and either 'Escape' was hit or 'Return' was pressed while being in the last field. * The 'Abort' key (F10) is pressed. Apart from reading and writing fields and, the format handling loop is always the same, independent of the number and type of fields on a format. In fact, the above loop can fulfill the handling of any SCL any screen format. There is no need to define any logic for Help screens, Display of messages, Input error handling, field check and so on. All this is performed automatically by SCL as part of the Format Specifications which can be modified anytime via SFD. Note: This program does not provide the facility to read or to write Note: into fields. This will be covered in the next examples. What you could try : What you could try : 1. Run the program and see what happens. 2. Load the format into SFD and study its specifications. 3. Add a field to the format 'First' and/or re-specify existing fields. 4. Create your own format and modify the program to process it according to your requirements. Appendix A, sample programs discussion page 194 Appendix A, sample programs discussion page 194 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example 2 (OASIS Print Labels) Example 2 (OASIS Print Labels) _______________________________ This program captures address data from a screen format and uses it to output a specified number of mailing labels on your printer. Its basic structure is exactly the same as in example 1. For this reason only the new features are discussed. Notice the use of prompt and error message fields (called output output field in OASIS) at the bottom of your screen. field The error messages are held in a file called SAMPLE2.ERR. Failing to provide such file would still produce error numbers. In this very case SAMPLE2.ERR is just a straight copy of 'SCL.ERR' therefore exclusively contains messages for SCL internal errors handling rather than any user defined ones. References to other files description can be found in example 1. It consists of the following files: SAMPLE2.SCS : The format file, containing a single format. SAMPLE2.SCI : The index file to above. SAMPLE2.MSG : Contains all Field Messages. Field Messages SAMPLE2.PAS : The Turbo Pascal source program as listed below. OAS2LAB.EXE : Compiled version of SAMPLE2.PAS. The format file SAMPLE2.SCS The format file SAMPLE2.SCS It contains 3 formats: 'Address' : The label entry format. 'Autohelp': See the AutoHelp Feature and the note below. AutoHelp Feature 'Forhelp' : Specified as the format to be displayed if F1 is F1 pressed in the global specifications of 'Address'. Note: In case 'Autohelp' cannot be found, SCL displays the adequate Note: error message. Setting the SCL variable 'Autohelp_Set' to false would prevent its display. For the format 'Address', no Field Help Formats have been specified. Field Help Formats Appendix A, sample programs discussion page 195 Appendix A, sample programs discussion page 195 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Explanations of SAMPLE2.PAS Explanations of SAMPLE2.PAS The following describes all new SCL constructs introduced with this program. You can find the complete program listing on your distribution disks. Beep_Time:=2; Beep_Time:=2; This statement changes the duration of SCL's 'Beep' sound. By default this value is set to 4. Modifying it as shown above causes the 'Beep' to be shorter. Most of the other SCL default values can be modified in exactly the same fashion. REPEAT {stay in loop until 'Abort' is pressed} Get_Data; {display format and obtain data} IF NOT Format_Aborted THEN {format contains valid data} Print_Labels; {then print the desired labels} UNTIL Format_Aborted; {F10 ('Abort') key was pressed} 'Get_Data' is the familiar format handling loop, literally identical to the one discussed in example 1. 'Format_Aborted' is a boolean variable, which is TRUE if a format is aborted rather than normally completed. In other words, as long as 'Format_Aborted' is FALSE we know that the format was completed in the normal way and therefore contains valid data in agreement to the format specifications. 'Print_Labels' contains routines to read out the content of the format and print the appropriate mailing labels. Obviously, this can only be done if the format contains valid data (i.e has not been aborted). This sequence (Display of an empty format, reading the information and printing the desired quantity of labels) is repeated until the user terminates by pressing 'Abort'. Display_Format(X_Max DIV 2,Y_Max DIV 2); Display_Format(X_Max DIV 2,Y_Max DIV 2); X_Max is a function returning the maximum horizontal displacement possible for the current format. Y_Max returns the maximum vertical displacement. Hence 'Display_Format(X_Max,Y_Max)' would display a format in the lower right corner of the screen. Combined with 'DIV 2', the format is consequently displayed in the center of the screen. Appendix A, sample programs discussion page 196 Appendix A, sample programs discussion page 196 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Reading the Format Content Reading the Format Content The procedure 'Print_Labels' is also tasked to read the format content. Below you find a complete listing of this procedure. Its relevant contructs are discussed afterwards. PROCEDURE Print_Labels; {prints desired Qty of labels using the} VAR {data on format 'Address'} Wrkstr: String80; I : INTEGER; BEGIN; FOR I:=1 TO Nr(G_Cont(7)) DO {number of labels} BEGIN; IF G_Sel(1) THEN Wrkstr:=G_Cont(1) ELSE` {'Mr'} IF G_Sel(2) THEN Wrkstr:=G_Cont(2) ELSE {'Mrs'} IF G_Sel(3) THEN Wrkstr:=G_Cont(3); {'Miss'} WRITELN(lst,wrkstr,' ',g_cont(4));{concatenate the above} {with a space and the content of the 'Name' field} WRITELN(Lst); {Blank line} WRITELN(Lst,G_Cont(5)); {the street} WRITELN(Lst,Capital(G_Cont(6))); {the city} WRITELN(Lst,Charstring('=',LENGTH(G_Cont(6)))); {underline the city with '=' chars} WRITELN(Lst); WRITELN(Lst); {Two blank lines} END; {for loop} END; {procedure print_labels} Explanations to the above Procedure Explanations to the above Procedure As mentioned earlier in this manual, fields on formats can be read from the very moment a format is handled ('Handle_Format') until the next one is just about to be processed. In our example this is done at the completion of the format. 'G_Cont(n)' is a function returning the content of field 'n' in form of a string. 'Nr' is another function converting a string into an integer number. Therefore the construct 'Nr(G_Cont(7)' reads the content of field 7, converts it and returns it in form of an integer number. Please note that there is no need to check whether field 7 really contains an Integer number, since the relevant checks have already been performed by SCL in accordance with the specifications of the format itself. We can therefore be sure at this moment that the field contains an integer in the predetermined range (1..25 in this case). Appendix A, sample programs discussion page 197 Appendix A, sample programs discussion page 197 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual 'G_Sel(n)' is a function returning the Selected status of field 'n'. Selected Fields 1 to 3 are arranged into a Group of constants. This means that Group only one field can be selected at any time. Since we also have specified this group as Mandatory, we know that at least (and only) Mandatory one field has been selected. In our example, we find out which field this is and move its content ('Mr','Mrs' or 'Miss') to 'Wrkstr'. The content of field 4 (the name) is then added to it, seperated by a blank space, and finally the whole string is printed. Next, the content of field 5 (Street) is read and printed. The City (content of field 6) is printed in capital letters. The construct 'Capital(G_Cont(6))' elegantly performs this operation. Finally to underline the city with '=' characters, the construct 'Charstring('=',length(g_cont(6)))' returns a string of '=' characters with a length of the information contained in field 6 (City). Help system Help system As previously mentioned, the format file for this program contains 3 formats, two of them being 'Help screens'. As you probably realized, there is no logic whatsoever in the program to handle these screens. In order to feature an SCL program with help screens, all you have to do is to design them and add their names in the format specs of the format(s) they relate to. The Autohelp screen does not have to be Autohelp specified at all. SCL checks whether it exists and if it does, it is automatically displayed after a predetermined number of consecutive input errors has occurred. The name of the 'Autohelp' format must be identical to the one specified as 'Autohelp_Screen' in SCLs Global Declarations (Default: 'AutoHelp'). Note: Help screens relative to a Format are specified in that Note: Format formats Global Specifications. Help screens associated with one or Global Specifications more fields on a format are specified in the Field specifications of fields Field specifications the appropriate field(s). Input Messages Input Messages In order to display explanatory field input messages in an SCL program you just have to specify these messages in the Field Field Specifications of the appropriate field and enter the number of the Specifications field they should be displayed into in the Global Specifications of Global Specifications the format. Again, there is no logic required within the program itself for this feature to be incorporated. Appendix A, sample programs discussion page 198 Appendix A, sample programs discussion page 198 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Error Messages Error Messages System or user generated error messages are automatically displayed if the number of the field they should be displayed into is specified in the Global Specifications of the appropriate format. Global Specifications In case no error file (.ERR) exists, only the error number will be shown, otherwise the suitable message is displayed. What you could try : What you could try : 1. Run the program and see what it does. 2. Try to enter invalid data and see how the program reacts. 3. Load the format file into SFD and study the specifications of the three formats. 4. Run the program without the file SAMPLE2.ERR being available and see what happens if you make an input error. 5. Change the parameters 'Error Msg Field' and/or 'Input Msg Field' in the Global Specifications of the format 'ADDRESS' to 0 (zero) and run the program. See what happens. 6. Try to implement 'Field Help Screens' for 'ADDRESS'. 7. Allow the program to print up to 50 labels (25 is the current maximum). 8. Change some other Global SCL Parameters in the program, recompile and run it. 9. Add a field for the postal code on 'ADDRESS' and modify the program in such a way that it is printed on the label. Appendix A, sample programs discussion page 199 Appendix A, sample programs discussion page 199 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example 3 (OASIS Formats Stack) Example 3 (OASIS Formats Stack) ________________________________ This Program is a demonstration of the ability of SCL to stack formats. A format is pushed on the stack whenever a new format is loaded while the previous one is not yet finished. It is popped from the stack, i.e. restored as soon as the format on top of the stack is finished. In simple terms, this program works as follows: Load & Display format 'One'. Start handling format 'One'. Load & Display format 'Two'. Start handling format 'Two'. -- Keep doing the -- - same - - with formats - - 'Three' to 'Nine' - Load & Display format 'Ten'. Start handling format 'Ten'. Terminate format 'Ten'. Restore format 'Nine'. Continue handling format 'Nine'. Terminate format 'Nine'. -- and so on down -- -- to format 'Two'-- Restore format 'One'. Continue handling format 'One'. Terminate format 'One'. Terminate program. This means that while format ten is being loaded, nine unfinished formats are waiting in the stack to be continued. This may sound a lot, but SCL can simultaneously hold far more formats in its stack without any problems. There is no real limit apart from the size of your computer memory. If you should require more than 20 unfinished formats on the stack simultaneously, you must then adjust the Global Constant Global Constant 'Max_Heap_Screens' in SCL to reflect the required maximum number of formats. For guidelines to calculate the memory requirements of an SCL program please refer to 'System Resource Considerations' in the reference manual. Note: The above consideration only refers to the number of Note: unfinished Formats, formats that are finished before another format unfinished Formats is loaded do not take up any space on the stack. The Total Number of Total Number of Formats in a program is only restricted by your disk space capacity. Formats Appendix A, sample programs discussion page 200 Appendix A, sample programs discussion page 200 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Listing of SAMPLE3.PAS Listing of SAMPLE3.PAS PROGRAM Stackdemo; {$V-} {Disables LENGTH Checks FOR Strings} USES SCL; {invoke SCL} PROCEDURE Scl_Defaults; BEGIN; Beep_Time:=20; {Beep shorter} Auto_Help_Set:=FALSE; {No autohelp in this program} END; FUNCTION Up:BOOLEAN; BEGIN; Up:=FALSE; IF User_Function THEN {user function key pressed} BEGIN; IF (Active_Field = 1) AND {'Up' field} (Char_Code = Code_Return) THEN { wants to select field} BEGIN; Up:=TRUE; Char_Code:=Code_Noop; { SCL should not do anything} END { with this input character,} END; { i.e not mark the field as } END; { selected} PROCEDURE Do_Format(This_Name:String10;This_X,This_Y:INTEGER); VAR N, Next_Name:String10; Next_X, Next_Y :INTEGER; BEGIN; Select_Format(This_Name); {load it from disk} Display_Format(This_X,This_Y); {display it } Next_X:=This_X+2; {increase displacements} Next_Y:=This_Y+1; {for the next format to be loaded} REPEAT Handle_Format; {handle this format} IF Up THEN {user wants to go up} BEGIN; N:=Capital(This_Name); {capital letters} IF N = 'ONE' THEN Next_Name:='Two' ELSE {Which} IF N = 'TWO' THEN Next_Name:='Three' ELSE {format} IF N = 'THREE' THEN Next_Name:='four' ELSE {is} IF N = 'FOUR' THEN Next_Name:='Five' ELSE {the IF N = 'FIVE' THEN Next_Name:='Six' ELSE {next} IF N = 'SIX' THEN Next_Name:='Seven' ELSE {one} IF N = 'SEVEN' THEN Next_Name:='Eight' ELSE { ? } Appendix A, sample programs discussion page 201 Appendix A, sample programs discussion page 201 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual IF N = 'EIGHT' THEN Next_Name:='Nine' ELSE IF N = 'NINE' THEN Next_Name:='Ten'; Do_Format(Next_Name,Next_X,Next_Y); {Recursive} END; {call with new name and displacements} UNTIL Format_Done; {this format is finished.} END; {of Do_Format} BEGIN; {of main} Select_Format_File('Sample3'); {initialize SCL and load} {format file 'Sample2'} Scl_Defaults; {change some SCL defaults} Do_Format('one',0,0); {display&handle format 'one'} Close_Formats; {terminate SCL} END. {of main} Explanations of SAMPLE3.PAS Explanations of SAMPLE3.PAS The only new features in this sample program are a User Interrupt User Interrupt Procedure and the fact that a new format is called up while the old Procedure one is not yet finished. There is no need to emphasize how simply this can be achieved using SCL. User Interrupt Procedure User Interrupt Procedure We mentioned already in the explanations of Sample 1 that there were four conditions under which the procedure 'Handle_format' was exited. A User Interrupt Procedure is a user written routine which takes User Interrupt Procedure control at this point. To accomplish this, the appropriate routine (or a call to it) must be positioned within the format handling loop as follows: REPEAT Handle_Format; {---User Interrupt Routine----} UNTIL Format_Done; Hence the User Interrupt routine is always executed if User Interrupt routine 'Handle_Format' has been exited, i.e. one of the four conditions occurred. Among those four possible conditions one states that a User Function User Function Key has been pressed. Key This is actually the condition our user interrupt procedure is based on in this example. We want to interfere as soon as the program user tries to select field 1 (Up). In case field 2 (Down) is selected no action is taken and SCL terminates the format. (If no interference occurs in the case of field 1, SCL also automatically finishes the format since there are no further fields to be filled in). Appendix A, sample programs discussion page 202 Appendix A, sample programs discussion page 202 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The test pertaining to the occurrence of the above mentioned condition is performed by the boolean function 'Up'. Up returns TRUE if: 1. A User Function Key (in this case Return) was pressed and 2. field 1 (the 'Up' field) is currently selected. and 3. the current Input character (char_code) is 'Return'. If 'Up' is TRUE, the input character is replaced by a 'No-Op', which causes SCL to ignore it later on (SCL will then act as if the Return key was never pressed and consequently wait for User input). If this does not happen SCL would, as soon as it regains control, carry on from where it left off and consequently mark field 1 as 'Selected' before it automatically terminates the format. If 'Up' returns TRUE, a recursive call to 'Do_Format' is made and the whole process starts over again with the next format. If one format is finished, i.e 'Down' has been selected or F10 (Abort) has been pressed then SCL automatically restores the previous format from the stack. What you could try: What you could try: 1. Load the format file into SCL and study the specifications of one of the formats (they are all identical except format 'Ten', which does not have any fields). 2. Remove the statement 'Char_code:=Code_Noop;' from the function 'Up', recompile and run the program and see what happens. 3. Write your own program without recursion and with only 2 or 3 formats (you may use the format file from this example). Appendix A, sample programs discussion page 203 Appendix A, sample programs discussion page 203 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example 4 (OASIS Automatic Disk Menu) Example 4 (OASIS Automatic Disk Menu) ______________________________________ This example program is quite a useful DOS utility program. It displays all executable files of the current directory along with all subdirectories and the parent directory (if applicable) on a screen format. You can execute any program from the current directory or move to a different subdirectory by just pointing to it. When compared to the three previous examples, this one is fairly complex and employs a lot more SCL features. Despite (and maybe especially because of) the fact, that SCL has certainly not been designed to develop DOS utilities, this example demonstrates and highlights its tremendous power and flexibility. The main new features exhibited in this program are: - The 'Execute' and , 'ExecuteDos' routines. - Background processing. - More sophisticated User Interrupt Procedures. The relevant components of the program will be discussed in the following. The Procedure Menu The Procedure Menu This program only uses one Format and the procedure handling this format is called 'Menu'. It uses some advanced technics we have not covered yet. In the previous examples 'Display_format' was immediately called after 'Select_format' whereas here the format is first 'filled' before being displayed. The procedures involved in this task are 'Init_Dir_Search', 'Display_Files' and 'Tell_Result'. Apart from this, within the actual Format handling loop, you find a Format handling loop statement which invokes a User Interrupt Procedure ('Handle_Key') in User Interrupt Procedure case a User Function Key has been pressed. If the format has been User Function Key finished (and was not aborted), the procedure 'Do_Work' is executed. All the above mentioned procedures are described in detail on the following pages. Appendix A, sample programs discussion page 204 Appendix A, sample programs discussion page 204 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Init_Dir_Search Init_Dir_Search This procedure initializes the parameters for our Directory search. It sets the boolean variable 'First' to TRUE and the search mask to '*.*' (all files). Note: 'First' is a parameter for the directory search which if TRUE, Note: causes it to initialize a new search, i.e to find the first filename matching the specified mask. Once the first file has been found, it is set to false and subsequent searches will search for the remaining files. Display_Files Display_Files The first part of this procedure is a REPEAT..UNTIL loop which calls 'Dir'. If 'Dir' returns a result of 0 (zero), meaning that a filename matching the mask was found, the procedure 'Pick_it_if_we_need_it' is called, which determines whether this file is either an executable file or a directory entry. If this is the case, the file name is moved to the first available field and the field count is increased by 1. In order to determine whether the file found should be displayed on the format, we access the SCL variable 'Dta' (For details about the content of 'Dta' please refer to 'Advanced Programming Technics'in the reference manual). We exit the REPEAT..UNTIL loop under any one of the following two conditions: either the format is full or there are no more files matching the mask. In the latter case we reinitialize 'Dir' by calling 'Init_Dir_Search' again and we also blank the remaining fields on the format. In every case, we also make a note of the highest field on our format containing a filename entry. Now that's where the real tricky part starts: On this format we want to have two active fields at the same time, one being the field containing the filename to be executed and the other one where the optional parameters can be entered. SCL can only have one active field at a time, therefore we have to cheat somehow. One way to achieve this is to declare all the fields holding filenames (2 to 46) as 'Output' fields and manipulate these fields independent from the normal SCL field processing. This just leaves, what SCL concerns, field 49 as the only cursor accessible field on this format which is consequently active, i.e ready for input, anytime the format is displayed. In order to highlight the currently chosen filename field, we use the 'selected' field attribute. The procedure 'Handle_Keys', which monitors the 'arrow' keys, determines which filename is to be highlighted next and the highlighting itself is performed by the procedure 'New_Field'. Appendix A, sample programs discussion page 205 Appendix A, sample programs discussion page 205 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Handle_Keys Handle_Keys This procedure acts on all User Function Keys defined for this User Function Keys format. In case F9 is pressed, the field holding the currently highlighted filename is deselected and 'Display_files' is called to refill the format. In case the display of the current directory is not yet complete, ('first' is FALSE) the remaining entries are searched to be displayed now, otherwise a new search cycle is initiated to display the first page of file names. In case, one of the 'arrows' or 'Home' or 'End' is pressed we determine the next field (file name) to be highlighted and call 'Next_Field' to do it. The next two keys are only intercepted for user convenience: If 'Escape' is pressed, it is replaced by 'F10' (Abort) which subsequently causes the program to be terminated. If 'Return' is pressed and the parameter field (49) contains spaces this key is replaced by an 'Escape' character, which causes the format to be terminated instantly. The reason for this is that SCL would interpret 'Return' in this case as a command to switch field 49 to 'Edit Mode' and we would have to press 'Return' (or 'Escape') again to finish the format, therefore this manipulation saves the user an additional keystroke. With the exception of the last two cases we want SCL to ignore any other key depression by substituting 'No_Op'. New_Field New_Field This procedure is called with two parameters, the field currently highlighted (due to be deselected) and the new field (the one about to be selected, i.e highlighted). This task is performed by the first two statements. Once this is done, 'current field' matches the new field now being highlighted. In the same time frame three more fields need to be updated but instead of being processed here it is treated as a background task because another 'Arrow' key could also already be pressed. In this case priority is given to handle this key first before attempting to update any one of the three fields. By making this task a background job we ensure that it is only done when spare time is available, without delaying any pending keyboard input. In order to notify the Background processing procedure that updates Background processing procedure are to be carried out , three boolean flags are set, one for each field to be revised. Appendix A, sample programs discussion page 206 Appendix A, sample programs discussion page 206 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Do_Work Do_Work This procedure first fetches the file name from the field currently highlighted. In case of a directory entry it changes the current directory accordingly. If we are dealing with an executable file instead it first builds a string out of the filename (including path) and the parameter entry and then executes this file. Depending on whether it is an '.EXE' file or not, 'Execute' or 'ExecuteDos' is used. The reason for this is that all '.BAT' and some of the '.COM' files (mainly some external DOS commands) require COMMAND.COM to be present while '.EXE' files can be started directly. On return from the previously executed program, a check for successful execution is done and if this is the case a prompt asks the user to press 'Return' to go back to the menu program (The reason for not going directly back is to give him a chance to read the screen content). In case of problems during execution we directly go back to the menu program and 'Tell_Result' displays an appropriate error message. Tell_Result Tell_Result This procedure simply checks whether 'Execute' or 'ExecuteDos' caused a result code indicating an error. If an error occurred the relevant (user defined) error message is displayed in field 50 and a 'beep' is initiated. Note: More information on user defined error messages can be found Note: under 'Advanced Programming Technics'in this appendix. LP_Background_Task LP_Background_Task This is assigned as a SCL background Task via the 'LP_Background_Pointer:=@LP_Background_Task;' statement in the main body of the program. It is called by the SCL procedure 'Handle_Format' whenever there is no keyboard input pending and no other work needs to be done. This procedure is used here to update fields 46,47 and 49 after a different filename has been selected by the user. It is based on the simple principle that whenever the procedure is entered all three flags set by 'Next_Field' are checked. If one of these flags is found to be TRUE the pertinent update procedure is performed and the flag is then set to FALSE. The update procedures themselves are clear and easy to understand and therefore not separately described here. Appendix A, sample programs discussion page 207 Appendix A, sample programs discussion page 207 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Example 5 (OASIS SCL Demo) Example 5 (OASIS SCL Demo) ___________________________ This program is a little demo giving an overview on some SCL features. Although 14 different screen formats are handled it remains a rather simple program. It consists of a main menu proposing a selection of 8 different demos plus the possibility to terminate the program. In order to demonstrate background processing it also features a display of time and date on each format. The following is a detailed explanation of its various procedures. Menu Menu The Menu procedure is very straightforward. The menu format is processed using the very same basic Format Handling Loop already Format Handling Loop described in example 1. Once the format is finished, upon detection of the selected field the corresponding demo procedure is called up. In the case field 13 being selected, the boolean variable 'Progend' becomes TRUE which then causes the program to exit the REPEAT..UNTIL loop and subsequently terminates the demo program. The reason for using this boolean variable rather than 'UNTIL G_Sel(13)' is simple: Just imagine you would come from a demo format where field 13 was selected. Since R_Ptr would still point to this demo format, R_Ptr 'G_Sel(13)' would access field 13 on this format rather than on our menu. We must therefore make sure that we pass 'Handle_Format' (which adjusts R_Ptr to the menu again) before any attempt to read a field. This is realized by simply including the 'G_Sel' into our 'case' statement. Five out of the eight different demos are performed by just calling the procedure 'Do_Format' with the appropriate format name while the other three demos required some additional programming. 'Do_Format' is a simple procedure which selects a format, displays it and then handles it. In order to be able to blank the format when completed the User Interrupt Procedure monitoring 'End_Of_Format' is employed. The other three demos are a bit more complicated and will therefore be discussed in detail. Appendix A, sample programs discussion page 208 Appendix A, sample programs discussion page 208 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Country Demo Country Demo Country demo demonstrates SCL's capability to work with the DOS country information. When compared with 'Do_Format', the main procedure of country demo offers two additional features. The first procedure was added to set up the fields before the format was actually displayed on screen ('Update_Fields'). The second procedure acts on 'End_of_field'-User Interrupts. Interrupts Procedure Update_Fields Procedure Update_Fields This procedure accesses some of the Country dependent Information provides by SCL and writes it to the proper fields on the format. Please note that the numeric (integer) values are converted to strings using the 'St' function. Procedure Handle_End_of_Field Procedure Handle_End_of_Field This procedure is the actual heart of 'Country demo'. Below you can examine its listing. All programming details are discussed afterwards. PROCEDURE Handle_End_Of_Field; {user interrupt procedure} BEGIN; IF Active_Field = 4 THEN {new country code entered} BEGIN; IF G_Cont(4) > ' ' THEN {not blank} BEGIN; Scl_Country:=Nr(G_Cont(4)); {move it to SCL_Country} Get_Country; {get country information} IF (Country <> Scl_Country) AND (Scl_Country > 0) THEN BEGIN; {invalid country code was entered} Glb_Error:=24; {error number to SCL} Scl_Country:=Nr(G_Cont(5)); {restore old country} Get_Country; {get country info} END ELSE {country code was valid} Update_Fields; {display new country info} END; END; END; Appendix A, sample programs discussion page 209 Appendix A, sample programs discussion page 209 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The first two 'IF' statements ensure that we are in field 4 and that this field contains data. If this is the case, the content will be read, converted to an integer and placed into 'SCL_Country'. We then call the SCL procedure Get_Country' which accesses the DOS country information and updates the relevant SCL variables accordingly. 'Get_Country' acts as follows: If 'SCL_Country' contains 0 (the default value) it borrows the country information according to the setting of your computer (Country=xxx statement in CONFIG.SYS). If SCL_Country contains any other value (a Country-code) then SCL is set up according to this code. Once 'Get_Country' has been called, a check for country code validity is performed. It is valid when either the value returned in 'Country' is equal to 'SCL_Country' or if 0 was specified for 'SCL_Country'. In case of invalid country code, the one previously used is restored from field 5 (we wrote it to this field in 'Update_Fields'), and 'Get_Country' is called again with this latter value in 'SCL_Country' to restore the variables in SCL back to valid information. In addition, 'Glb_Err' is set to an error number pointing to a message in SAMPLE5.ERR stating that an invalid country code was entered. Since 'Glb_Err' returns a value different from 0 (zero), 'Handle_Format' will enter its input error routine, beep, display the error message and also refuse the attempt to leave field number 4 until a valid country code is keyed in. In case of a valid code 'Update_Fields' is called once more to write the new information into the corresponding fields. Note: Further details about user generated error messages and the Note: use of 'Glb_Err' can be found in this appendix. Appendix A, sample programs discussion page 210 Appendix A, sample programs discussion page 210 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Date Demo Date Demo Date Demo demonstrates most of the date/time routines in SCLn With the exception that the field update procedure is called 'Prefill' here, the main procedure of 'Date_Demo' is identical to the one described in 'Country_Demo'. However both 'Prefill' and the user Interrupt Procedure contain a user Interrupt Procedure great number of new constructs which will be discussed in the following pages. Prefill Prefill This procedure fills some fields with information about todays date. First, the SCL routine 'Get_Date' is called to retrieve todays date as integer values. Then the 'day of week' value is converted to the actual name which is effectively written to field 4. The date is then converted into a julian date. Since the function 'St' cannot be used with REAL numbers, 'STR' is used instead to convert the julian date to a string before it finally can be written to field 5. Handle_End_of_Field Handle_End_of_Field User Interrupt Procedure is invoked whenever a 'End_of_Field' Interrupt Procedure condition occurs and also in the case of fields 6 and 15. Field 6 is the one where the user can enter a date. Upon leaving this field, a check for data entry is performed and if something has been keyed in the following occurs: The procedure 'Check_Date' checks the date entered for validity and converts it to three integers for year, month and day. (Please note, that the date is checked according to the country information currently used. In the case of USA (1) the date is interpreted as MMDD whereas for most other countries it is DDMM). If the date entered is invalid, 'SCL_Err' is set to point to a user defined error message in SAMPLEu.ERR, which causes SCL to display this message, beep and to reject the attempt to exit this field. In addition to this, fields 7 to 14 are blanked out. If the date entered is found valid, the procedure 'Update_User_Date' is called which in turn does some calculations and writes the results to fields 7 to 14. For field 15 the process is similar, in this case the user is supposed to enter a valid time and if he does so, 'Up date_User_Time' is called to analyze the time entered and to write appropriate information to fields 16 to 19. If the time entered is invalid, a sequence identical to the one described for the date takes place, the only difference being the error message. Appendix A, sample programs discussion page 211 Appendix A, sample programs discussion page 211 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Update_User_Date Update_User_Date This procedure uses most of the SCL date related routines. It first writes the values for day, month and year of the date in field 6 (and decoded by 'Check_Date') to fields 7, 8 and 9. Then these three values are converted into a date string by 'Date_String' and written to field 10. The julian date is calculated, converted to a string using 'STR' (St cannot be used for REAL numbers, only for Integers) and written to field 11. After this, the number of days between today and the date entered is calculated by simply subtracting them from each other and converting the result to a positive number. This value is written to field 12. The procedure 'weekday' is used to calculate the 'day_of_week'. The result, an Integer number between 0 (sunday) and 6 (saturday) is then converted into the matching day name and written to field 13. 100 days are then added to the julian date, the result is converted back into year, month and day via the procedure 'Normal_Date', formatted with the function 'Date_String' and finally written to field 14. Update_User_Time Update_User_Time This rather simple procedure converts the integer values for hours, minutes and seconds of the time entered into field 15 to strings and writes them to fields 16, 17 and 18. These values are then converted to a formatted time string by the function 'Time_String' and written to field 19. Appendix A, sample programs discussion page 212 Appendix A, sample programs discussion page 212 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Special Fields Demo Special Fields Demo Main procedure Main procedure This procedure is identical to those used for the 'country' and 'date' demos with one exception however; it embeds an additional User User Interrupt Procedure, which monitors the keyboard keys. This User Interrupt Procedure User Interrupt Procedure, 'Handle_User_Function' is probably the most Interrupt Procedure interesting part of this demo because it reveals some useful tricks which you will find most helpful when writing your own application programs. Handle_User_Function Handle_User_Function This procedure deals with fields that have the 'Char Check' field attribute set to TRUE. It is therefore executed whenever one of these fields is active and any keyboard key is pressed. Each field will be discussed separately. Note: The reason for using 'Char Check' here is quite simple: in Note: this demo we have to take into consideration far more keys than the maximum number that can be specified as 'User Functions' on one format (10, plus any of the function keys). In a real world program it would probably be preferable to specify 'User Function Keys' because, beside the fact it is faster ('Handle_Format' is not interrupted for each single key) it also can save you programming work since you would know that the key pressed must belong to the specified set. Field 5 If the input key is a 'Space' the content of the field is changed to something else. In this example we only use three different possibilities but in a user program it could also be any other number. This field shows a nice way to make programs more userfriendly which, in many cases can also save an additional menu. Field 6 While this field is active we check if one of a specified set of keys has been pressed, and if this was the case, an appropriate string is written into the field. This construction can equally be used in the same manner as the one demonstrated with field 5. Appendix A, sample programs discussion page 213 Appendix A, sample programs discussion page 213 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Field 7 When active this field displays the ASCII Code of each key pressed with the exception of 'Return' which moves us to the next field. The SCL internal character code notation is as follows: if the key creates a two byte code (an ASCII Code preceded by a 'ESC' character), 1000 is added to it, otherwise the normal ASCII value is kept. Field 8 The handling of this field is simple, each input character (if it is not a 'two byte key') is converted to upper case and then displayed. This can be useful in many application programs as well. Note: In all cases, where you don't want SCL to take any action on a Note: character, simply replace it by 'Char_NoOp'. SCL will then just ignore it. Handle_End_of_Field Handle_End_of_Field This procedure monitors field 4 and checks whether it is selected or not. If selected it writes 'Yes' to its content, otherwise 'No'is written. Similarly the same method can be used in all cases where the objective is to display the state of a field with text rather than with a display attribute. Background Processing Background Processing The capability to support background processing is one of the most powerful features of SCL. In this example program it is used to display the time and the date (obviously, you can do a lot more with it). In this example program the current date and time are displayed in two fields on each format and 'LP_Background_Task' is used to update these fields constantly. 'LP_Background_Task' simply checks whether the actual time and date is still reflected by the content of the two fields and if this is not the case, updates them. Appendix A, sample programs discussion page 214 Appendix A, sample programs discussion page 214 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Appendix A, sample programs discussion page 215 Appendix A, sample programs discussion page 215 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Screen Control Language The Screen Control Language (SCL) (SCL) SCL System Details SCL System Details OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Service Routines Service Routines Interrupt Service Routines are routines which are called to handle events within your computer. They are normally located in the computers BIOS (Basic Input Output System). A user program can take over the handling of interrupts. This is accomplished by placing the address of its own interrupt routine into the BIOS Interrupt Vector table. SCL takes control of two interrupts with its own routines: The clock tick interrupt (Interrupt 1CH) The clock tick interrupt (Interrupt 1CH) This interrupt is called by the BIOS time handling routines (Hardware Clock) 18.2 times per second (about once every 55 milliseconds). Every time Interrupt 1CH is called by the BIOS, control is passed to the routine 'Clock_ISR' in SCL which then performs the necessary SCL internal functions before control is returned to BIOS. These functions are to control the duration of the 'Beep' Sound and the field blinking frequency (see also the description of 'Blink_Count'). By using an Interrupt service routine instead of a normal SCL procedure to manage these tasks it is ensured that they are performed entirely independantly of the logic of your application program and SCL itself. Hence a lot of unnecessary overhead is avoided because instead of waiting for an event, SCL can perform other functions. Consider the following example of a typical 'Beep' routine: PROCEDURE Do_Beep; BEGIN; SOUND(500); DELAY(250); NOSOUND; END; If SCL was programmed like this, one would have to wait 250 milliseconds for this routine to exit without being able to do anything else. This would not only slow down the program considerably but it would also make background tasks like datacom etc.. virtually impossible. For this reason, the 'Beep' routine in SCL looks in principle as follows: PROCEDURE Beep; BEGIN; SOUND(Beep_Frequency_1); Beep_Counter:=Beep_Length; END; Appendix A, SCL system details page 217 Appendix A, SCL system details page 217 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Instead it is left to 'Clock_ISR' to decrement 'Beep_Counter' and to issue a 'NOSOUND' when the counter has reached 0 (zero). 'Clock_ISR' is installed by the routine 'Get_Clock_Tick' which is called by 'Select_Format_File' during the initialization of SCL. It is deinstalled (the pointers in the BIOS Interrupt Vector Table are restored to their original values) by either 'Close_Formats' or, in case of an error, by 'Fatal_SCL_Error'. The Data Communications Hardware Interrupt (Interrupt 0CH) The Data Communications Hardware Interrupt (Interrupt 0CH) This interrupt is handled by a SCL Interrupt Service routine in case your program involves data communications. It is a Hardware Interrupt signalling several conditions on the asynchronous communications port (COM1:). SCL uses this interrupt in its 'Low Level' data communication system to recognize if a character has been received on the RS232 interface and to read this character into its receive buffer. For further information on SCL's Data communications routines please refer to Appendix B. Note: Do not call a Interrupt Service Routine directly from your Note: program because it could hang the system and make a reboot necessary. The same applies for the ISR installation and deinstallation routines. Appendix A, SCL system details page 218 Appendix A, SCL system details page 218 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Background Processing Tasks Background Processing Tasks SCL provides two 'userhooks' for background processing tasks, one referred to as 'Low Priority' and the other as 'High Priority'. SCL provides these 'userhooks' in form of two pointer-variables, 'LP_Background_Pointer' and 'HP_Background_Pointer'. The Procedures these pointers point to are performed by SCL as Background Tasks. If SCL is initialized, both pointers point to dummy procedures within SCL which only contain a begin-end statement. These pointers can be redirected by you to point to any other procedure which is subsequently performed as background task by SCL. You can basically specify any procedure as a background task as long as you follow a few rules: The procedure may not contain any statements which could cause to wait it on an event, like for example 'keypressed'. A Background Procedure must be compiled with the 'Force far calls' option active ( {$F+} ). Both Background Tasks are being called from within the SCL procedure 'Handle_Format'. 'Handle_Format' is event driven. This means that a loop containing several conditional statements is continuously executed and whenever one of the these conditions becomes TRUE the appropriate task is performed. In addition to the background procedures, the other tasks are reading the keyboard if a key is pressed, processing an input character and updating field attributes. The logic within this loop is as follows: 1. Start 2. Perform the High Priority background task (unconditionally, once per loop). 3. If a key is pressed then read it into the keyboard buffer otherwise, 4. If a character is still being processed then carry on processing it (processing a single character takes between 2 and 4 loops depending on its type) otherwise, 5. If the keyboard buffer is not empty then fetch the next character otherwise, Appendix A, SCL system details page 219 Appendix A, SCL system details page 219 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual 6. Perform the Low Priority Background Task and, if a field attribute needs to be updated then update it. 7. Go to Start. As you can see, the High Priority Background Task is executed unconditionally in every loop and the Low Priority Background Task is executed only in case no keyboard input is waiting to be processed. Due to the dynamic nature of such a loop, no exact figures can be given on how often the Background Tasks are executed. As a rule of Background Tasks thumb, on a plain PC (4.77 Mhz) HP_Background_Task is executed about 1300 times per second and in a fast AT as much as 10000 times per second (assuming that the processing time required for the background task itself is negligible). The figures for Low Priority Background Tasks are roughly the same if the system is idle (typically most of the time) but can dramatically drop at times of heavy activity. There are certain rules you should follow if you use Background processing in order to avoid slowing down a program: 1. Split any task into as many subtasks as possible, for example, if you want to write output to a printer, write one character at a time rather than the whole line. 2. Exit the Background Task procedure as quick as possible if no work has to be performed (Preferably use the 'Exit' statement). 3. Use High Priority Background tasks only when you have to. Most jobs can well be accomodated with Low Priority. 4. Don't use any statements in a background procedure which wait on an event like 'Repeat until keypressed' or 'Delay(n)'. 5. If you use a High Priority Background Task, its execution time should typically not exceed a few milliseconds, otherwise you may slow down your program dramatically. The following is a short example intended to give you an idea how to use 'Background Tasks'. Further examples can be found in some of the 'Sample' programs, namely SAMPLE4.PAS, SAMPLE5.PAS and SAMPLE7.PAS. Appendix A, SCL system details page 220 Appendix A, SCL system details page 220 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Program EXAMPLE; uses Printer,SCL; {$F+} {Force far calls} Procedure My_Background_Task; {prints asterixes on printer while} begin; {format is being handled} write(lst,'*'); end; {$F-} {reset far calls} Procedure do_format; begin; select_format('main'); display_format(0,0); repeat handle_format; until format_done; end; begin; select_format_file('myformats'); lp_background_pointer:=@My_Background_Task; {assigns it as LP } Do_Format; { background task} Close_formats; end; Appendix A, SCL system details page 221 Appendix A, SCL system details page 221 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual READING AND WRITING FIELDS READING AND WRITING FIELDS For a better comprehension of the mechanisms that govern the handling of formats the following scenario will be used as working platform: 1. Select format A and display it on the screen. 2. Select format B and display it on top of format A. 3. Exit format B restoring format A in its integrity on the screen. 4. Exit format A 5. Select format C and display it on the screen. 6. Exit format C. For each step a status of the various pointers is given along with any relevant annotation. Select_Format_file('thisfile'); ** STEP 1 ** ** STEP 1 ** The format stack is still empty and all S_Ptr, R_Ptr, W_Ptr do not point yet to any valid format. In other words no field can be accessed, whether read or written at this point in time. Select_Format('A'); Format 'A' is loaded into record 1 of the format stack. Both S_Ptr and W_Ptr point to this record and take 1 for value. From now on it is possible to write to format 'A'. However read of format 'A' is still not possible since R_Ptr does not point yet to a valid format. Display_format(0,0); This statement does not affect the value of the pointers. Repeat Handle_Format; This is where R_Ptr is adjusted making a read from format 'A' possible. All three pointers are now pointing to format 'A' and have a value of 1. Select_Format('B'); ** STEP 2 ** ** STEP 2 ** A second format is now selected coexisting with format 'A' which remains on the stack with entry number 1 while format 'B' is loaded to the top of the stack assigned to record number 2. As a result both W_Ptr and S_Ptr point to format 'B' and have 2 for value while R_Ptr is still looking at format 'A' with its value remaining unchanged (1). For this reason the construct W_Cont(5,G_Cont(4)); is interpreted as read the content of field 4 of format 'A' and place it into field 5 of format 'B'. By manually altering the W_Ptr value (ie. 'W_Ptr:=1') it is still possible to write to format 'A' should you fancy it. Display_format(0,0); Pointers keep their previous value. Repeat Handle_Format; All three pointers are now pointing to format 'B'. UNTIL Format_Done; ** STEP 3 ** ** STEP 3 ** This statement finishes format 'B' letting SCL restoring format 'A'and implicitly having both S_Ptr and W_Ptr point to format 'A' with a value of 1 again. R_Ptr however is still pointing to format Appendix A, SCL system details page 222 Appendix A, SCL system details page 222 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual 'B' keeping its value unchanged (2). The construct 'W_Cont(5,G_Cont(4)); would now mean: read the content of field 4 of format 'B' and place it into field 5 of format 'A'. UNTIL Format_Done; ** STEP 4 ** ** STEP 4 ** This finishes format 'A' and both W_Ptr and S_Ptr do not any longer point to a valid format and have 0 for value. The R_Ptr however still point to format 'A'. The construct 'WrkStr:=G_Cont(5) would then read the content of field 5 on format 'A' into WrkStr. Although both formats are now finished, this does not mean that they were destroyed but still remain in the stack. For that matter a manual manipulation of R_Ptr is genuinely possible and effective (ie. 'R_Ptr:= 2'; to point to format 'B'. Select_Format('C'); ** STEP 5 ** ** STEP 5 ** This loads format 'C' to record 1 of the format stack physically overwriting format 'A' previously sitting there. Both S_Ptr and W_Ptr point to format 'C' taking 1 for value while R_Ptr does not point to any format any longer and becomes 0. Display_format(0,0); The pointers are not affected. Repeat Handle_Format; Now all three pointers point to format 'C' and have a value of 1. UNTIL Format_Done; ** STEP 6 ** ** STEP 6 ** At this moment both S_Ptr and W_Ptr no longer point to a valid stack record and have the value 0. R_Ptr however still points to format 'C' and keep its value of 1. The stack itself has format 'C' in record 1 and format 'B' in record 2. Any subsequent format would load on top of format 'C'. As seen in this scenario, unfinished formats always remain in the stack while finished formats stay in the stack until they are overwritten by new formats. While a format is still in the stack, its content can always be accessed by manual modification of the appropriate pointer to the desired record number. Appendix A, SCL system details page 223 Appendix A, SCL system details page 223 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL Input Character Processing SCL Input Character Processing All Input Character processing in SCL is done by 'Handle_Format'. The sequence of events is as follows: 1. Read a Character from the Input Buffer into 'Char_Code'. Then go to 2. 2. If Char_Code is specified as a User function Key in this format User function Key or if Char Check is specified for the active field then set Char Check 'User_Function' to TRUE and exit 'Handle_Format' and go to 3 upon return; otherwise go directly to 3. 3. If 'Glb_Err' > 0 or char_Code = NoOp then discard Char_code and go to 1; otherwise if Char_Code is invalid then perform the input error routine and then go to 1; otherwise go to 4. 4. If this character is to be displayed, display it and then go to 1; otherwise go to 5. 5. If Char_Code is a 'Help' key then perform the appropriate Help routine and then go to 1; otherwise go to 6. 6. If Char_Code terminates the current field then perform the internal validity check as specified for this field. In case of failure perform the error routine, discard the character and go to 1; otherwise set 'End_of_Field' to TRUE, exit 'Handle_Format' and go to 7 upon return. 7. If Glb_Err > 0 then perform the error routine, discard the character and go to 1; otherwise, if char_Code = NoOp then go to 1; otherwise terminate the field and go to 8. 8. If this character terminates the format as well then go to 10 otherwise go to 9. 9. Determine the next field and initialize it (make it the 'Active Field'). Then set 'Begin_of_Field' to TRUE and exit 'Handle_Format. Upon return go to 1. 10. Perform the internal format end check (all mandatory fields filled in). If this fails, perform the error routine, discard the input character and go to 1; otherwise set 'End_of_Format' to TRUE and exit 'Handle_Format'. Upon return go to 11. 11. If 'Glb_Err' > 0 then perform the error routine, discard the input character and go to 1; otherwise if Char_Code = NoOp then go to 1; otherwise terminate the format. Appendix A, SCL system details page 224 Appendix A, SCL system details page 224 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Error Message File The Error Message File The file .ERR is the only SCL file not automatically created by SFD. It is a simple ASCII text file and can be modified with most word processors (or Turbo Pascal, for example). The first 21 records and records 36 to 39 are occupied by SCL internal error messages, all other records are available for your own use. You find a 'virgin' errorfile only containing the SCL internal error messages on your distribution disks under the name 'SCL.ERR'. The contents of SCL.ERR is also listed in Appendix B. You can simply copy this file to .ERR and then add your own messages as required. The records may contain any text and are not bound to a special format. The only limitation is that their maximum length may not exceed 70 characters. On top of SCL internal error messages, this file can be used to store your own error messages as well as any other strings you may require in your program. All you have to do to display a specific message in the event of an error occuring while processing a format is to set 'Glb_Err' to the appropriate record number. If you just want to access a string stored in the error file you can use the SCL function 'Sys_Msg'. Since during execution of an SCL program, all records of this file are stored in the heap memory, access to them is very fast. Please note that an error file is optional for an SCL program. If it is not found during the initialization of SCL, the appropriate record spaces in the heap are initialized with just their corresponding record number which will then be displayed should an error be found. Example: Example: Select_Format('X'); W_Cont(2,Sys_Msg(18)); {writes content of record 23 to field 2} Display_Format(0,0); REPEAT Handle_Format; IF End_of_Format THEN IF not (G_CONT(1) in ['A'..'D','a'..'d']) THEN Glb_Err:=43; {SCL will execute its error routine and} {display the string stored in record 43 in} {the error message field, the attempt to} {terminate the format will be refused} UNTIL Format_Done; Note: See also Programming sample 4, 'Tricks & Tips' and 'System Note: Resource considerations'. Appendix A, SCL system details page 225 Appendix A, SCL system details page 225 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual SCL - System Resource Considerations SCL - System Resource Considerations Disk Access Disk Access SCL reads its formats from disk. This process can be speeded up considerably by including a 'BUFFERS=NNN' statement into the CONFIG.SYS file. It is recommended to set the number of buffers to at least 20 on computers running SCL programs. Another effective way is the use of a RamDisk or, preferably, a Disk Cache Software (for example 'Lightning' from PCSG Inc). Processor Requirements Processor Requirements SCL performs well on any compatible PC system. Due to a highly optimized program layout, the speed differences to be expected between a 8088 and a 80286 based system are relatively small if compared with some other programs. The performance of an 8088 System running an SCL program can be increased considerably by exchanging the 8088 processor against a NEC V20. The V20 features, beside being fully compatible with the 8088, a highly optimized string handling which results in about 20 % performance improvement if used with SCL programs. Format File -Disk Space Requirements Format File -Disk Space Requirements The format file occupies 4608 bytes per format. This means that a 360 KB Floppy can hold a format file with up to 79 formats. The other SCL files are relatively small and typically only take up a few kilobytes all together. SCL Code Space Requirements SCL Code Space Requirements SCL takes up about 15 to 35 KB of space in the code segment (Dependent on the number of SCL routines you use). SCL Data Space Requirements SCL Data Space Requirements SCL stores most if its informations in the Heap, therefore the actual space required in the data segment is relatively small. It depends largely on whether Datacom is used or not and is typically between 3.5 KB (no datacom) and around 10 KB if datacom is used. Within the heap memory, the static space required by SCL is about 12 KB plus the size of the file ".MSG". In addition to the static space, SCL`dynamically allocates during program runtime 4.6 KB for every format required to be stacked (refer to SCL Details for more informations on the format stacking mechanism). Appendix A, SCL system details page 226 Appendix A, SCL system details page 226 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The heap shares its space with the program stack. There is no exact way to predict the size of the stack required for a program. It largely depends on the program's logical structure, especially if recursive routines are used. The only way to find it out is by 'trial and error', i.e by decreasing it until the program does not run anymore. Total Memory Requirements Total Memory Requirements Example1: A small SCL program with about 5 to 10 screen formats, no Example1: datacom and 100 field input messages. Format stacking is assumed to occur to up to 3 levels, i.e max 3 unfinished formats can be on the stack while a fourth one is being processed. Example2: A very large program with 50 to 100 screen formats, 500 Example2: field messages, datacom and extensive data space requirements. Up to 10 formats are assumed to be stacked on the heap. The code and data requirements quoted represent the maximum values allowed in Turbo Pascal programs. The approximate total memory required to run the above two example programs can be roughly calculated as follows: Example1 Example2 ----------------------------------------------------------------- Code space (approx) ............................. 50 KB 90 KB Data space (approx) ............................. 10 KB 64 KB Program Stack (approx) .......................... 5 KB 40 KB Heap space (static) ............................. 12 KB 12 KB Heap space (field messages) ..................... 7 KB 36 KB Heap space (format stacking) .................... 14 KB 46 KB Static space required by DOS (approx) ........... 35 KB 35 KB ----------------------------------------------------------------- Minimum total memory required to run (approx) .. 133 KB 323 KB Example 1 could run in a 256 KB system with no problems and would Example 1 even permit another 90 KB of memory to be used for a Ramdisk or another memory resident program. Example 2 could just run on a system with 384 KB of memory. Example 2 Note: The above figures represent only coarse guidelines assuming Note: two typical examples. The exact requirements of a specific program are influenced by many different factors and may deviate from these examples quite considerably. Appendix A, SCL system details page 227 Appendix A, SCL system details page 227 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Tips & Tricks Tips & Tricks Entry of Characters not normally accessible via the keyboard Entry of Characters not normally accessible via the keyboard During the design of a format layout it is possible to redefine any keyboard key to any other character by using SFD's keyboard redefinition feature. Outside of the Layout Designer, such a feature does not exist. If you have to enter such a character outside the layout designer (for example to define a graphic character as a field delimiter), you can use a BIOS feature: Press the 'ALT' key, hold it down and key in the ASCII`value of the desired character in decimal, then release 'ALT'. This feature works on most 'compatible' machines and you can use it in many other programs as well. Blinking Fields Blinking Fields In case you use the 'Blink' field attribute set the SCL Constant 'Timer_Intervall' to a very low value. Fast blinking fields are much easier on the eyes than slow blinking ones. In general, for ergonomic reasons, try to avoid blinking fields at all whenever possible. Use of the 'Intensity' field attribute on Color systems Use of the 'Intensity' field attribute on Color systems If you use the 'Intensity' attribute together with 'Invert' to mark a field 'active' careful selection of the field background color can lead to interesting effects. If you assume for example 'Brown' as the background color this will lead to 'Yellow' foreground if the field becomes active. The 'Selected' Attribute in Menus The 'Selected' Attribute in Menus If a format only contains one group of 'Constant fields' like a typical menu, don't be concerned about any 'Selected' attributes since this format will instantly be terminated as soon as a field has been selected and for this reason it would never be visible anyway. Probably the nicest combination for such a field is to select 'Inverted' for active fields and no attributes at all for 'Selected'. Appendix A, tips and tricks page 228 Appendix A, tips and tricks page 228 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Preventing automatic termination of a format Preventing automatic termination of a format In some cases it may be desirable to prevent a format from being automatically terminated after the last field has been filled in. To achieve this, just add another field (A Constant) after the last field and ask the user via a message to press 'Return' to end the format (See Sample5). Highlighting text on screen formats Highlighting text on screen formats You can simply highlight text on a format by declaring this area of text as an 'output' field, then specify the field as being selected and choose the appropriate 'Selected' attributes according to the appearance you desire. If you want to switch the highlighting on and off while the format is being displayed, just use the 'W_Sel' construct. Special Fields Special Fields See Programming sample 5 for some suggestions and ideas. Storing strings in .ERR Storing strings in .ERR It is good practice to store text strings in the error message file instead of hardcoding them into the program itself. Any text stored in the error message file can be easily modified without recompiling the program which makes customization and/or nationalization much easier. Any strings stored in the error message file can be accessed using the function 'Sys_Msg'. Appendix A, tips and tricks page 229 Appendix A, tips and tricks page 229 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Using Field Input Messages for Help Screens Using Field Input Messages for Help Screens Especially on small formats it is not always possible to display field input messages. Using a 'User Interrupt Procedure', you can display these messages in an own format whenever for example 'F2' (Field Help) is pressed. This works as follows: Design a small format with just one 'output' field big enough to hold the field input message (70 characters long). Write a procedure similar to the following (assuming you named the above format 'Msg'). PROCEDURE Msg_Help; {Loads format 'Msg' and displays the Field} BEGIN; {Msg of the present field in it if F2 is pressed} IF User_Function_Key and Char_Code = Code_F2 THEN BEGIN; WITH Stack[S_Ptr].Field[Active_Field] DO BEGIN; IF (Field_Msg_Nr > 0) AND {a msg for this field exists} (Input_Msg_Nr = 0) AND {no field to display it} (Field_Help_Screen <= Spaces THEN {none defined} BEGIN{ Select_Format('Msg'); W_Cont(1,User_Msg(Field_Msg_Nr); {obtain the Msg} Display_Format(0,0); REPEAT Handle_Format UNTIL Format_Done; Char_Code:=Code_Noop; END; END; END; END; To use this feature declare the trigger key (here 'F2') as a user function key in all formats. Within your program, make a call to 'Msg_Help' in the format handling loop as follows: REPEAT Handle_Format; Msg_Help; {other optional interrupt handling statements} UNTIL Format_Done; This results in the following: Whenever the trigger key is pressed and a message is defined for the current field and if that format does not contain a message field and no help screen is defined for the current field then the format 'Msg' is called up displaying the message defined for the current field. Appendix A, tips and tricks page 230 Appendix A, tips and tricks page 230 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Using 'Goto_Field' Using 'Goto_Field' Sometimes it is desirable to skip one or more fields depending on a certain entry. For example, let's assume you have a format where you want to skip fields 5 and 6 if field 4 contains 'N'. This can be easily realized using 'Goto_Field' as the following example shows. REPEAT Handle_Format; IF end_of_field THEN BEGIN{ IF (Active_Field = 4) AND G_Cont(4) = 'N' THEN BEGIN; Goto_Field(7); Char_Code:=Code_Noop; {must do this because otherwise} END; {we would leave field 7 again} END; UNTIL Format_Done; Appendix A, tips and tricks page 231 Appendix A, tips and tricks page 231 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Appendix B Appendix B OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual This Page is intentionally left blank Appendix B, SCL procedures & functions page 233 Appendix B, SCL procedures & functions page 233 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Alphabethic List of all User accessible SCL Procedures & Functions Alphabethic List of all User accessible SCL Procedures & Functions Explanation of symbols used. Explanation of symbols used. + Full explanation in the SCL part of this manual. + Full explanation in the SCL part of this manual. * Usage possible. See text. * Usage possible. See text. / Usage possible but restricted. See text. / Usage possible but restricted. See text. F Function F Function P Procedure P Procedure + P Beep; + P Blank_Format; + F Capital(Wrkstr: String): String; + F Charstring(Whatchar:CHAR;Len:INTEGER):String; + P Check_Date(VAR Date_Str:String10;VAR Y,M,D:WORD); + P Check_Time(VAR Time_Str:String10;VAR H,M,S:WORD); + P Clear_Rx_Buffer; + P Close_Dc; + P Close_Formats; + F Cts:BOOLEAN; * P Cursor(Top,Bottom:byte); Sets cursor shape * P Cursor_off; Makes Cursor invisible + P C_Cont(Fieldnr:INTEGER); + F Date:String10; + F Date_String(Y,M,D:WORD):String10; * P DC(X,Y,Charcode:Byte); Writes Charcode at screen pos X,Y. * P Dc_Break; Sends a 'Break' onto the datacom line. + P Dc_Diagnose(On:BOOLEAN); + P Dc_Write(Code:Byte;VAR Ok:BOOLEAN); + P Disable_Port; + P Display_Format(Xoffset,Yoffset:INTEGER); + P DosExecute:String128); * P Draw_Char(Charcode:Byte); Writes Charcode at current pos on screen. + F Dsr:BOOLEAN; + P Enable_Port; + F Environment(Env_Name:String128):String128; + P Execute(Progstring:String128); + F Exist(Fn : String80):BOOLEAN; * P Fatal_Scl_Error(Errornr:INTEGER); Displays error msg and halts SCL. Dont use Errornr < 4, these are for internal use only. + P Finish_Format(Check:BOOLEAN); + F Format_Done:BOOLEAN; Appendix B, SCL procedures & functions page 234 Appendix B, SCL procedures & functions page 234 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual * F Format_Name:string80; Returns the name of the active format + P Frontstring(STR:String;VAR Head,Tail:String); * P Ftab(VAR Wrkstr:String;Fill_Char:CHAR; Just:Position;Len:INTEGER); Justifies Wrkstr in a field of length Len according to Just. All blanks are replaced by Fill_Char. See declaration of type Position. / F Get_Att(X,Y:INTEGER):Byte; Returns video attribute of position X,Y. X=1..80, Y=1..25. * P Get_Country; Updates Country dependant Info. If SCL_Country > 0 then Info is updated accordingly, otherwise according to CONFIG.SYS. + P Get_Dc_Status(VAR Status:INTEGER); / P Get_Next_Char(VAR Charnumber:INTEGER ; VAR Inputchar:CHAR); Waits until a key is pressed and returns Code and Image of the key. Code is SCL notation. Don't use together with background processing (you're stuck until a key is pressed). * P Get_Screen_Mode; Sets the variables Screen_Mode, Mono_Adapter and Color_True according to the current screen mode used. + P Goto_Field(Fn:INTEGER); + F G_Cont(Fn:INTEGER):String80; + F G_Sel(Fn:INTEGER):BOOLEAN; + P Handle_Format; + P Hp_Background_Task; FORWARD; * P Input_Error(Msgnr:INTEGER); Displays error msg in Err msg Field and beeps. + F Julian_Date(VAR Y,M,D:WORD):REAL; + F Justify_Center(STR:String;Len:INTEGER):String; + F Justify_Left(STR:String;Len:INTEGER):String; + F Justify_Right(STR:String;Len:INTEGER):String; / F Next_Char(VAR Esc:BOOLEAN):CHAR; Waits until a key is pressed and returns ASCII Code. If key generated a two byte code then 'Esc' is true. See 'Get_Next_Char' for restrictions. + P Normal_Date(Julian:REAL;VAR Y,M,D:WORD); + F Nr(St:String80):INTEGER; + P Open_Dc(VAR Result:INTEGER); / P Paint_Format_Frame(Color:Byte); Changes video attr. of first and last row and column of current format to color. S_Ptr must be valid ( > 0). + F Power(Mantissa,Exponent:REAL):REAL; + P Receive_Char(VAR Code:INTEGER;VAR Ok:BOOLEAN); + F Ri:BOOLEAN; + F Rnr(s:string80):real; + F Rst(r:Real;Decimals:integer):string; * F Rtime:REAL; Returns current time in hundreds of seconds since midnight. Appendix B, SCL procedures & functions page 235 Appendix B, SCL procedures & functions page 235 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual + P R_Cont(Fieldnr:INTEGER;VAR Contents:String80); + P R_Sel(Fieldnr:INTEGER; VAR Sel:BOOLEAN); + P Select_Format(Fname:String10); + P Select_Format_File(Filename:String10); + PSend_Buffer(VARTx_Buff;Buff_Start,Buff_Length,Bcc_add :INTEGER; + P Send_Char(Code:Byte;var Ok:BOOLEAN); + P Send_String(Data:String255;VAR Ok:BOOLEAN); / P Set_Att(X,Y:INTEGER;Color:Byte); Changes the video attribute at X,Y to color. X = 1..80, Y = 1..25. + P Set_Dc_Params; + P Set_Dtr(On:BOOLEAN); / P Set_Edit_Mode(Yes:BOOLEAN); Sets or resets edit mode. Make sure that Active_Field > 0. / P Set_Field_Color(Fieldnr:INTEGER;Color:Byte); Changes video attributes of current field to color. Fieldnr must be valid. / P Set_Mx(Value:INTEGER); Move Cursor to Column = Value. Conflicts with SCL likely. / P Set_My(Value:INTEGER); Move Cursor to Row = Value. Conflicts with SCL likely. + P Set_Rts(On:BOOLEAN); / P Set_Screen_Color(Color:Byte); Changes the complete screen to color (incl all fields). + F St(I:INTEGER):String80; + P Strip(VAR Wrkstr:String;VAR Len:INTEGER); + F Stripleft(Wrkstr: String): String; + F Stripright(Wrkstr: String): String; + F Sys_Msg(Nr:INTEGER):String80; + F Time(Seconds:BOOLEAN):String10; + F Time_String(H,M,S:WORD):String10; + F Tx_Ok:BOOLEAN; + F Weekday(Y,M,D:WORD):INTEGER; + P W_Cont(Fieldnr:INTEGER;Cont:String80); / P W_Crt(Fieldnr:INTEGER;Msg:String80); Writes Msg to the specified field. Does not change/Update Format content (Screen only). S_Ptr must be valid (>0). + P W_Sel(Fieldnr:INTEGER;Sel:BOOLEAN); + F X_Max:INTEGER; + F Y_Max:INTEGER; Appendix B, SCL procedures & functions page 236 Appendix B, SCL procedures & functions page 236 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Datacom Control Characters Datacom Control Characters CONST Nul = $0; Soh = $1; Stx = $2; Etx = $3; Eot = $4; Enq = $5; Ack = $6; Bel = $7; Con = $7; Bs = $8; Ht = $9; Lf = $a; Vt = $b; Ff = $c; Cr = $d; S0 = $e; S1 = $f; Dle = $10; Dc1 = $11; Dc2 = $12; Dc3 = $13; Dc4 = $14; Nak = $15; Syn = $16; Etb = $17; Can = $18; Em = $19; Sub = $1a; Esc = $1b; Fs = $1c; Gs = $1d; Rs = $1e; Us = $1f; Pol = $70; Sel = $71; Fsl = $73; Bsl = $74; Del = $7f; Appendix B, SCL procedures & functions page 237 Appendix B, SCL procedures & functions page 237 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Field Attributes and Colors Field Attributes and Colors ___________________________ Possible Field Attributes: Possible Field Attributes: -------- Monochrome ---------- Normal Active Selected Active (Color)----- ----------------------------------------------------------- Inverted N Y Y Y Intensity Y Y Y Y Underlined N Y Y N Marked N Y 1) Y N Blink N Y N Y 1) The marks blink if used as an attribute for 'Active'. Note: Multiple choices of the above attributes are possible. Refer Note: to the SFD part of the manual for restrictions applying to certain combinations of attributes. 'Normal' and 'Selected' on color systems are specified by any valid Foreground/Background color combination according to the table below. Colors. (Systems with color graphics adapter). Colors. (Systems with color graphics adapter). Background Foreground --------------------------------------- Black Y Y Blue Y Y Green Y Y Cyan Y Y Red Y Y Magenta Y Y Brown Y Y Light grey Y Y Dark Grey N Y Light Blue N Y Light Green N Y Light Cyan N Y Light Red N Y Light Magenta N Y Yellow N Y White N Y Appendix B, SCL procedures & functions page 238 Appendix B, SCL procedures & functions page 238 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Functions in SCL Programs Functions in SCL Programs _________________________ Right : 1. In Travel Mode : Next Field. Travel Mode 2. In Entry Mode : Next Character. Entry Mode Left : 1. In Travel Mode : Previous Field. Travel Mode 2. In Entry Mode : Previous Character. Entry Mode Down : First field on next line. Up : Last field on previous line. Home : First field in line. End : Last field in line. PgDn : Last field on format. PgUp : First field on format. Tab : Next field. ShiftTab : Previous field. Backspace : Delete character left of cursor. Insert : Insert a space at the cursor position. Delete : Delete character under cursor. Return : 1. Entry mode. 2. Finish field and advance to next field (if already in the last field, finish the format). 3. Toggle Selected Status of a Constant. Selected Escape : Finish Format. F1 : Format related Help information. F2 : Field related Help information. F3 : UNDO. Restores field to previous content. F10 : Abort current activity (not valid with every format). Appendix B, SCL procedures & functions page 239 Appendix B, SCL procedures & functions page 239 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Standard SCL Error Messages Standard SCL Error Messages ___________________________ <1> Format File not found <2> Not enough Memory to run <3> This program requires 80 column screen <4> Format does not fit at specified location <5> Format not found <6> Insufficient Mem in Heap for screen <7> Runtime or I/O error while SCL was running <8> Format file not sorted or integrity error <9> Attempt to read field while format read pointer is zero <10> Attempt to read from invalid fieldnumber <11> Break key pressed <12> Attempt to write to field while format write pointer is zero <13> Attempt to write to invalid field number <14> Invalid path specified <15> Invalid Key Pressed <16> Warning: End of Field <17> Format has only one Field <18> Input mandatory <19> Numeric Data expected <20> Value entered too small <21> Value entered too big <22> <23> <24> <25> <26> <27> <28> <29> <30> <31> <32> <33> <34> <35> <36> Integer number expected <37> Helpfile not available <38> This Helpfunction not available <39> Autohelp-Format not found <40> Appendix B, SCL procedures & functions page 240 Appendix B, SCL procedures & functions page 240 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual The Shareware Idea The Shareware Idea Shareware (sometimes called User supported Software or freeware) attempts to provide useful programs to the PC community at low cost by reducing the dependence on conventional marketing channels. Several software developers have proven that the concept works, to the mutual benefit of the independent program authors and the PC community itself. The user benefits by the availability of low cost software which he can evaluate on his own system before making the decision to purchase it. The author benefits by being able to enter the software market without extensive monetary risks. The user community determines which products succeed based on their true utility, rather than on their marketing achievements. Appendix B, OASIS products page 241 Appendix B, OASIS products page 241 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual OASIS Products & Licencing Terms OASIS Products & Licencing Terms The following products will be available from EUREKA SOFTWARE ASSOCIATES: - OASIS Demo package - OASIS Evaluation software - OASIS OASIS Demo package OASIS Demo package __________________ Description Description This package as its name indicates is only to be used for demonstration purposes. It is ment to give you a taste of what you can achieve with OASIS. Each demo application comes with the source code and the associated documentation commenting each procedure. This package does not require you to register, feel free to copy and distribute this package and use some of its handy utilities. Distribution Distribution - Download - Mail order Pricing (No registration required) Pricing - Download no charge - Mail order $10 includes disk & hard copy Appendix B, OASIS products page 242 Appendix B, OASIS products page 242 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual OASIS Evaluation (This package) OASIS Evaluation ________________ Description Description This package is the evaluation version of OASIS. It offers almost all OASIS features and formats (screens) created with the evaluation version are entirely compatible with full blown version of OASIS. The limitation of this version resides in the number of formats (screens) you can handle in any single file, the limit is set to 20 for OASIS Evaluation. This mean you can still create an application that requires up to 20 screens, for more complexe applications with more screens you need the full version of OASIS. Distribution Distribution - Download - Mail order Licencing Terms Licencing Terms OASIS Evaluation is NOT public domain software, it is a copyrighted product distributed by EUREKA SOFTWARE ASSOCIATES. You are hereby granted a limited license to use OASIS, and to copy it and further distribute it, under the following conditions: 1) No fee other than the cost of media and copying (max $10 per copy) may be charged for such copying and distribution, otherwise permission of EUREKA SOFTWARE ASSOCIATES is required. 2) OASIS Evaluation may ONLY be distributed in its original state, complete and without any modifications or changes to the program itself or to any of its data files. 3) Use without registration must be limited to a reasonable time (no more than 14 days) and for test and evaluation purposes only, after which it must be registered in accordance with the following terms. Appendix B, OASIS products page 243 Appendix B, OASIS products page 243 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Commercial use: ______________ If OASIS Evaluation Software is used in a commercial & institutional environment users must register under the 'Commercial Users Licence Agreement' scheme. Any use of OASIS Evaluation beyond the trial period is a copyright violation. Conditions: Within the terms of this agreement, a corporation, company, institution, organization, or individual can use OASIS Evaluation to produce programs for commercial purposes subject to the following conditions: 1. This license applies to the OASIS Evaluation software as described in this manual and its documentation. 2. You must treat this software just like a book ONLY ONE CPU PER LICENSE can use the software at the same time in the original or modified forms. However, you are authorized to make archival copies for safekeeping. 3. You may produce any number of executable code programs for profit for world-wide distribution with this software without royalties to the author. 4. The license applies to the original copy of this software as well as to updated versions which may become available. There is no further charge for using the updated versions. The author is neither obligated to provide updated versions nor notices of error corrections. The author is not obligated to provide any services of any kind to support OASIS Evaluation . 6. The user agrees to conscientiously respect the copyright to the author of the code and not to illegally, unethically, or neglectfully exploit the services provided by the author. 7. This code is provided "as is" without warranty of any kind, either expressed or implied, included but not limited to the implied warranty of merchantability and fitness for a specific purpose. The entire risk as to the quality and performance of the coding is with you. Should the code prove defective, you assume the entire cost of all necessary servicing, repair or correction. 8. In no event will the author be liable to you for any damages, including any lost profits, lost savings or other incidental or consequential damages arising out of the use or inability to use this code. 9. The User acknowledges having read this agreement and the License Statement, understands them, and agrees to be bound by their terms and conditions. Appendix B, OASIS products page 244 Appendix B, OASIS products page 244 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Private (non-profit) use: ________________________ If OASIS Evaluation is used privately only and not for profit making purposes, please register under the private user licence agreement scheme. The applicable terms are, apart from point 3, identical to the ones listed above. Pricing Pricing Registration Registration $40 does not include disk or manual Private Licence Private Licence includes registration, distribution disks $60 & reference manual on disk includes registration, distribution disks $80 & with hard copy manual Commercial Users Licence Commercial Users Licence includes registration, distibution disks $120 & hard copy manual. Appendix B, OASIS products page 245 Appendix B, OASIS products page 245 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual OASIS OASIS _____ Description Description Identical to OASIS Evaluation but no limit to the number of format per file. Distribution Distribution - Mail order Note: Application available, Documentation draft version approx. 250 pages. Licensing terms Licensing terms - Same as OASIS Evaluation Commercial use. Pricing Pricing - includes registration, distibution disks $199 & hard copy manual. Appendix B, OASIS products page 246 Appendix B, OASIS products page 246 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual ------------------------ | Invoice & Order Form | Invoice & Order Form ------------------------ ================================================================= " O R D E R F O R M " O R D E R F O R M "===============================================================" " Date: __ / __ / __ PO#: ______________ " "---------------------------------------------------------------" " Qty Description $/unit " "---------------------------------------------------------------" " | | | " " __ |OASIS Demo package mail order * | $10.00 |___.__ " " | | | " " __ |OASIS Evaluation Registration | $40.00 |___.__ " " |(does not include disk) | | " " | | | " " __ |OASIS Evaluation Private Licence * | $60.00 |___.__ " " |(registration, disks, manual on disk) | | " " | | | " " __ |OASIS Evaluation Private Licence ** | $80.00 |___.__ " " |(registration, disks and manual) | | " " | | | " " __ |OASIS Evaluation Commercial User Licence|$120.00 |___.__ " " |(registration, disks and manual) ** | | " " | | | " " __ |OASIS Commercial User Licence ** |$199.00 |___.__ " " |(registration, disks and manual) | | " " | | | " "===============================================================" " Michigan residents add 4% sales tax Subtotal: $____.__ " " Shipping per order Shipping: $____.__ " " * US $3 first copy, $1 other copies Tax: $____.__ " " ** US $3 first copy, $2 other copies Total: $____.__ " Total "---------------------------------------------------------------" " Method of Payment: ( ) Check ( ) Money Order " " " " Make check payable to: EUREKA SOFTWARE ASSOCIATES " EUREKA SOFTWARE ASSOCIATES " 2344 Yorkshire " " Ann Arbor, MI 48104 " " USA " " " " For orders outside the U.S. please send check drawn on U.S. " " bank in U.S. dollars, or international money order in U.S. " " dollars. " "===============================================================" " Name: ________________________________________________ " " Address: ________________________________________________ " " ________________________________________________ " " City: ______________________ State: __ Zip: _____ " " " ================================================================= Appendix B, OASIS products page 247 Appendix B, OASIS products page 247 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual ------------------------ | Invoice & Order Form | Invoice & Order Form ------------------------ ================================================================= " I N V O I C E " I N V O I C E "===============================================================" " Date: __ / __ / __ PO#: ______________ " "---------------------------------------------------------------" " Qty Description $/unit " "---------------------------------------------------------------" " | | | " " __ |OASIS Demo package mail order | $10.00 |___.__ " " | | | " " __ |OASIS Evaluation Registration | $40.00 |___.__ " " |(does not include disk) | | " " | | | " " __ |OASIS Evaluation Private Licence | $60.00 |___.__ " " |(registration, disks & manual on disk) | | " " | | | " " __ |OASIS Evaluation Private Licence | $80.00 |___.__ " " |(registration, disks and manual) | | " " | | | " " __ |OASIS Evaluation Commercial User Licence|$120.00 |___.__ " " |(registration, disks and manual) | | " " | | | " " __ |OASIS Commercial User Licence |$199.00 |___.__ " " |(registration, disks and manual) | | " " | | | " "===============================================================" " Remit to: Subtotal: $____.__ " " EUREKA SOFTWARE ASSOCIATES Shipping: $____.__ " " 2344 Yorkshire Tax: $____.__ " " Ann Arbor, MI 48104 USA Total: $____.__ " Total "===============================================================" " SOLD TO: " " " " Name: ________________________________________________ " " Address: ________________________________________________ " " ________________________________________________ " " City: ______________________ State: __ Zip: _____ " " Country: ______________________ " " " "---------------------------------------------------------------" " SHIP TO: " " " " Name: ________________________________________________ " " Address: ________________________________________________ " " ________________________________________________ " " City: ______________________ State: __ Zip: _____ " " Country: ______________________ " " " ================================================================= Appendix B, OASIS products page 248 Appendix B, OASIS products page 248 OASIS Evaluation Reference Manual OASIS Evaluation Reference Manual Appendix B, OASIS products page 249 Appendix B, OASIS products page 249