home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / astro-src-2.1.0beta.tar.gz / astro-src-2.1.0beta.tar / astro-src-2.1.0beta / source / PalmUtil.c < prev    next >
C/C++ Source or Header  |  2000-09-26  |  5KB  |  190 lines

  1. /*
  2.  * Astro Info - a an astronomical calculator/almanac for PalmOS devices.
  3.  * 
  4.  * $Id: PalmUtil.c,v 1.2 2000/08/09 12:34:57 mheinz Exp $
  5.  * Copyright (C) 2000, Michael Heinz
  6.  * 
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version 2
  10.  * of the License, or (at your option) any later version.
  11.  * 
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  * 
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software
  19.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  */
  21.  
  22. #include <PalmOS.h>
  23. #include "PalmUtil.h"
  24. #include "MathLib.h"
  25.  
  26.  
  27. /*
  28.  * Returns true if the ROM version is at least
  29.  * minVersion.
  30.  */
  31. Boolean CheckMinRomVersion(UInt32 minVersion)
  32. {
  33.     UInt32 romVersion;
  34.     
  35.     FtrGet(sysFtrCreator,
  36.            sysFtrNumROMVersion,
  37.            &romVersion);
  38.  
  39.     return (minVersion <= romVersion);
  40. }
  41.  
  42. /* Retrieve the current value of a field. */
  43. int GetNumField(FormPtr formPtr, UInt16 id)
  44.     FieldPtr fld = (FieldPtr)FrmGetObjectPtr(formPtr, 
  45.                                              FrmGetObjectIndex(formPtr, 
  46.                                                                id)); 
  47.     char *s = FldGetTextPtr(fld);
  48.     return StrAToI(s);
  49. }
  50.  
  51. /*
  52.  * Convert a double to a string.
  53.  * s = destination string
  54.  * d = number to convert
  55.  * p = # of digits to the right of the decimal.
  56.  * l = the maximum length of s.
  57.  */
  58. void
  59. StrDToA(char *s,
  60.         double d,
  61.         int p,
  62.         int l)
  63. {
  64.     int c;
  65.     double i,f;
  66.  
  67.     c = 0;
  68.  
  69.     if (d < 0.0)
  70.         s[c++] = '-';
  71.  
  72.     d = fabs(d);
  73.     i = floor(d);
  74.     f = d - i;
  75.  
  76.     StrIToA(&s[c],
  77.             i);
  78.  
  79.     if (p == 0 || c >= l) 
  80.         return;
  81.     
  82.     c = StrLen(s);
  83.     s[c++] = '.';
  84.     
  85.     while (p-- > 0 && c < l) {
  86.         f = f * 10.0;
  87.         i = floor(f);
  88.         f = f - i;
  89.         s[c++] = 48 + i;
  90.     }
  91.     s[c] = 0;    
  92. }
  93.  
  94. #define MAXDBRECORDS 16
  95.  
  96. DBRecord**
  97. GetDBList(UInt32 type,
  98.           UInt32 creator,
  99.           int *count) 
  100. {
  101.     Err error;
  102.     Boolean newSearch = 1;
  103.     
  104.     DmSearchStateType* state = (DmSearchStateType*)MemPtrNew(sizeof(DmSearchStateType));
  105.     DBRecord** recordList = (DBRecord**)MemPtrNew(sizeof(DBRecord*)*MAXDBRECORDS);
  106.  
  107.     *count = 0;
  108.     while (*count < MAXDBRECORDS) 
  109.     {
  110.         DBRecord* record = MemPtrNew(sizeof(DBRecord));
  111.         recordList[*count] = record;
  112.         
  113.         error = DmGetNextDatabaseByTypeCreator(newSearch,
  114.                                                state,
  115.                                                type,
  116.                                                creator,
  117.                                                0,
  118.                                                &(record->cardNo),
  119.                                                &(record->dbID));
  120.         if (error) 
  121.         {
  122.             MemPtrFree(record);
  123.             break;
  124.         }
  125.  
  126.         error = DmDatabaseInfo(record->cardNo,
  127.                                record->dbID,
  128.                                record->name,
  129.                                NULL, NULL, NULL,NULL,
  130.                                NULL, NULL, NULL, NULL,
  131.                                NULL, NULL);
  132.         if (error)
  133.         {
  134.             MemPtrFree(record);
  135.             break;
  136.         }
  137.                                
  138.         newSearch = 0;
  139.         (*count)++;
  140.     }
  141.     
  142.     MemPtrFree(state);
  143.     
  144.     if ((*count) == 0) 
  145.     {
  146.         FreeDBList(recordList,0);
  147.         return NULL;
  148.     }
  149.     
  150.     return recordList;
  151. }
  152.  
  153. void
  154. FreeDBList(DBRecord **recordList, int count)
  155. {
  156.     int i;
  157.     for (i=0; i < count; i++) 
  158.     {
  159.         DBRecord *record = recordList[i];
  160.         MemPtrFree(record);
  161.     }
  162.     MemPtrFree(recordList);
  163. }
  164.  
  165. void
  166. GotoApplication(UInt32 ApplId) 
  167. {
  168.     Err err;
  169.     UInt16 cardNo;
  170.     LocalID dbID;
  171.     DmSearchStateType dss;
  172.  
  173.     /*
  174.      * Bounce the application
  175.      */
  176.     err = DmGetNextDatabaseByTypeCreator(true,
  177.                                          &dss,
  178.                                          sysFileTApplication,
  179.                                          ApplId,
  180.                                          true,
  181.                                          &cardNo,
  182.                                          &dbID);
  183.     ErrFatalDisplayIf(err != errNone,"Failed to launch application!");
  184.     
  185.     SysUIAppSwitch(cardNo,dbID,
  186.                    sysAppLaunchCmdNormalLaunch,
  187.                    NULL);
  188. }
  189.