home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / amigalibdisks / disk933 / editkeys / loadkeymap.e < prev    next >
Text File  |  1993-12-21  |  3KB  |  118 lines

  1. /*************************/
  2. /*             */
  3. /*  LoadKeymap v1.0     */
  4. /*  © 1993 David Kinder  */
  5. /*             */
  6. /*************************/
  7.  
  8. OPT OSVERSION = 36
  9.  
  10. MODULE 'asl','libraries/asl',
  11.        'devices/console','devices/keymap',
  12.        'exec/io','exec/nodes','exec/ports',
  13.        'intuition/intuition',
  14.        'utility/tagitem',
  15.        'workbench/startup'
  16.  
  17. DEF wb : PTR TO wbstartup,
  18.     mapname[256] : STRING,
  19.     gotone,version,olddir
  20.  
  21. PROC main()
  22.   version := '$VER: LoadKeymap 1.0 (11.9.93)'
  23.   IF (wb := wbmessage) = NIL THEN getargs() ELSE wbargs()
  24.   IF gotone THEN loadmap()
  25. ENDPROC
  26.  
  27. PROC pickmap()
  28.   DEF req : PTR TO filerequestr
  29.  
  30.   IF aslbase := OpenLibrary('asl.library',36)
  31.     IF req := AllocAslRequest(ASL_FILEREQUEST,
  32.       [ASL_HAIL,'Load keymap',
  33.        ASL_OKTEXT,'Load',
  34.        ASL_PATTERN,'~(#?.info)',
  35.        TAG_DONE])
  36.       IF AslRequest(req,[TAG_DONE])
  37.     StrCopy(mapname,req.dir,ALL)
  38.     AddPart(mapname,req.file,256)
  39.     IF StrLen(req.file) > 0 THEN gotone := TRUE
  40.       ENDIF
  41.       FreeAslRequest(req)
  42.     ENDIF
  43.     CloseLibrary(aslbase)
  44.   ELSE
  45.     exit('Could not open asl.library')
  46.   ENDIF
  47. ENDPROC
  48.  
  49. PROC wbargs()
  50.   DEF args : PTR TO wbarg
  51.  
  52.   args := wb.arglist
  53.   IF wb.numargs = 1
  54.     olddir := CurrentDir(args[0].lock)
  55.     pickmap()
  56.   ELSE
  57.     olddir := CurrentDir(args[1].lock)
  58.     StrCopy(mapname,args[1].name,ALL)
  59.     gotone := TRUE
  60.   ENDIF
  61. ENDPROC
  62.  
  63. PROC exit(errstring)
  64.   IF stdout = NIL
  65.     EasyRequestArgs(0,[SIZEOF easystruct,0,'LoadKeymap',errstring,'Cancel'],
  66.       0,NIL)
  67.   ELSE
  68.     WriteF('\s\n',errstring)
  69.   ENDIF
  70.   finish()
  71. ENDPROC
  72.  
  73. PROC finish()
  74.   IF olddir <> NIL THEN CurrentDir(olddir)
  75.   CleanUp(0)
  76. ENDPROC
  77.  
  78. PROC getargs()
  79.   DEF myarg : PTR TO LONG,
  80.       rdargs
  81.  
  82.   myarg := [0]
  83.   rdargs := [0,0,0,0,0,0,'LoadKeymap v1.0\n© 1993 David Kinder\nKEYMAP',0]
  84.   IF ReadArgs('KEYMAP',myarg,rdargs)
  85.     StrCopy(mapname,myarg[0],ALL)
  86.   ELSE
  87.     PrintFault(IoErr(),NIL)
  88.     FreeArgs(rdargs)
  89.     finish()
  90.   ENDIF
  91.   FreeArgs(rdargs)
  92.   IF StrLen(mapname) = 0 THEN pickmap() ELSE gotone := TRUE
  93. ENDPROC
  94.  
  95. PROC loadmap()
  96.   DEF iomsg : PTR TO mp,
  97.       ior : PTR TO iostd,
  98.       seg
  99.  
  100.   IF seg := LoadSeg(mapname)
  101.     IF iomsg := CreateMsgPort()
  102.       IF ior := CreateIORequest(iomsg,SIZEOF iostd)
  103.     IF OpenDevice('console.device',-1,ior,0) = 0
  104.       ior.command := CD_SETDEFAULTKEYMAP
  105.       ior.length := SIZEOF keymap
  106.       ior.data := Shl(seg,2) + SIZEOF ln + 4
  107.       DoIO(ior)
  108.       CloseDevice(ior)
  109.     ENDIF
  110.     DeleteIORequest(ior)
  111.       ENDIF
  112.       DeleteMsgPort(iomsg)
  113.     ENDIF
  114.   ELSE
  115.     exit('Could not load keymap')
  116.   ENDIF
  117. ENDPROC
  118.