home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / palmos / linkmaster-src-1.0.4.tar.gz / linkmaster-src-1.0.4.tar / linkmaster-1.0.4 / linkaware.c < prev    next >
C/C++ Source or Header  |  2000-09-05  |  7KB  |  291 lines

  1. /* linkaware.c
  2.    This file released to the public domain by Ben Darnell.
  3.    You may use this file however you wish to make
  4.    LinkMaster-compatible applications.
  5. */
  6. #include <Pilot.h>
  7. #include "linkaware.h"
  8.  
  9. Boolean LinkCheck()
  10. {
  11. #ifndef NO_LINKGLOBALS
  12.    static int result; /* 0: not checked; 1: present; 2: not present */
  13. #endif
  14.    Err err;
  15.    DmSearchStateType searchstate;
  16.    UInt cardno;
  17.    LocalID dbid;
  18.  
  19. #ifndef NO_LINKGLOBALS
  20.    if (result==1) return true;
  21.    else if (result==2) return false;
  22. #endif
  23.    
  24.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  25.                       &cardno, &dbid);
  26.    if (err) {
  27. #ifndef NO_LINKGLOBALS
  28.       result=2;
  29. #endif
  30.       return false;
  31.    } else {
  32. #ifndef NO_LINKGLOBALS
  33.       result=1;
  34. #endif
  35.       return true;
  36.    };
  37. }
  38.  
  39. void LinkPublish(LinkInfoPtr linkinfo)
  40. {
  41.    Err err;
  42.    DmSearchStateType searchstate;
  43.    UInt cardno;
  44.    LocalID dbid;
  45.  
  46.    if (!LinkCheck) {
  47.       MemPtrFree(linkinfo);
  48.       return;
  49.    };
  50.    
  51.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  52.                       &cardno, &dbid);
  53.    if (err) {
  54.       MemPtrFree(linkinfo);
  55.       return;
  56.    };
  57.    MemPtrSetOwner(linkinfo, 0);
  58.    SysUIAppSwitch(cardno, dbid, linkAppLaunchReturnLink, (Ptr)linkinfo);
  59. }
  60.  
  61. #ifndef NO_LINKSIMPLE
  62. LinkSimplePtr LinkSimpleNew(DmOpenRef db, Word record_index, CharPtr title)
  63. {
  64.    LinkSimplePtr linkinfo;
  65.    LocalID dbid, app_id;
  66.    UInt cardno, app_card;
  67.  
  68.    if (title) {
  69.       /* title is truncated to 32 chars or at the first \n */
  70.       int titlelen=32;
  71.       int tmp;
  72.  
  73.       tmp=StrLen(title);
  74.       if (tmp<titlelen) titlelen=tmp;
  75.  
  76.       tmp=StrChr(title, '\n')-title;
  77.       if ((tmp>0)&&(tmp<titlelen)) titlelen=tmp;
  78.  
  79.       linkinfo=MemPtrNew(65+titlelen);
  80.       MemSet(linkinfo, 65+titlelen, 0);
  81.       ErrFatalDisplayIf(!linkinfo, "Not enough memory");
  82.       StrNCopy(((CharPtr)linkinfo)+64, title, titlelen);
  83.        ((CharPtr)linkinfo)[64+titlelen]=0;
  84.    } else {
  85.       linkinfo=MemPtrNew(64);
  86.       MemSet(linkinfo, 64, 0);
  87.    };
  88.  
  89.    SysCurAppDatabase(&app_card, &app_id);
  90.    DmDatabaseInfo(app_card, app_id,
  91.           NULL,NULL,NULL,NULL,NULL,
  92.           NULL,NULL,NULL,NULL,NULL,
  93.           &linkinfo->creator);
  94.  
  95.    DmOpenDatabaseInfo(db, &dbid, NULL,NULL, &cardno, NULL);
  96.    DmDatabaseInfo(cardno,dbid, linkinfo->db_name,
  97.           NULL,NULL,NULL,NULL,NULL,
  98.           NULL,NULL,NULL,NULL,NULL);
  99.  
  100.    DmRecordInfo(db, record_index, NULL, &linkinfo->record_id, NULL);
  101.  
  102.    return linkinfo;
  103. }
  104. #endif /* NO_LINKSIMPLE */
  105.  
  106.  
  107. #ifndef NO_LINKSIMPLE
  108. GoToParamsPtr LinkSimpleToGoToParams(LinkSimplePtr linkinfo)
  109. {
  110.    GoToParamsPtr gotoparams;
  111.    LocalID dbid;
  112.    DmOpenRef db;
  113.    Word recordnum;
  114.    Err err;
  115.  
  116.    dbid=DmFindDatabase(0, linkinfo->db_name);
  117.    db=DmOpenDatabase(0, dbid, dmModeReadOnly);
  118.    err=DmFindRecordByID(db, linkinfo->record_id, &recordnum);
  119.    /* sort of a kludge, but it will prevent fatal errors
  120.       this will catch non-existant uids and deleted records */ 
  121.    if ((err)||(!DmQueryRecord(db, recordnum))) {
  122.       DmCloseDatabase(db);
  123.       return NULL;
  124.    };
  125.    DmCloseDatabase(db);
  126.  
  127.    gotoparams=MemPtrNew(sizeof(GoToParamsType));
  128.    MemSet(gotoparams, sizeof(GoToParamsType), 0);
  129.    gotoparams->recordNum=recordnum;
  130.    gotoparams->dbCardNo=0;
  131.    gotoparams->dbID=dbid;
  132.  
  133.    return gotoparams;
  134. }
  135. #endif /* NO_LINKSIMPLE */
  136.  
  137. #ifndef NO_LINKCONTAINER
  138. void LinkRequest(LinkInfoPtr linkinfo)
  139. {
  140.    Err err;
  141.    DmSearchStateType searchstate;
  142.    UInt cardno;
  143.    LocalID dbid;
  144.  
  145.    if (!LinkCheck()) {
  146.       MemPtrFree(linkinfo);
  147.       return;
  148.    };
  149.    MemPtrSetOwner(linkinfo, 0);
  150.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  151.                       &cardno, &dbid);
  152.    if (err) {
  153.       MemPtrFree(linkinfo);
  154.       return;
  155.    };
  156.    SysUIAppSwitch(cardno, dbid, linkAppLaunchRequestLink, (Ptr)linkinfo);
  157. }
  158.  
  159. void LinkFollow(LinkInfoPtr linkinfo)
  160. {
  161.    LinkInfoPtr params;
  162.    DmSearchStateType searchstate;
  163.    UInt cardno;
  164.    LocalID dbid;
  165.    Err err;
  166.    DWord result;
  167.    
  168.    params=MemPtrNew(64);
  169.    MemPtrSetOwner(params, 0);
  170.    MemMove(params, linkinfo, 64);
  171.  
  172.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate,
  173.                       'appl', params->creator,
  174.                       true, &cardno, &dbid);
  175.    if (err)
  176.       err=DmGetNextDatabaseByTypeCreator(true, &searchstate,
  177.                      'PROX', params->creator,
  178.                      true, &cardno, &dbid);
  179.    if (err) {MemPtrFree(params); return;};
  180.    SysAppLaunch(cardno, dbid, 0,
  181.         linkAppLaunchFollowLinkSubCall, (Ptr)params, &result);
  182. }
  183. #endif /* NO_LINKCONTAINER */
  184.  
  185. #ifndef NO_LINKHISTORY
  186. void LinkHistoryPush(LinkInfoPtr linkinfo)
  187. {
  188.    Err err;
  189.    DmSearchStateType searchstate;
  190.    UInt cardno;
  191.    LocalID dbid;
  192.    DWord result;
  193.    
  194.    if (!LinkCheck()) {
  195.       MemPtrFree(linkinfo);
  196.       return;
  197.    }
  198.    
  199.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  200.                       &cardno, &dbid);
  201.    if (err) {
  202.       MemPtrFree(linkinfo);
  203.       return;
  204.    };
  205.    MemPtrSetOwner(linkinfo, 0);
  206.    SysAppLaunch(cardno, dbid, 0, linkAppLaunchHistoryPush,
  207.         (Ptr)linkinfo, &result);
  208. }
  209.  
  210. Boolean LinkHistoryBack()
  211. {
  212.    Err err;
  213.    DmSearchStateType searchstate;
  214.    UInt cardno;
  215.    LocalID dbid;
  216.    DWord result;
  217.    
  218.    if (!LinkHistoryBackCheck())
  219.       return false;
  220.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  221.                       &cardno, &dbid);
  222.    if (err)
  223.       return false;
  224.    SysAppLaunch(cardno, dbid, 0, linkAppLaunchHistoryBack, 0, &result);
  225.    if (!result) /* returns 0 on success */
  226.       return true;
  227.    else
  228.       return false;
  229. }
  230.  
  231. Boolean LinkHistoryForward()
  232. {
  233.    Err err;
  234.    DmSearchStateType searchstate;
  235.    UInt cardno;
  236.    LocalID dbid;
  237.    DWord result;
  238.    
  239.    if (!LinkHistoryForwardCheck())
  240.       return false;
  241.    err=DmGetNextDatabaseByTypeCreator(true, &searchstate, 'appl', 'Link', true,
  242.                       &cardno, &dbid);
  243.    if (err)
  244.       return false;
  245.    SysAppLaunch(cardno, dbid, 0, linkAppLaunchHistoryForward, 0, &result);
  246.    if (!result) /* returns 0 on success */
  247.       return true;
  248.    else
  249.       return false;
  250. }
  251.  
  252. Boolean LinkHistoryBackCheck()
  253. {
  254.    DmOpenRef db;
  255.    LinkHistoryPrefsType histprefs;
  256.    Word prefssize;
  257.    
  258.    if (!LinkCheck())
  259.       return false;
  260.  
  261.    db=DmOpenDatabaseByTypeCreator('HIST', 'Link', dmModeReadOnly);
  262.    if (!db)
  263.       return false;
  264.    
  265.    prefssize=sizeof(histprefs);
  266.    PrefGetAppPreferences('Link', 0, &histprefs, &prefssize, true);
  267.  
  268.    if (histprefs.current>=DmNumRecords(db)) {
  269.       DmCloseDatabase(db);
  270.       return false;
  271.    };
  272.  
  273.    DmCloseDatabase(db);
  274.    return true;
  275. }
  276.  
  277. Boolean LinkHistoryForwardCheck()
  278. {
  279.    LinkHistoryPrefsType histprefs;
  280.    Word prefssize;
  281.  
  282.    if (!LinkCheck())
  283.       return false;
  284.  
  285.    prefssize=sizeof(histprefs);
  286.    PrefGetAppPreferences('Link', 0, &histprefs, &prefssize, true);
  287.  
  288.    return (histprefs.current!=0);
  289. }
  290. #endif /* NO_LINKHISTORY */
  291.