home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / e / Exemples / capus2.lha / capus2 / UserStartup / Sources / ReqUserStartup.e < prev    next >
Encoding:
Text File  |  1995-03-27  |  6.6 KB  |  228 lines

  1. /*======<<< Peps Header >>>======
  2.  PRGVERSION '0'
  3.  ================================
  4.  PRGREVISION '0'
  5.  ================================
  6.  AUTHOR      'NasG√l'
  7.  ===============================*/
  8. /*======<<<   History   >>>======
  9.  ReqStartup
  10.  ===============================*/
  11.  
  12. OPT OSVERSION=37
  13.  
  14. MODULE 'reqtools','libraries/reqtools'
  15. MODULE 'exec/lists','exec/nodes'
  16. MODULE 'dos/dos','dos/dosasl','dos/dosextens','dos/dostags'
  17. MODULE 'exec/ports','intuition/screens','graphics/displayinfo','graphics/text'
  18.  
  19. ENUM ER_NONE,ER_ONLYCLI,ER_BADARGS,ER_REQTOOLSLIB,ER_LIST,ER_INITENV,ER_SCREEN
  20.  
  21. DEF reqtexte[2000]:STRING
  22. DEF reqgad[80]:STRING
  23. DEF screen=NIL:PTR TO screen
  24. DEF cmd[256]:STRING
  25. DEF defs[256]:STRING
  26. DEF dorun=FALSE,test=FALSE,openscreen=FALSE
  27.  
  28. DEF slist:PTR TO lh
  29.  
  30. PMODULE 'ReqUserStartupList'
  31.  
  32. /*"main()"*/
  33. PROC main() HANDLE
  34.     DEF r
  35.     DEF n:PTR TO ln
  36.     DEF rdargs=NIL,myargs:PTR TO LONG
  37.     VOID {banner}
  38.     myargs:=[0,0,0,0]
  39.     IF rdargs:=ReadArgs('DefaultStartup,Run/S,Test/S,Screen/S',myargs,NIL)
  40.         IF myargs[0] THEN StrCopy(defs,myargs[0],ALL)
  41.         IF myargs[1] THEN dorun:=TRUE
  42.         IF myargs[2] THEN test:=TRUE
  43.         IF myargs[3] THEN openscreen:=TRUE
  44.         IF initEnv()
  45.             IF reqtoolsbase:=OpenLibrary('reqtools.library',37)
  46.                 IF slist:=p_InitList()
  47.                     makeFileList()
  48.                     makeRequest()
  49.                     IF openscreen
  50.                         IF openScreen()<>ER_NONE THEN Raise(ER_SCREEN)
  51.                     ENDIF
  52.                     r:=RtEZRequestA(reqtexte,reqgad,0,0,[RTEZ_REQTITLE,'ReqUserStartup v0.1 ⌐ NasG√l',RT_SCREEN,screen,RT_PUBSCRNAME,'ReqUserStartupScreen',RT_UNDERSCORE,"_",NIL])
  53.                     IF r<>0
  54.                         n:=p_GetAdrNode(slist,r-1)
  55.                         StringF(cmd,'S:\s',n.name)
  56.                     ELSE
  57.                         StringF(cmd,'S:\s',defs)
  58.                     ENDIF
  59.                 ELSE
  60.                     Raise(ER_LIST)
  61.                 ENDIF
  62.             ELSE
  63.                 Raise(ER_REQTOOLSLIB)
  64.             ENDIF
  65.             remENV()
  66.         ELSE
  67.             Raise(ER_INITENV)
  68.         ENDIF
  69.     ELSE
  70.         Raise(ER_BADARGS)
  71.     ENDIF
  72.     Raise(ER_NONE)
  73. EXCEPT
  74.     IF openscreen
  75.         IF screen THEN CloseScreen(screen)
  76.     ENDIF
  77.     IF rdargs THEN FreeArgs(rdargs)
  78.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  79.     SELECT exception
  80.         CASE ER_ONLYCLI;        WriteF('seulement en cli..\n')
  81.         CASE ER_BADARGS;        WriteF('Mauvais arguments..\n')
  82.         CASE ER_REQTOOLSLIB;    WriteF('retools.library v37 ??..\n')
  83.         CASE ER_LIST;           WriteF('Erreur de crΘation de la liste..\n')
  84.         CASE ER_INITENV;        WriteF('''makedir ram:env'' ou ''assign env: ram:env'' impossible..\n')
  85.     ENDSELECT
  86.     IF test=TRUE
  87.         WriteF('Executing \s\n',cmd)
  88.     ELSE
  89.         IF dorun=FALSE
  90.             Execute(cmd,0,stdout)
  91.         ELSE
  92.             myExecute(cmd,'S:')
  93.         ENDIF
  94.     ENDIF
  95. ENDPROC
  96. /**/
  97. /*"initEnv()"*/
  98. PROC initEnv()
  99.     DEF r,lock,d,dl
  100.     IF test=FALSE
  101.         lock:=CreateDir('Ram:ENV')
  102.         IF lock=0 THEN RETURN FALSE
  103.         UnLock(lock)
  104.         IF d:=Lock('Ram:ENV',-2)
  105.             dl:=DupLock(d)
  106.             UnLock(d)
  107.             r:=AssignLock('ENV',dl)
  108.             RETURN TRUE
  109.         ELSE
  110.             RETURN FALSE
  111.         ENDIF
  112.     ELSE
  113.         RETURN TRUE
  114.     ENDIF
  115. ENDPROC
  116. /**/
  117. /*"remENV()"*/
  118. PROC remENV()
  119.     IF test=FALSE
  120.         AssignLock('ENV',NIL)
  121.         DeleteFile('Ram:ENV')
  122.     ENDIF
  123. ENDPROC
  124. /**/
  125. /*"makeFileList()"*/
  126. PROC makeFileList()
  127.     DEF er
  128.     DEF i:PTR TO fileinfoblock
  129.     DEF anchor=NIL:PTR TO anchorpath
  130.     DEF name[256]:STRING
  131.     slist:=p_InitList()
  132.     anchor:=New(SIZEOF anchorpath+250)
  133.     anchor.strlen:=249
  134.     er:=MatchFirst('S:startup#?',anchor)
  135.     WHILE er=0
  136.         i:=anchor.info
  137.         StringF(name,'\s',i.filename)
  138.         IF EstrLen(name)<>16
  139.             p_AjouteNode(slist,name,0)
  140.         ENDIF
  141.         er:=MatchNext(anchor)
  142.     ENDWHILE
  143.     MatchEnd(anchor)
  144.     Dispose(anchor)
  145. ENDPROC
  146. /**/
  147. /*"makeRequest()"*/
  148. PROC makeRequest()
  149.     DEF n:PTR TO ln,c=1
  150.     DEF pv[256]:STRING
  151.     n:=slist.head
  152.     WHILE n
  153.         IF n.succ<>0
  154.             StringF(pv,'(\d[2]) ->\l\s[32]\n',c,n.name)
  155.             StrAdd(reqtexte,pv,ALL)
  156.             StringF(pv,'_\d|',c)
  157.             StrAdd(reqgad,pv,ALL)
  158.             c:=c+1
  159.         ENDIF
  160.         n:=n.succ
  161.     ENDWHILE
  162.     StrAdd(reqgad,'_By NasG√l',ALL)
  163. ENDPROC
  164. /**/
  165. /*"myExecute(cmd,dir)"*/
  166. PROC myExecute(cmd,dir) HANDLE
  167.     DEF ofh:PTR TO filehandle
  168.     DEF ifh:PTR TO filehandle
  169.     DEF newct=NIL:PTR TO mp
  170.     DEF oldct:PTR TO mp
  171.     DEF oldcd=NIL
  172.     DEF newcd=NIL
  173.     DEF test
  174.     IF ofh:=Open('NIL:',1006)
  175.         IF IsInteractive(ofh)
  176.             newct:=ofh.type
  177.             oldct:=SetConsoleTask(newct)
  178.             ifh:=Open('CONSOLE:',1005)
  179.             SetConsoleTask(oldct)
  180.         ELSE
  181.             ifh:=Open('NIL:',1005)
  182.         ENDIF
  183.     ENDIF
  184.     newcd:=Lock(dir,-2)
  185.     oldcd:=CurrentDir(newcd)
  186.     IF test:=SystemTagList(cmd,[SYS_OUTPUT,NIL,
  187.                          SYS_INPUT,NIL,
  188.                          SYS_ASYNCH,TRUE,
  189.                          SYS_USERSHELL,FALSE,
  190.                          NP_STACKSIZE,4096,
  191.                          NP_PRIORITY,0,
  192.                          NP_PATH,NIL,
  193.                          NP_CONSOLETASK,newct,
  194.                          0])
  195.     ENDIF
  196.     CurrentDir(oldcd)
  197.     IF newcd THEN UnLock(newcd)
  198.     IF ofh THEN Close(ofh)
  199.     IF ifh THEN Close(ifh)
  200.     Raise(ER_NONE)
  201. EXCEPT
  202.     RETURN exception
  203. ENDPROC
  204. /**/
  205. /*"openScreen()"*/
  206. PROC openScreen() HANDLE
  207.     DEF ps:PTR TO screen
  208.     IF (ps:=OpenScreenTagList(NIL,          /* get ourselves a public screen */
  209.                                  [SA_TOP,0,
  210.                                   SA_DEPTH,3,             /*                         */
  211.                                   SA_FONT,['topaz.font',8,0,0]:textattr,              /*                         */
  212.                                   SA_DISPLAYID,HIRES_KEY,          /* le champ SA_DISPLAYID           */
  213.                                   SA_PUBNAME,'ReqUserStartupScreen',
  214.                                   SA_TITLE,'ReqUserStartup v0.1 ⌐ 1995 NasG√l',
  215.                                   SA_AUTOSCROLL,TRUE,
  216.                                   SA_TYPE,CUSTOMSCREEN+PUBLICSCREEN,
  217.                                   SA_OVERSCAN,OSCAN_TEXT,
  218.                                   SA_PENS,[0,1,1,2,1,3,1,0,2,1,2,1]:INT,    /* RΘpartition de couleurs WB 2.0 */
  219.                                   SA_DETAILPEN,1,            /* Detailpen */
  220.                                   SA_BLOCKPEN,2,             /* BlockPen  */
  221.                                   0,0]))=NIL THEN Raise(ER_SCREEN)
  222.     screen:=ps
  223.     Raise(ER_NONE)
  224. EXCEPT
  225.     RETURN exception
  226. ENDPROC
  227. /**/
  228.