home *** CD-ROM | disk | FTP | other *** search
- #ifndef __INC_PROG_C
- #define __INC_PROG_C
- /*******************************************************************
- $CRT 18 Oct 1996 : hp
-
- $AUT Holger Papajewski
- $DAT >>prog.c<< 03 Dec 1996 09:43:10 - (C) ProDAD
- *******************************************************************/
-
- //##private
- // assign ABC: p://posprg/PrefsLibs/Serial
-
- /***********************************************************
- pOS programing example - Copyright (C) 1995-97 proDAD
-
- This code was written as an easy to understand example,
- how to program pOS features. It is provided 'as-is',
- without any express or implied warranty.
-
- Permission is hereby granted to use, copy and modify
- this source code for any purpose, without fee, subject
- to the following conditions:
-
- (1) This notice may not be removed or altered from any
- source distribution.
-
- (2) Altered source versions must be plainly marked as
- such, and must not be misrepresented as being
- the original source code.
-
- (3) If only executable code is distributed, then the
- accompanying documentation have to state that
- "this software is based in part on examples of
- the pOS developer packet".
-
- (4) Permission for use of this code is granted only
- if the user accepts full responsibility for any
- undesirable consequences. proDAD accept NO LIABILITY
- for damages of any kind.
-
- ©proDAD
- ***********************************************************/
-
- #include "ABC:hs/prog.h"
-
- #include "p:pExec/Library.h"
- #include "p:pExec/Resident.h"
- #include "p:pExec/Memory.h"
- #include "p:pExec/Sema.h"
- #include "p:pExec/Class.h"
- #include "p:pExec/Diagnos.h"
- #include "p:pExec/TstTags.h"
- #include "p:pDOS/Segment.h"
- #include "p:pDOS/DosSig.h"
- #include "p:pDOS/DosTags.h"
- #include "p:pGadget/Gadget.h"
- #include "p:pIntui/Tags.h"
- #include "p:pLocale/LocTags.h"
- #include "p:proto/pList.h"
- #include "p:proto/pLibExt.h"
- #include "p:proto/pExec2.h"
- #include "p:proto/pDOS2.h"
- #include "p:proto/pUtil2.h"
- #include "p:proto/pLocale2.h"
- #include "p:pPrefs/PrefsLibData.h"
- #include "p:pPrefs/PrefsTags.h"
-
- #include "p://pOSPrg/SysCatalog/Sys_Cat.h"
-
-
-
- #ifdef _____ME_____
- #include "grund/inc_string.h"
- #include "grund/inc_limits.h"
- #include "grund/inc_stdio.h"
- #include "grund/inc_stdlib.h"
- #else
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <string.h>
- #include <limits.h>
- #include <stdio.h>
- #include <stdlib.h>
- #ifdef __cplusplus
- }
- #endif
- #endif
-
-
- #include "ABC:SerialPrefsGad.h"
-
-
-
- extern struct pOS_DosBase *gb_DosBase;
- extern struct pOS_IntuiDevice *gb_IntuiBase;
- extern struct pOS_UtilityBase *gb_UtilityBase;
- extern struct pOS_GadgetBase *gb_GadgetBase;
- extern struct pOS_LocaleBase *gb_LocaleBase;
-
- struct SerPrefsLib
- {
- pOS_Library sp_Lib;
-
- pOS_NClass *sp_SerialGadClass;
-
- pOS_Catalog *sp_Catalog;
- };
-
-
- /*\
- *** Die Objekt-Data-Struktur der SerialPrefsGad.class beginnt mit
- *** den Pointern auf die Standard-Funktionen Save, Load & Reset
- *** Diese Struktur dient nur zum casten.
- \*/
- struct PrefsObjStdFuncs
- {
- BOOL (*Load_func)(_R_A0 APTR,_R_A1 pOS_FileHandle*);
- BOOL (*Save_func)(_R_A0 APTR,_R_A1 pOS_FileHandle*,_R_D0 ULONG);
- VOID (*Reset_func)(_R_A0 APTR);
- };
-
-
- extern ULONG *FuncTable[];
- const CHAR LibraryName[] ="serial_prefs.library";
- const CHAR LibraryIDName[]="serial_prefs.library 1.0 ("__DATE2__")";
- const CHAR DataTypeName[] ="$DTT:SysPrefs.Library/serial";
- const pOS_TagItem LibraryDescribe[]=
- {
- EXTSTTAG_MainOSID, pOS_MAINOSID,
- EXTSTTAG_GetDTT, (ULONG)&DataTypeName[5],
- TAG_END
- };
-
- BOOL pLibMain(_R_LB pOS_ExecBase*,_R_A0 SerPrefsLib*);
-
-
- pOS_ResidentLibInit InitTable=
- {
- sizeof(SerPrefsLib),
- FuncTable,
- NULL,
- (BOOL(*)(_R_LB pOS_ExecBase*,_R_A0 pOS_Library*))pLibMain
- };
-
-
- /*----------------------------------
- Wird in dieser Library nicht benötigt.
- -----------------------------------*/
- BOOL Open_func(_R_LB SerPrefsLib*) { return(1); }
- VOID Close_func(_R_LB SerPrefsLib*) {}
- ULONG Reserved_func(_R_LB SerPrefsLib*) { return(0); }
-
-
-
- /*----------------------------------
- -----------------------------------*/
- pOS_SegmentLst* Expunge_func(_R_LB SerPrefsLib* lib)
- {
- lib->sp_Lib.lib_Flags |= LIBF_DELEXP; /* verzögertes Schließen aktivieren */
- if(lib->sp_Lib.lib_OpenCnt==0) { /* alle Verwender aben pOS_CloseLibrary() aufgerufen */
- pOS_SegmentLst* Seg=lib->sp_Lib.lib_Segm;
-
- /*\
- *** LibNode aushängen, ACHTUNG: Expunge wird im FORBID aufgerufen
- \*/
- pOS_ListRemove((pOS_Node*)&lib->sp_Lib.lib_Node);
-
-
- if(lib->sp_SerialGadClass)
- pOS_DeleteClass(lib->sp_SerialGadClass);
-
- pOS_CloseCatalog(lib->sp_Catalog);
-
- _pOS_FreeLibraryMem2(&lib->sp_Lib); /* Lib-Memory freigeben */
-
- pOS_CloseLibrary((pOS_Library*)gb_LocaleBase);
- pOS_CloseLibrary((pOS_Library*)gb_GadgetBase);
- pOS_CloseLibrary((pOS_Library*)gb_IntuiBase); /* alle Libs schließen */
- pOS_CloseLibrary((pOS_Library*)gb_DosBase);
- pOS_CloseLibrary((pOS_Library*)gb_UtilityBase);
- return(Seg);
- }
- return(0);
- }
-
-
- /*----------------------------------
- Library-Funktion zum Laden der Prefs eines ihrer Gadgets
- -----------------------------------*/
- BOOL LoadPrefs_func(_R_LB SerPrefsLib *lib, _R_A0 pOS_Gadget *gad,
- _R_A1 pOS_FileHandle *fh )
- {
- PrefsObjStdFuncs *std = (PrefsObjStdFuncs*)gad->gad_SpecialInfo;
-
- return( (std->Load_func)(std,fh) );
- }
-
-
- /*----------------------------------
- Library-Funktion zum Speichern der Prefs eines ihrer Gadgets
- -----------------------------------*/
- BOOL SavePrefs_func(_R_LB SerPrefsLib *lib, _R_A0 pOS_Gadget *gad,
- _R_A1 pOS_FileHandle *fh, _R_D0 ULONG flags )
- {
- PrefsObjStdFuncs *std = (PrefsObjStdFuncs*)gad->gad_SpecialInfo;
-
- return( (std->Save_func)(std,fh,flags) );
- }
-
-
- /*----------------------------------
- Library-Funktion zum zurücksetzen der Daten eines ihrer Gadgets
- -----------------------------------*/
- VOID ResetPrefs_func(_R_LB SerPrefsLib *lib, _R_A0 pOS_Gadget *gad )
- {
- PrefsObjStdFuncs *std = (PrefsObjStdFuncs*)gad->gad_SpecialInfo;
-
- (std->Reset_func)(std);
- }
-
-
- /*\
- *** globale Information-Strukturen zu allen Gadgets der Library
- \*/
- pOS_PrefsLibData gb_LibData[] =
- {
- {"Serial","Serial","Sys",PRFF_Restore|PRFF_LastSaved|PRFF_Default,TAG_DONE},
- };
-
- /*----------------------------------
- -----------------------------------*/
- const pOS_PrefsLibData* GetPrefsData_func(_R_LB SerPrefsLib *lib,
- _R_D0 ULONG index)
- {
- if( index < sizeof(gb_LibData)/sizeof(pOS_PrefsLibData))
- return( &gb_LibData[index] );
- else
- return( NULL );
- }
-
-
-
- /*\
- *** default Werte für das SerialPrefsGadget
- \*/
- const ULONG gb_SerRates[] = {2400,4800,9600,14400,19200,28800,
- 57600,115200,230400,460800,921600,0};
- const ULONG gb_SerBuffers[] = {512,1024,2048,4096,8192,16384,32768,65536,0};
- const CHAR *gb_SerProtocols[]= {"XON/XOFF","RTS/CTS","None",NULL};
- const CHAR *gb_SerParities[] = {"None","Even","Odd","Mark","Space",NULL};
- const CHAR *gb_SerDataBits[] = {"7","8",NULL};
- const CHAR *gb_SerStopBits[] = {"1","2",NULL};
-
- /*----------------------------------
- Library-Funktion zum Erzeugen der einzelnen PrefsGadgets
- -----------------------------------*/
- pOS_Gadget *CreatePrefsGadgetA_func(_R_LB SerPrefsLib *lib,
- _R_A0 const pOS_TagItem *tags)
- {
- ww_w("Ser_Prefs.lib:CreatePrefsGadgetA");
- ww_rp(lib);
- ww_rp(tags);
- ww_endN(NULL);
-
- pOS_Gadget *PGad=NULL;
- ULONG index = pOS_FindTagData(PRFTAG_GadgetNum,tags,-1);
-
-
- switch( index ) {
- case 0:
- PGad=(pOS_Gadget*)pOS_NewIObject(lib->sp_SerialGadClass,NULL,NULL,
- ICLTAG_Gwk, 1,
- PRFSERTAG_AvailBautRates, (ULONG)&gb_SerRates[0],
- PRFSERTAG_AvailBufferSizes, (ULONG)&gb_SerBuffers[0],
- PRFSERTAG_AvailProtocols, (ULONG)&gb_SerProtocols[0],
- PRFSERTAG_AvailParities, (ULONG)&gb_SerParities[0],
- PRFSERTAG_AvailDataBits, (ULONG)&gb_SerDataBits[0],
- PRFSERTAG_AvailStopBits, (ULONG)&gb_SerStopBits[0],
- TAG_MORE, (ULONG)tags, TAG_DONE );
- break;
-
- default:
- break;
- }
-
- return( PGad );
- }
-
-
-
- ULONG *FuncTable[]=
- {
- (ULONG*)Open_func,
- (ULONG*)Close_func,
- (ULONG*)Expunge_func,
- // ------------
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- (ULONG*)Reserved_func,
- // ------------
- (ULONG*)LoadPrefs_func,
- (ULONG*)SavePrefs_func,
- (ULONG*)ResetPrefs_func,
- (ULONG*)GetPrefsData_func,
- (ULONG*)CreatePrefsGadgetA_func,
- (ULONG*)ULONG_MAX
- };
-
-
-
- /*******************************************************************************/
-
- /*******************************************************************************/
-
-
-
- /*----------------------------------
- -----------------------------------*/
- BOOL pLibMain(_R_LB pOS_ExecBase* exec,_R_A0 SerPrefsLib* lib)
- {
- #ifdef __pOS_EXECPRECODE
- extern struct pOS_ExecBase* gb_ExecBase;
- extern struct pOS_ExecLibFunction* gb_ExecLib;
-
- gb_ExecBase=(struct pOS_ExecBase*)exec;
- gb_ExecLib=*((struct pOS_ExecLibFunction**)lib->sp_Lib.lib_Segm->sel_Seg.seg_Reserved2);
- gb_DosBase =(pOS_DosBase*)pOS_OpenLibrary("pdos.library",0);
- gb_IntuiBase=(pOS_IntuiDevice*)pOS_OpenLibrary("pintui.library",0);
- gb_UtilityBase=(pOS_UtilityBase*)pOS_OpenLibrary("putility.library",0);
- gb_GadgetBase=(pOS_GadgetBase*)pOS_OpenLibrary("pgadget.library",0);
- gb_LocaleBase=(pOS_LocaleBase*)pOS_OpenLibrary("plocale.library",0);
- #else
- #error hier fehlt etwas
- #endif
-
-
- lib->sp_Catalog = pOS_OpenCatalog(NULL,"sys/sys.catalog",
- LOCTAG_BuiltInLanguage,"english",TAG_DONE);
-
- /* None - Kein */
- gb_SerProtocols[2]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_None,gb_SerProtocols[2]);
- /* None - Keine */
- gb_SerParities[0]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_None1,gb_SerParities[0]);
- /* Even - Gerade */
- gb_SerParities[1]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_Even,gb_SerParities[1]);
- /* Odd - Ungerade */
- gb_SerParities[2]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_Odd,gb_SerParities[2]);
- /* Mark - Bitwert 1*/
- gb_SerParities[3]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_Mark,gb_SerParities[3]);
- /* Space - Bitwert 0 */
- gb_SerParities[4]=pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_Space,gb_SerParities[4]);
-
- /* Serial */
- gb_LibData[0].pld_Name = pOS_GetCatalogStr(lib->sp_Catalog,MSG_Sys_Serial,gb_LibData[0].pld_Name);
-
-
- lib->sp_SerialGadClass =
- pOS_CreateClass("SerialPrefsGad.class","grpgad.class",NULL,
- (APTR)SerialDispatcher,
- sizeof(SerialData),0);
-
-
- return(lib->sp_SerialGadClass != NULL );
- }
-
-
-
- #ifdef _____ME_____
- #include "ci:grund/debug.cpp"
- #ifdef MYDEBUG
- struct Library *TimerBase;
- ULONG HB_Memory_FlushErrCounter;
- #endif
- #endif
-
-
-
- #endif
-