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